【Flutter】Dart:变量和内置类型

在 Flutter 中,Dart 语言是核心的编程语言,它以简洁的语法、强类型的特性和高效的执行能力著称。Dart 提供了多种内置类型,包括数字、字符串、布尔、集合类型(如 List、Set、Map)和符文(runes)等。在这篇教程中,我们将深入探讨 Dart 的变量定义、内置类型及其使用方法。

Dart 变量声明与类型推断

在 Dart 中,变量可以通过 varfinalconst 和明确的类型声明来定义:

  • var:类型推断,Dart 会根据赋值推断出变量的类型。
  • final:定义一个不可重新赋值的变量,但其内容可以改变(适用于 List、Set 等集合类型)。
  • const:定义一个编译时常量,值在编译时即已确定,不能改变。
  • 也可以显式地声明类型,例如 intString 等。
dart 复制代码
var name = 'Dart';  // 自动推断为 String 类型
final age = 25;     // 不可重新赋值
const pi = 3.1415;  // 编译时常量
String language = 'Flutter'; // 明确声明类型

数字类型

Dart 中的数字类型主要分为两种:intdouble

  • int:整数类型,表示没有小数部分的数字,64 位的有符号整数。
  • double:双精度浮点数,用于表示带小数点的数字。

int 类型

dart 复制代码
int a = 10;
int b = 5;
int sum = a + b;  // 加法
int difference = a - b;  // 减法
int product = a * b;  // 乘法
int quotient = a ~/ b;  // 整除

double 类型

dart 复制代码
double pi = 3.1415;
double radius = 5.5;
double area = pi * radius * radius;  // 计算面积

数字类型的常用方法

Dart 提供了丰富的数字类型方法:

dart 复制代码
int n = -5;
print(n.abs());  // 取绝对值,输出 5

double num = 5.75;
print(num.ceil());  // 向上取整,输出 6
print(num.floor());  // 向下取整,输出 5
print(num.round());  // 四舍五入,输出 6

字符串类型

Dart 的 String 类型用于表示一系列字符。可以用单引号 ' ' 或双引号 " " 来创建字符串,Dart 对两者没有区别。

dart 复制代码
String greeting = 'Hello, Dart!';
String multiLine = '''这是
多行字符串''';

字符串插值

使用 $ 可以轻松将变量或表达式嵌入到字符串中。

dart 复制代码
String name = 'Flutter';
String message = 'Welcome to $name';  // 插入变量
String complexMessage = '1 + 1 = ${1 + 1}';  // 插入表达式

常用字符串方法

Dart 提供了一些常用的字符串操作方法:

dart 复制代码
String text = 'Dart is awesome';
print(text.length);  // 获取字符串长度
print(text.toUpperCase());  // 转换为大写
print(text.toLowerCase());  // 转换为小写
print(text.contains('awesome'));  // 判断是否包含子串
print(text.replaceAll('awesome', 'amazing'));  // 替换子串

布尔类型

Dart 的 bool 类型用于表示逻辑上的真 (true) 或假 (false)。

dart 复制代码
bool isFlutterAwesome = true;
bool isDartHard = false;

布尔值通常用于控制流程语句,比如 ifwhile 等:

dart 复制代码
if (isFlutterAwesome) {
  print('Flutter is awesome!');
} else {
  print('Keep learning!');
}

列表类型(List)

Dart 的 List 是一个有序的、可重复的集合类型,类似于数组。

创建列表

dart 复制代码
List<int> numbers = [1, 2, 3, 4, 5];
var names = ['Alice', 'Bob', 'Charlie'];  // 自动推断为 List<String>

常用操作

dart 复制代码
numbers.add(6);  // 添加元素
print(numbers);  // 输出 [1, 2, 3, 4, 5, 6]

numbers.removeAt(0);  // 移除第一个元素
print(numbers);  // 输出 [2, 3, 4, 5, 6]

print(numbers.length);  // 获取长度

print(numbers.contains(3));  // 判断是否包含某个元素,输出 true

列表生成

Dart 允许我们动态生成列表:

dart 复制代码
List<int> evenNumbers = List.generate(5, (index) => index * 2);  // [0, 2, 4, 6, 8]

集合类型(Set)

Set 是一个无序且不可重复的集合,主要用于存储独一无二的值。

创建集合

dart 复制代码
Set<String> fruits = {'apple', 'banana', 'orange'};
var uniqueNumbers = <int>{1, 2, 3, 4};  // 集合自动推断类型

常用操作

dart 复制代码
fruits.add('grape');  // 添加元素
print(fruits);  // 输出 {apple, banana, orange, grape}

fruits.remove('banana');  // 移除元素
print(fruits);  // 输出 {apple, orange, grape}

print(fruits.contains('apple'));  // 判断是否包含某个元素,输出 true

映射类型(Map)

Map 是一个键值对的无序集合,键必须是唯一的,但值可以重复。

创建 Map

dart 复制代码
Map<String, int> scores = {
  'Alice': 90,
  'Bob': 85,
  'Charlie': 88
};

常用操作

dart 复制代码
print(scores['Alice']);  // 通过键获取值,输出 90

scores['Bob'] = 95;  // 修改值
print(scores);  // 输出 {Alice: 90, Bob: 95, Charlie: 88}

scores.putIfAbsent('Dave', () => 80);  // 如果不存在则添加
print(scores);  // 输出 {Alice: 90, Bob: 95, Charlie: 88, Dave: 80}

scores.remove('Charlie');  // 删除键值对
print(scores);  // 输出 {Alice: 90, Bob: 95, Dave: 80}

符文(Runes)和 Unicode 字符

Dart 使用 Runes 类型来表示 Unicode 字符。字符串在 Dart 中是 UTF-16 编码,但 Runes 可以处理 32 位 Unicode 字符。

dart 复制代码
String heart = '\u2665';  // 使用 Unicode 表示心形符号
print(heart);  // 输出 ♥

可以通过 runes 属性获取字符串的符文:

dart 复制代码
var emoji = '👋🌍';
emoji.runes.forEach((int rune) {
  var character = String.fromCharCode(rune);
  print(character);  // 输出每个字符
});

总结

在 Dart 中,内置类型包括数字、字符串、布尔、List、Set、Map 和符文,每种类型都有丰富的操作方法和灵活的用法。熟悉这些内置类型的使用,将帮助你更加高效地处理 Flutter 开发中的各种数据操作。

通过掌握这些基础知识,你可以更加自信地在 Flutter 应用中使用 Dart 的强大功能,快速实现各种业务逻辑。

相关推荐
kyriewen40 分钟前
今天,百年巨头一次砍了9200人,而一个离职科学家的实话让全网睡不着觉
前端·openai·ai编程
问心无愧05131 小时前
ctf show web 入门42
android·前端·android studio
kyriewen1 小时前
老板逼我上AI,我偷偷在浏览器里跑LLaMA,省下20万API费
前端·react.js·llm
Beginner x_u2 小时前
前端八股整理(手写 02)|数组转树、数组扁平化、随机打乱一个数组
前端·数组·数组转树·数组扁平化
KaMeidebaby2 小时前
卡梅德生物技术快报|禽类成纤维细胞 FISH 实验:鸟类性别染色体基因定位技术实现与数据验证
前端·数据库·其他·百度·新浪微博
天若有情6732 小时前
前端高阶性能优化:跳出传统懒加载与预加载,基于用户行为做轻量预判加载
前端·性能优化
小小小小宇2 小时前
前端转后端:SQL 是什么
前端
张元清3 小时前
React Observer Hooks:7 种监听 DOM 而不写样板代码的方式
前端·javascript·面试
广州华水科技3 小时前
单北斗GNSS变形监测是什么?主要有怎样的应用与优势?
前端
卷帘依旧3 小时前
【未完待续】React高频面试题
前端