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

相关推荐
登登登__1 分钟前
HTML/CSS/JS
javascript·css·html
码叔义11 分钟前
Jsonpath 使用说明
android·开发语言·javascript
zl0_00_018 分钟前
xss-lab
前端·网络·xss
爱上你家菜包25 分钟前
Electron一小时快速上手
前端·javascript·electron
陈琦鹏26 分钟前
Vue3+Vite开发Electron桌面端问题记录
前端·javascript·electron
一人前行37 分钟前
Flutter_学习记录_iOS 模拟器用Charles抓包
flutter
什么什么什么?1 小时前
el-input实现金额输入
javascript·vue.js·elementui
xiaoyustudiowww1 小时前
JSP + Servlet 实现 AJAX(纯JS版)
java·javascript·servlet
狼性书生2 小时前
uniapp vue3实现的一款数字动画调节器件,支持长按、单点操作,提供丝滑的增减动画效果
前端·vue.js·微信小程序·小程序·uni-app
Jelena157795857922 小时前
爬虫获取微店商品快递费 item_feeAPI 接口的完整指南
开发语言·前端·爬虫