- 变量声明:
var name="张三"; 指定类型后不能赋值其他类型 var name;不指定类型 函数类使用 dynamic name="11"; 不确定具体类型时候用,可以初始化,后面赋值其他类型 String name = 'bob'; 指定具体类型字符串 name.runtimeType 显示类型 var name; 没有赋值情况下,所有类型都是null Object a=1; 不确定类型用和dynamic一样 变量作用域在{}中确定,层级越深作用域越小,函数外的作用域很大 常量定义区别 final nowTime = DateTime.now();//需要运算 const pi=3.14; //不需要运算
- 数据类型,基本类型有数字,字符,布尔
int? a;此时a可以是null
int a=1; 整型
var a=0xFFFFFF; 推断定义类型,十六进制,输出int
double b=1.01 双精度浮点数
num c=1.1 同时支持整型和浮点
方法或属性
isEven 是否偶数
isOdd 是否奇数
int.parse("123") String转int
var a=double.parse("123") String转换double 123.0
1.toString(); 转字符 1.22.toString() 1.225677.toStringAsFixed(2);保留2位小数
1.toDouble(); 转双精度
1.22.toInt();转换int
字符串可以是单引号或双引号,变量可以$name替换,表达式${}替换,拼接字符串用+,多行使用'''或"""
String name= 'Hi ${name.toUpperCase()}';
String name='''你好
世界''';//三个双引号或单引号里面换行保留
var str='nihk' 'nih'
'ceui'
'中国';
字符串连接可以用+也可以不用 nihknihceui中国
var str=r'我是\n中国人'; 输出我是\n中国人保留\n
属性或方法
length 长度 isEmpty是否为空
布尔 只有true 和false,只有值为true才是真其余都是false;
List类型,有序集合其它语言的数组
var a=["a","b"]; var b=const [1,2,3] ; 或者 var a=[]; a.add(12);任意类型 var a=[]..length=3; 长度为3;<int>[]是int类型 List<int> 定义类型
var list = [1, 2, 3];
var list2 = [0, ...list] //插入
var list2 = [0, ...?list] //允许为空
var a=[1,2,3,if(true)12];//允许if
var a=[1,2,3,for(var i in [1,2,5]) i ]; 支持for
[for (var i = 1; i < 5; i++) i];
List<String> a = ['red', 'yellow', 'blue', 'green'];//定义1
var a = <String> ['red', 'yellow', 'blue', 'green']; //定义2
a.add('aa') 添加 a[0]下标访问 a.addAll(["12","aa"]);
a.insert(0, 'aa'); 头部插入 a.insert(a.length, 'aa');尾部插入 a.insertAll(0, ["aa"]);
a.removeAt(2) 删除第三个 a.clear();清空 a.remove("blue");删除值 a.removeLast()删除最后一个 a.removeRange(0, 2);删除两个不包括2
a.removeWhere((element) => element.length < 4);
a.sublist(1,3)截取1-3 [yellow, blue] 不含最后一个
var b =a.sublist(1); 相当于(1,a.length)
var b =a.getRange(1, 3); 某个范围(yellow, blue)不含最后一个返回Iterable类型接口 b.forEach((e)=>print(e));
var b =a.join(","); 用,连接输出字符串
var b =a.contains("red");//是否包含red
var b =a.isEmpty; var b =a.isNotEmpty;是否为空,不为空
Map<int,String> b=a.asMap();转换map
Set<String> b=a.toSet(); 转换set自动去重复
var c = a.followedBy(b)合并
a.sort();升序abc排序 a.shuffle();随机排序 都没有返回值,排序里面支持方法
a.sort((num1, num2) => num1 - num2); //升序排序
a.sort((num1, num2) => num2 - num1);//降序
var i=a.indexOf('blue'); 查找位置2 没找到-1
var i=a.lastIndexOf('blue'); 从最后开始查找,返回位置
for(int i = 0; i < a.length; i++) {print(a[i]);}
a.forEach((element) {print(element);});
for(String e in a){print(e);}
Set类型,无序集合
var a=<dynamic>{}; a.add(12);任意类型;var a=<int>{};整形
var b=const {1,2,3}
Set<String> a= {'red', 'yellow', 'blue', 'green'};//标准1
var a = <String> {'red', 'yellow', 'blue', 'green'}; //定义2
a.intersection(b) 交集 a.union(b)并集 a.difference(b) 输出a里面在b里面不存在的
Map类型
var gameMap = {'microsoft': 'Halo', 'sony' :'God of War'}; gameMap["sony"]="1";
var a={};//任意类型
var a=<String,dynamic>{}; a["a"]=123;特定类型
Map<String,String> a={"a":"中国","b":"美国"}; 标准定义
var a = <String,String>{"a":"中国","b":"美国"}; 定义2
var b=a.containsKey("a");var b=a.containsValue("中"); 包含key 包含值判断
var b=a.keys.toList();var b=a.values.toList();
var b=a.values.toSet();var b=a.keys.toSet();
a.remove('a');删除key
Map<String, int> colorMap = Map.fromIterables(key, val);//key val都是List
Map b = a.map((key, value) => MapEntry(value, key));//map key val交换;除了for foreach
队列Queue
var a= Queue<int>();
a.add(-1);
a.addAll([1,6]); 添加列表
a.addFirst(9); 头部
a.addLast(100); 尾部追加
int b= a.removeFirst();取出值
集合中都有any
var a=[1,2,3,4,5];
var b=a.any((element) => element==25); 判断值是否有一个等于25
var b=a.every((element) => element==25); 要全部等于25
a.take(5) 截取前五个组成新集合
var a = [
[1, 2],
[3, 4]
];
var b =a.expand((element) => element);//转换成一维
Iterable是一个接口,常用的集合类List、Set、Map
Iterable<int> iterable = [1, 2, 3];
int v = iterable.elementAt(1);
json
List l=jsonDecode(str); //json转list
Map<String,dynamic> m=jsonDecode(aa); //json转map
String s= jsonEncode(map/list)
json转模型 json2dart_safe
var aa='{"info":[{"name":"12","age":"33","sex":1,"descs":"简介"},{"name":"12","age":"33","sex":1,"descs":"简介"}]}';
var a =User.fromJson(jsonDecode(aa)).info;
a?.forEach((element) {print(element.descs);});
- 运算符
a is String 是否是字符串,判断类型
a is! String 不属于某个类型
name as String 类型转换
var message = input?? 'Hello'; 判断input是否null,不是直接返回input,否则hello
person..name = 'bob'..age = 28; 连续操作..
var message; message ??= 'Hello'; 赋值判断是否为null,然后赋值
if(){
}else if(){
}else{
}
List l=[1,2,3,5];
for(int i=0;i<l.length;i++){
print(l[i]);
}
l.forEach((element) {
print(element);
});
for (var element in l) {
print(element);
}
assert(true);断言,只有为true执行
try {
var a = 1/0;
}on IntegerDivisionByZeroException{
//一个具体异常
print('0 被除');
}on Exception catch(e){
//任意一个异常
print('a exception: $e');
}catch (e) {
//非具体类型
print('exception $e');
}finally {
print('finally');
}
- 定义函数
String bobSay(String words) { return 'bob say $words'; } String bobSay2(String words) => 'bob say $words'; //简写 String fn(String a,[String a=1]){}//调用 fn(1,2),第二个可选 String fn({String a,int b=1}){} //调用 fn(a:"aa",b:3)
- 类
class A{
static int a=1;
static fn(string w){}
a(){ }和类同名函数为构造函数初始化变量,不能有return
factory a(){ return } factory修饰的工厂构造函数必须有return
}
库
// 三种形式的库导入
import dart:io; 自带标准库
import '../base.dart';
import 'package:test/test.dart';
时间
String now = DateTime.now().timeZoneName//获取时区
String now = DateTime.now().toString().substring(0,19);//标准时间
int now = DateTime.now().millisecondsSinceEpoch; 时间戳13位
作者:Yoby 创建时间:2021-12-28 18:04
更新时间:2024-12-05 13:26
更新时间:2024-12-05 13:26