一、开发工具,SDK版本要求
1、flutter可以说是Google的亲儿子,强烈推荐使用Android Studio,我们表面上比较不出和其他开发工具的差异,然而flutter,dart,甚至flushia,是Google重新发力打造的新生态工具,所以无论是从编译、打包,还是后续插件化升级,都有一定的优势;
2、统一使用最新版Android Studio(v3.5.1), jdk(1.8+), flutter(v1.9.1+hotfix.6), dart(v2.6.0),避免团队之间因版本不一致导致的报错;
● flutter sdk下载地址: https://flutter.dev/docs/get-started/install/windows
● dart sdk下载地址: https://dart.dev/tools/sdk
二、目录规范
1、lib文件夹是flutter主要代码目录,通常不会直接在根目录下直接创建dart文件,而是会根据功能点、模块、属性等创建子文件夹,在相应子文件夹中创建相应dart文件,当然子文件下依然可以再创建文件夹,将目标文件所属角色细化;
2、文件夹通常是小写单词,小驼峰法使用较少,不推荐使用下划线连接法;
3、通常main(mian.dart程序入口)会直接创建在根目录下;
4、Android代码目录(src/main/java/包名)基本上也是这个规则;
三、命名规范
1、大驼峰法:类名称,如MainPage;
2、小驼峰法:包名、函数名,变量名、参数名;
3、查看dart源码发现,源文件名都是小写英文加上下划线组成,如app_bar.dart;
4、一般情况下,类名是源文件名的大驼峰写法,如源文件app_bar.dart,类名AppBar;源文件bottom_app_bar,类名BottomAppBar;
5、不使用前缀字母,如不推荐使用mList,可以用list,或者更加详细的命名,如bookList;
6、assets目录下的资源文件名,和源文件名命名规则一样;
7、枚举类的元素,使用大写英文加下划线,如YEAR_MONTH_DAY;
四、代码规范
1、if else使用大括号,尽可能不省略;
2、不要使用new;
3、page页面中(StatelessWidget、StatefulWidget)尽量将每一层和每一个widget以单独函数形式调用,层次清晰分明(工具类封装的Widget可例外);
4、封装简单常用的widget,注意使用@required、assert
/*
* 生成常用的AppBar
*/
static Widget buildAppBar(BuildContext context, String text,
{double fontSize: 18.0,
double height: 50.0,
double elevation: 0.5,
Widget leading,
bool centerTitle: false,
List<Widget> actions,
OnItemDoubleClick onItemDoubleClick}) {
return PreferredSize(
child: GestureDetector(
onDoubleTap: () {
if (null != onItemDoubleClick) {
onItemDoubleClick(null);
}
},
child: AppBar(
elevation: elevation, //阴影
centerTitle: centerTitle,
title: Text(text, style: TextStyle(fontSize: fontSize)),
leading: leading,
actions: actions,
)),
preferredSize: Size.fromHeight(height));
}
5、常用的颜色值和宽高值,使用统一相同含义值来赋值;
6、实时处理报错(error)和警告(warning):Dart Analysis统计了所有报错和警告的具体信息;(好处:一则让代码程序更健壮,二则在dart sdk升级后,可避免报错);
7、必要的简要的代码注释(不止是.dart文件,还包括pubspec.yaml);
8、编码过程中习惯性使用“Reformat Code with dartfmt”;
9、拒绝弱命名(如var a),拒绝硬编码(如if (a == 2)...);
10、善用///[],"[]"内可以是类名、变量名,在引用中可以添加注释说明;
11、适当的换行,函数体之间、语句过长等;
五、其他
1、尽量不使用第三方插件库(SDK),大多数SDK在功能点覆盖和适配方面存在很多的缺陷;逼不得已时选择flutter官方指定维护的sdk、知名度和活跃度高的sdk;
2、创建项目时,包名采用反写域名命名规则,即com.xx.xxx.xxxx形式全部使用小写字母。一级包名为com,二级包名为xx(一般为公司或个人域名),三级包名根据应用进行命名,四级包名为功能模块名;
3、如果一个bool类型"isShow"在不确定是否会为null的情况下(尤其在与原生双向交互中),避免"if(isShow)..."这种写法,正确写法"if(isShow == true)";
4、注重dispose()方法中资源的释放;
5、删除或注释掉assets下无效的资源及pubspec.yaml的声明。