在实际的开发中经常会遇到..
和...
这样的用法,今天分别说一下这两个语法的用法及使用场景.
两个点
..
称为级联操作符,可以实现对一个对象的连续调用,然后将原对象返回.
使用场景1:初始化视频控制器
/// 初始化控制器
_controller = VideoPlayerController.network(list[0]['video_url'])
///设置视频循环播放
..setLooping(true)
///设置监听
..addListener(() {
setState(() {
});
})
///初始化
..initialize().then((_) async {
///初始化完成更新状态,不然播放器不会播放
setState(() {
playOrPauseVideo();
});
}).catchError((err) {
///播放出错
print(err);
});
使用场景2:使用Bloc框架给state里面的属性赋值时
AllOrderState init() {
return AllOrderState()
..allOrderList = allOrderList
..isLoadNoData = isLoadNoData;
}
AllOrderState clone() {
return AllOrderState()
..allOrderList = allOrderList
..isLoadNoData = isLoadNoData;
}
好处
这样就能省去创建实例对象,然后再依次调用的繁琐,实现链式调用.
三个点
...
用来拼接集合,如List,Map等
//这里组合后 list就变成[ 'a', 'b', 'c','d', 'e', 'f']
var list2 = ['d', 'e', 'f'];
var list = ['a', 'b', 'c', ...list2];
//这里组合后map就变成{'a': 'a', 'b': 'b','c': 'c', 'd': 'd'}
var map2 = {'a': 'a', 'b': 'b'};
var map = {...map2, 'c': 'c', 'd': 'd'};
使用场景: Row 或者 Column 拼接数组
List<Widget> widgetList = [];
widgetList.add(const Text('1'));
widgetList.add(const Text('2'));
widgetList.add(const Text('3'));
widgetList.add(const Text('4'));
return SingleChildScrollView(
child: Column(
children: [
...widgetList,
const Text('5')
],
),
);
这样就可以把Text('1'), Text('2'), Text('3'), Text('4'), Text('5')
很方便的拼接在列表上面了,
好处
数组拼接变得简单