前言

上一次写了flutter相干的文章还是在7月份,现在都flutter2.5正式版了,官网都面目一新了。

于是乎,不要等了是时候学习了,开始记录下flutter开发过程中dart的一些罕用语法,能够帮忙咱们事倍功半。

对于Dart

Dart 是一门为全平台构建疾速利用的客户端优化的编程语言,它的长处如下:

  • 为 UI 构建:优化应用针对用户界面的发明进行优化的语言进行开发
  • 研发生产力进步:可重复地批改,而后在正在运行的利用中应用热重载立即看到您的批改
  • 在全平台极速运行:可编译为挪动端、桌面端及后端的 ARM & x64 的二进制文件,或是为 Web 平台编译 Javascript

 接下来次要记录Flutter开发中罕用的dart语法,而后如何更方便快捷地实现一些flutter小小的性能。对于更多Dart相干的知识点,这里不会一一赘述,不过咱们能够到官网系统性地学习Dart语言,这也是Flutter开发的必备语言,官网地址如下:Dart:https://dart.cn/

List数组的罕用办法

数组 (Array) 是简直所有编程语言中最常见的汇合类型,在 Dart 中数组由 List 对象示意。接下来使用应用dart工具来运行这些罕用的办法,工具:https://dartpad.cn

  • 定义固定长度数组
void main() {  var list = List(2);  print('$list'); // [null, null]}
  • 定义混合类型数组
void main() {  var list = List<dynamic>();  list.add('我是文本');  list.add(0.66);  print(list); // [我是文本, 0.66]}
  • 获取数组第一个元素
void main() {  var list = [1, 2, 2, 3, 4, 5, 6, 6];  print(list.first); // 1}
  • 获取数组最初一个元素
void main() {  var list = [1, 2, 2, 3, 4, 5, 6, 6];  print(list.last); // 6}
  • 获取倒序迭代器 - reversed
void main() {    var list = [1, 2, 2, 3, 4, 5, 6, 6];    print(list.reversed); // (6, 6, 5, 4, 3, 2, 2, 1)}
  • 批量增加 - addAll或者 扩大操作符(...)和 空感知扩大操作符(...?)
void main() {   var list = [1, 2, 2, 3, 4, 5, 6, 6];  var list2 = [0, 20, 40];  list.addAll(list2);  print(list); //[1, 2, 2, 3, 4, 5, 6, 6, 0, 20, 40]}

或应用扩大操作符,后果是一样的

void main() {  var list2 = [0, 20, 40];  var list = [1, 2, 2, 3, 4, 5, 6, 6, ...?list2];  print(list); //[1, 2, 2, 3, 4, 5, 6, 6, 0, 20, 40]}
  • 判断数组内是否有满足条件的元素- any
void main() {  var list = [1, 2, 2, 3, 4, 5, 6, 6];// 数组中是否有大于3的元素  print(list.any((v) => v > 3)); // true// 数组中是否有大于7的元素  print(list.any((v) => v > 7)); // false}
  • 判断数组所有元素是否都满足设定条件 - every
void main() {  var list = [1, 2, 2, 3, 4, 5, 6, 6];// 数组中所有元素是否都大于0  print(list.every((v) => v > 0)); // true// 数组中所有元素是否都大于5  print(list.every((v) => v > 5)); // false}
  • 获取满足条件的元素 - where
void main() {  var list = [1, 2, 2, 3, 4, 5, 6, 6];  // 获取所有大于3的元素  print(list.where((v) => v > 3).toList()); //[4, 5, 6, 6]}
  • 获取满足条件的第一个元素 - firstWhere
void main() {  var list = [1, 2, 2, 3, 4, 5, 6, 6];  // 获取最初一个大于3的元素  print(list.firstWhere((v) => v > 3)); // 4  // 如果未查找到所制订条件的元素,进入orElse参数  list.firstWhere((v) => v > 6, orElse: () {    print(888);  });}

获取满足条件的最初一个元素 - lastWhere (与firstWhere同理,第一个与最初一个的区别)

  • 从指定地位开始,获取满足条件的第一个元素的索引 - indexWhere
void main() {  var list = [1, 2, 2, 3, 4, 5, 6, 6];  // 查问第一个大于3的元素索引值  print(list.indexWhere((v) => v > 3)); // 4// 从索引3开始,查问第一个大于4的元素索引值  print(list.indexWhere((v) => v > 4, 3)); // 5// 从索引3开始,查问第一个大于6的元素索引值// 若不存在,返回-1  print(list.indexWhere((v) => v > 6, 3)); // -1}

获取满足条件的最初一个元素的索引(顺叙查问) - lastIndexWhere(与indexWhere同理,第一个与最初一个的区别)

  • 从指定地位开始,获取指定值的索引 - indexOf
void main() {  var list = [1, 2, 2, 3, 4, 5, 6, 6];  // 从索引6开始,获取5第一次呈现时的索引值,如果不存在,返回 -1  print(list.indexOf(5, 6)); // -1  print(list.indexOf(5)); // 5}

从指定地位开始,顺叙获取指定值的索引 - lastIndexOf(与indexOf同理,第一次与最初一次的区别)

  • 将数组用指定字符拼接成字符串 - join
void main() {  var list = [1, 2, 2, 3, 4, 5, 6, 6];  // 将数组转换为用英文逗号拼接的字符串  print(list.join(',')); // 1,2,2,3,4,5,6,6}
  • 数组去重 - toSet
void main() {  var list = [1, 2, 2, 3, 4, 5, 6, 6];  print(list.toSet()); // {1, 2, 3, 4, 5, 6}}
  • 数组遍历 - for\for in\forEach
void main() {  var list = [1, 2, 2, 3, 4, 5, 6, 6];  //for  for (var i = 0; i < list.length; i++) {    print("for:$i");  }  //for in  for (var item in list) {    print("for in:$item");  }  //forEach  list.forEach((element) {    print("forEach:$element");  });}
  • 按指定条件返回 - map
void main() {  var list = [1, 2, 2, 3, 4, 5, 6, 6];  // 将list所有元素加1并返回数组  var v = list.map((e) {    return e + 1;  }).toList();  print(v); //[2, 3, 3, 4, 5, 6, 7, 7]}
  • 累加器 - reduce
void main() {  var list = [1, 2, 2, 3, 4, 5, 6, 6];// 将每次返回值作为value循环执行。最终返回最初一次执行值  var count = list.reduce((value, element) {    print('value: $value - element: $element');    /**    每次的执行后果    value: 1 - element: 2    value: 3 - element: 2    value: 5 - element: 3    value: 8 - element: 4    value: 12 - element: 5    value: 17 - element: 6    value: 23 - element: 6  */    return value + element;  });  print('count: $count'); // count: 29}
  • 排序 - sort
void main() {  var list = [1, 2, 2, 3, 4, 5, 6, 6];// a - b 为升序, b - a为降序  list.sort((a, b) {    return b - a;  });  print(list); //[6, 6, 5, 4, 3, 2, 2, 1]}

条件表达式与if语句~在布局中应用

在flutter开发写页面时,常常都会解决一些判断逻辑,比方什么时候显示xxx按钮,什么时候暗藏xxx布局,这里罕用的就是条件表达式与if判断语句了。

举个例子,如上图 当初页面上有文本显示和一个button1,我要暗藏页面的button1, 应用条件表达式:

class _MyHomePageState extends State<MyHomePage> {  bool _showButton1 = false;  @override  Widget build(BuildContext context) {    return Scaffold(      appBar: AppBar(        title: Text("页面题目"),      ),      body: Column(        mainAxisAlignment: MainAxisAlignment.center,        children: <Widget>[          Text(            '我是文本形容',          ),          _showButton1              ? RaisedButton(                  onPressed: () {},                  child: Text("Button1"),                )              : SizedBox()        ],      ),    );  }}

这里用了条件表达式来判断是否显示Button1,如果不显示Button1就显示SizedBox(),所以这里不管怎么都要显示一个widget,显然不是最好的写法,因而这里改用if语句会更好

class _MyHomePageState extends State<MyHomePage> {  bool _showButton1 = false;  @override  Widget build(BuildContext context) {    return Scaffold(      appBar: AppBar(        title: Text("页面题目"),      ),      body: Column(        mainAxisAlignment: MainAxisAlignment.center,        children: <Widget>[          Text(            '我是文本形容',          ),          if (_showButton1)            RaisedButton(              onPressed: () {},              child: Text("Button1"),            )        ],      ),    );  }}

扩大操作符(...)与List map ~在布局中应用

在flutter开发写页面时,常常都会解决一些List数组相干的数据,比方当初有一个String数组,外面元素须要作为按钮名称展现进去,这时会有很多写法,其中比拟简洁明了的就是扩大操作符与map联合应用:

Widget _body() {    List<String> buttonNames = [      "button1",      "button2",      "button3",      "button4",    ];    return Center(      child: Column(        mainAxisAlignment: MainAxisAlignment.center,        children: <Widget>[          Text(            '我是文本形容',          ),          ...?buttonNames              .map((name) => RaisedButton(                    onPressed: () {},                    child: Text("$name"),                  ))              .toList()        ],      ),    );  }

最初还有很多很多等着我去实际去总结的知识点,这篇暂且记录到此,改天再见!

                              --------  END  ---------