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