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

相关推荐
m0_748256143 分钟前
前端 MYTED单篇TED词汇学习功能优化
前端·学习
小马哥编程1 小时前
Function.prototype和Object.prototype 的区别
javascript
小白学前端6661 小时前
React Router 深入指南:从入门到进阶
前端·react.js·react
web130933203981 小时前
前端下载后端文件流,文件可以下载,但是打不开,显示“文件已损坏”的问题分析与解决方案
前端
王小王和他的小伙伴2 小时前
解决 vue3 中 echarts图表在el-dialog中显示问题
javascript·vue.js·echarts
学前端的小朱2 小时前
处理字体图标、js、html及其他资源
开发语言·javascript·webpack·html·打包工具
outstanding木槿2 小时前
react+antd的Table组件编辑单元格
前端·javascript·react.js·前端框架
好名字08212 小时前
前端取Content-Disposition中的filename字段与解码(vue)
前端·javascript·vue.js·前端框架
摇光932 小时前
js高阶-async与事件循环
开发语言·javascript·事件循环·宏任务·微任务
隐形喷火龙3 小时前
element ui--下拉根据拼音首字母过滤
前端·vue.js·ui