目录
因为编写 flutter 用的 dart 语言,所以先学 dart。
博主一路学下来发现对有cc基础的还是很方便哈,目前感觉没什么大的区别。
相关推荐:
使用 VSCode 搭建 Flutter 开发环境 - guangzan - 博客园 (cnblogs.com)
如果没有初始值,可以变成任何类型
- var a;
- // var a = ""; // 一旦赋值,就确定类型,不能随意改动
- a = 'ducafecat';
- a = 123;
- a = true;
- a = {'key': 'val123'};
- a = ['abc'];
-
- print(a);
Object 编译阶段检查类型 , dynamic 编译阶段不检查检查类型
比较 var 与 dynamic、Object
唯一区别 var 如果有初始值,类型被锁定
声明后,类型被锁定
- String a = 'doucafecat';
- int i = 123;
- double d = 0.12;
- bool b = true;
- DateTime dt = new DateTime.now();
- List l = [ a, i, d, b, dt];
变量声明后默认都是 null
不用明确变量类型
- var map = <String, dynamic>{};
- map["image"] = image;
- map["title"] = title;
- map["desc"] = desc;
这里不用 var
,就要写成 Map
api 查询通用接口封装的时候,我们一般用动态类型
如一个 api 请求
- Future
> get( - String path, {
- Map<String, dynamic> queryParameters,
- ...
- });
Map
, 查询参数值是动态
如分类实例定义
- class Category {
- int id; // 数字 id
- String name; // 字符串 分类名称
- String slug;
-
- Category({this.id, this.name, this.slug});
-
- ...
- }
int id;
String name;
明确类型
- final String a = 'ducafecat';
- final a = 'ducafecat';
-
- const String a = 'ducafecat';
- const a = 'ducafecat';
- final a = 'ducafecat';
- a = 'abc'; err
-
- const a = 'ducafecat';
- a = 'abc'; err
- final var a = 'ducafecat'; err
- const var a = 'ducafecat'; err
- final dt = DateTime.now();
-
- const dt = const DateTime.now(); err
- final List ls = [11, 22, 33];
- ls[1] = 44;
-
- const List ls = [11, 22, 33];
- ls[1] = 44; err
- final a1 = [11 , 22];
- final a2 = [11 , 22];
- print(identical(a1, a2)); false
-
- const a1 = [11 , 22];
- const a2 = [11 , 22];
- print(identical(a1, a2)); true
identical
通过比较两个引用的是否是同一个对象判断是否相等
final定义成员变量,指的是让变量在构造函数的
- // 本地存储key
- static const storageFirstOpen = 'first_open';
- static const storageLanguageCode = 'language_code';
- static const storageThemeCode = 'theme_code';
- static const storageToken = 'token';
- static const storageProfile = 'profile';
时候都一次性初始化,好处就是就不会遗漏成员变量
- class PlaceholdWidget extends StatelessWidget {
-
- final String? assetImagePath;
-
- const PlaceholdWidget({
- Key? key,
- this.assetImagePath,
- }) : super(key: key);
-
- @override
- Widget build(BuildContext context) {
- ...
- }
- }
整数值,其取值通常位于 -253 和 253 之间。
64-bit (双精度) 浮点数,符合 IEEE 754 标准。
int 和 double 都是 num 的子类。
- num a = 2e3;
- print([a]);
-
- [2000]
这些和c是一样的
为了代表布尔值,Dart 有一个名字为 bool 的类型。 只有两个对象是布尔类型的:true 和 false 所创建的对象, 这两个对象也都是编译时常量。
bool a; print(a);
只有 true 对象才被认为是 true。 所有其他的值都是 flase(null也是)。
注意: 断言只在检查模式下运行有效,如果在生产模式 运行,则断言不会执行。
&& || ! 和 != == ...都和c一样的
赋值
- String a = 'ducafecat';
- String b = "ducafecat";
区别 转义分隔符
- final myString = 'Bob\'s dog'; // Bob's dog
- final myString = "a \"quoted\" word"; // a "quoted" word
-
- final myString = "Bob's dog"; // Bob's dog
- final myString = 'a "quoted" word'; // a "quoted" word
-
- final value = '"quoted"'; // "quoted"
- final myString = "a $value word"; // a "quoted" word
区别就是没啥区别....
当需要插入一个简单的变量时,可以直接在字符串中使用 $
符号加上变量名。如果插入的是一个更复杂的表达式,则需要使用 ${}
包裹表达式。
- var a = 123;
- String b = 'ducafecat : ${a}';
- print(b);
- var a = 'hello' + ' ' + 'ducafecat';
- var a = 'hello'' ''ducafecat';
- var a = 'hello' ' ' 'ducafecat';
-
- var a = 'hello'
- ' '
- 'ducafecat';
-
- var a = '''
- hello word
- this is multi line
- ''';
-
- var a = """
- hello word
- this is multi line
- """;
-
- print(a);
可以直接+,也可以+都不要,''' 和 """ 也非常好用
- var a = 'hello word \n this is multi line';
- print(a);
-
- hello word
- this is multi line
- var a = r'hello word \n this is multi line';
- print(a);
-
- hello word \n this is multi line
就是在前面加了一个 r
- var a = 'web site ducafecat.tech';
- print(a.contains('ducafecat'));
- print(a.startsWith('web'));
- print(a.endsWith('tech'));
- print(a.indexOf('site'));
-
- true
- true
- true
- 4
- var a = 'web site ducafecat.tech';
- print(a.substring(0,5));
- var b = a.split(' ');
- print(b.length);
- print(b[0]);
-
- web s
- 3
- web
这里b[0]=web就可以发现,切分字符串返回的是一个数组
- var a = 'web site ducafecat.tech';
- print(a.toLowerCase());
- print(a.toUpperCase());
-
- web site ducafecat.tech
- WEB SITE DUCAFECAT.TECH
- print(' hello word '.trim());
- print(''.isEmpty);
-
- hello word
- true
- print('hello word word!'.replaceAll('word', 'ducafecat'));
-
- hello ducafecat ducafecat!
- var sb = StringBuffer();
- sb..write('hello word!')
- ..write('my')
- ..write(' ')
- ..writeAll(['web', 'site', 'https://ducafecat.tech']);
- print(sb.toString());
-
- hello word!my websitehttps://ducafecat.tech
当前时间
- var now = new DateTime.now();
- print(now);
-
- 2022-05-28 20:04:43.607
指定年月日
- var d = new DateTime(2018, 10, 10, 9, 30);
- print(d);
-
- 2018-10-10 09:30:00.000
创建 utc 时间
- var d = new DateTime.utc(2018, 10, 10, 9, 30);
- print(d);
-
- 2018-10-10 09:30:00.000Z
发现后面跟了个Z,也就是0时区的时间
- var d1 = DateTime.parse('2018-10-10 09:30:30Z');
- print(d1);
-
- 2018-10-10 09:30:30.000Z
-
- var d2 = DateTime.parse('2018-10-10 09:30:30+0800');
- print(d2);
-
- 2018-10-10 01:30:30.000Z
- var d1 = DateTime.now();
- print(d1);
- print(d1.add(new Duration(minutes: 5)));
- print(d1.add(new Duration(minutes: -5)));
-
- 2022-05-28 22:09:12.805
- 2022-05-28 22:14:12.805
- 2022-05-28 22:04:12.805
- var d1 = new DateTime(2018, 10, 1);
- var d2 = new DateTime(2018, 10, 10);
- print(d1.isAfter(d2));
- print(d1.isBefore(d2));
-
- false
- true
-
- var d1 = DateTime.now();
- var d2 = d1.add(new Duration(milliseconds: 30));
- print(d1.isAtSameMomentAs(d2));
-
- false
- var d1 = new DateTime(2018, 10, 1);
- var d2 = new DateTime(2018, 10, 10);
- var difference = d1.difference(d2);
- print([difference.inDays, difference.inHours]);
-
- [-9, -216]
- var now = new DateTime.now();
- print(now.millisecondsSinceEpoch);
- print(now.microsecondsSinceEpoch);
-
- 1653747090687
- 1653747090687000
创作不易,希望读者三连支持 💖
赠人玫瑰,手有余香 💖