List constructor
1 2 3 4 5 6 7 8 9 10 11 12
| class A { String name = ''; }
class B { final String name; final List<A> aList; B({ required this.name, List<A>? aList, }) : this.aList = aList ?? [] {} }
|
没有初始化的属性为null
static、final、const
static修饰的成员变量属于类,而不是属于对象。
final必须初始化,之后不可变。
const只能修饰编译期间就能确定的值,值不可能改变。const修饰的集合里的元素也不可变。
异步
通过async函数和await表达式
或者可以使用Future功能
1 2 3
| fileOperate() async{ var file = await readFile(); }
|
枚举
枚举可以用switch判断
1 2 3 4 5
| enum Color{ red, blue } List<Color> colors = Color.values;
|
异步forEach
1
| await Future.forEach(rssUrlTable, (item) async {});
|
只读属性
1 2 3
| class Bicycle { int get speed => _speed; }
|
export导出
比如将多个库导出为一个库,别人引用这一个就相当于引用了多个。
1 2 3 4 5
| export 'ticker_bloc.dart'; export 'ticker_event.dart'; export 'ticker_state.dart';
|
列表查找
1
| bool isExisted = list.contains(x);
|
firstWhere查找元素,找到制定的元素。orElse为null可能报错
1 2 3 4 5 6 7 8
|
AppBean temp = beanListz.firstWhere((bean) => (bean.fileName == fileName), orElse: () => AppBean( fileName: fileName, )); widget = _progressBtn(model, temp);
|
=> 代表return
1 2
| void main() => runApp(MyApp()); return runApp(MyApp());
|
可选参数
1 2 3 4 5 6 7
| String getUserInfo(String name,String sex,[String from]){ if(from == null){ return "只有2个参数"; }else{ return "有3个参数"; } }
|
所有函数都有返回值,隐式return null
as类型转换、is判断能否转换、!is判断不是相同类型
1 2 3 4
| if(user is Member){ (user as Member).name = '名字'; }
|
??=空感知赋值、??判空操作、?.非空操作
整除
类型判断和转换
- is判断是否能转换,为null不报错
- as负责转换
1 2 3 4
| if(user is Member){ (user as Member).name = '名字'; }
|
空安全
1 2 3 4
| a?.m() a = b ?? 1; a??b; a?? = 'hello';
|
..级联操作
1 2 3
| var paint = Paint() ..isAntiAlias = true ..strokeWidth = 3.0;
|
抽象类,自类必须实现抽象类中未实现的方法
1 2 3 4 5 6
| abstract class DateBaseOperate{ void insert(); void delete(){} }
|
枚举,枚举可以用swicth
Mixins混入,类似多重继承
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| class X{ a(){print("X.a");} }
class Y{ a(){print("Y.a");} b(){print("Y.b");} }
class T = Y with X;//把X混入Y,X替换掉Y里的同名方法
void main() { T t = new T(); t.a(); t.b(); }
|
1 2 3
|
class AppModel extends Model with LoginModel,AppDownloadModel{}
|
构造函数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| class User{ String name; int age; User(this.name,this.age); User({this.name = '',this.age = 20}); } class User{ String name; int age; User(this.name,this.age); User.fromJson(Map json){ name = json['name']; age = json['age']; } }
|
链式函数
1 2 3 4 5 6
| void main() { final values = [1, 2, 3, 5, 10, 50]; values.skip(1).take(3).map(scream).forEach(print); } String scream(int length) => "A${'a' * length}h!";
|