Flutter代码规范优化记录
自从把 Flutter SDK 中的 analysis_options.yaml copy 到项目根目录后就***,当时是 700 多个 error,警告记不清了,提示信息有 7k 个,总共花了一天半全部改完。
所以还是得养成良好的代码编写习惯
字符串用单引号
除非你的字符串中有单引号—> ‘,不然整个字符串用单引号。
泛型规范
只要类的定义中有写泛型,或者一些方法中用到了泛型,那么在使用这些类或者调用这些方法的时候也一定要加上泛型
最常见的例子
1 | List<String> list=<String>[]; |
Flutter 中:
1 | Navgator.pust<void> |
根据具体场景添加泛型
在传递 List 或者 Map 的时候
1 | <T>[] |
前面的泛型也务必加上
[]也需要在前面加上泛型
省略 new 关键字
有 new 的都是祖传代码了,没啥细讲的.
不要省略对象的类型
也尽量不要用 var 与 dynamic
final 关键字
在任何时候使用新的变量,如果它不需要被二次修改,请一定加上 final 修饰
1 | final String str='Nightmare'; |
Map、List 的对象都是引用,类似于 C 语言中的指针,所以在定义后都是不会改变的
1 | final List<int> list= <int>[]; |
const 修饰
1 | const Duration(); |
一些嵌套对象的的 const
1 | const Center( |
其中 SizedBox 的 const 不用加
if 与 for 语句的花括号
不管 if 条件后是单语句还是多条语句
都添加大括号{}
1 | if(bool){ |
官方代码也有很多单语句不加花括号的…
避免不必要的字符串插值
例子:
1 | String number='Nightmare'; |
优化:
1 | String number='Nightmare'; |
字符串插值避免不必要的的大括号
例子:
1 | int a; |
优化:
1 | int a; |
官方的有些代码都有这种情况
字符串相加可以省略加号
例子:
1 | 'str1'+'str2' |
修改:
1 | 'str1' 'str2' |
不要在列表里面使用相邻字符串
例子:
1 | <String>['str1','str2' 'str3','str4'] |
你也许会想干嘛不写成
‘str2str3’
但有些场景如下
1 | <String>[ |
如果写成单个字符串单行会特别长所以解决方法将整个字符串用’’’,所以有时候可以用三个单引号包起来
回调函数写明类型
例子
1 | itemBuilder: (c, i) {} |
优化
1 | itemBuilder: (BuildContext context, int index) {} |
为所有的方法写上类型
1 | void function() |
或者
1 | Future<void> function() async |
Flutter 被遗弃的接口
Theme 中
1 | body1=>bodyText2 |
这只是我个人项目使用到的,其他的看源码就知道了
将条件语句转换成 if-else
1 | bool isExist; |
优化
1 | bool isExist; |
类的构造函数在所有子成员前面
先写构造,再写成员参数
如果有没有用到的包,请在代码顶部删除它
无详细解释
导包的排序
- 有些编译器不能自动给你修复,需要你手动按照字母将导包的顺序排序
并遵循一下大前提如下:
- dart sdk 内的库
- flutter 内的库
- 第三方库
- 自己的库
- 相对路径引用
先全部 import 再 export,不要交替进行
类的内部访问成员省略 this.
无详细解释
有一些不想要更改的规范
dart 官网有介绍,在使用以下方法时,异步比同步要慢得多
1 | Directory.exists |
但个人遇到的很多场景带 sync 的方法会把 UI 卡住,尤其是在这些方法短时间里频繁访问的情况,所以我注释掉了 analysis_options.yaml 的这一行。
最后
- 有任何错误指出
- 个人项目在 Flutter1.0 的正式版前就已经使用了,依稀记得是 0.7,当时编程基础所有的能力很不扎实(现在也差不多),所以有很多没能避免的地方,但我在知道怎么优化的时候,一定及时优化。
- 可能大家没有体验过,一边学 Flutter 一边学 C 语言的 hello world 吧,所以说话与评价些许有些轻松。
- 记录给需要的人,在这些场景代码编写规范。
Flutter代码规范优化记录