【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 的强大功能,快速实现各种业务逻辑。

相关推荐
musk1212几秒前
electron 打包太大 试试 tauri , tauri 安装打包demo
前端·electron·tauri
翻滚吧键盘29 分钟前
js代码09
开发语言·javascript·ecmascript
万少1 小时前
第五款 HarmonyOS 上架作品 奇趣故事匣 来了
前端·harmonyos·客户端
OpenGL1 小时前
Android targetSdkVersion升级至35(Android15)相关问题
前端
rzl021 小时前
java web5(黑马)
java·开发语言·前端
Amy.Wang1 小时前
前端如何实现电子签名
前端·javascript·html5
海天胜景1 小时前
vue3 el-table 行筛选 设置为单选
javascript·vue.js·elementui
今天又在摸鱼1 小时前
Vue3-组件化-Vue核心思想之一
前端·javascript·vue.js
蓝婷儿1 小时前
每天一个前端小知识 Day 21 - 浏览器兼容性与 Polyfill 策略
前端
百锦再1 小时前
Vue中对象赋值问题:对象引用被保留,仅部分属性被覆盖
前端·javascript·vue.js·vue·web·reactive·ref