Flutter
中,变量分为两种类型var
如果没有初始值,可以变成任何类型
var a;
// var a = ''; // 一旦赋值,就确定类型,不能随意改动
a = 'abc';
a = 123;
a = true;
a = {'key': '123'};
a = ['abc'];
print(a)
Object
动态任意类型, 编译阶段检查类型
Object a = '123';
a = 123;
a = [2222];
a.p();
dynamic
动态任意类型,编译接点不检查类型
dynamic a = '123';
a = 123;
a = [1111];
a.p();
var
、dynamic
、Object
var
如果有初始值,则类型会被锁定类型声明后,类型会被锁定
String a;
a = '123';
a = 123
名称 | 说明 |
---|---|
num | 数字 |
double | 浮点 |
bool | 布尔 |
String | 字符串 |
StringBuffer | 字符串 Buffer |
DateTime | 时间日期 |
Duration | 时间区间 |
List | 数组 |
Sets | 集合 |
Maps | key-value容器 |
enum | 枚举 |
String a = "123";
int i = 123;
double d = 0.12;
bool b = true;
DateTime dt = DateTime.now();
List l = [1, 2, 3, 4];
变量声明后未确定值的,默认都是 null
var a;
String a;
print(a);
assert(a == null)
assert
assert
与Objective-C
中的函数相同,检查点函数,如果不符合条件直接抛出错误并中止程序进程。只在 Debug
模式下生效。
var
简化定义变量不用明确变量类型
var map = <String, dynamic>{};
map['image'] = image;
map['title'] = title;
map['desc'] = desc;
var
,就要写成 Map
api
查询通用接口封装的时候,我们一般用动态类型。
如一个 api
请求
Future<Response<T>> get<T>(
String path, {
Map<String, dynamic>? queryParameters,
...
})
Map? queryParameters
查询参数值是动态如分类实例定义
class Category {
int id; // 数字 id
String name; // 字符串 分类名称
String slug;
Category({this.id, this.name, this.slug});
...
}
int id
; String name
; 明确类型