Flutter编码规范

543 阅读3分钟

一、命名规范

Dart中通用的三种命名方式:

  • AaBb 类规范,首字母大写驼峰命名法,例如 IsClassName,常用于类的命名。
  • aaBb 类规范,首字母小写驼峰命名法,例如 isParameterName,常用于常量以及变量命名。
  • aa_bb 类规范,小写字母下划线连接法,例如 is_a_flutter_file_name,常用于文件及文件夹命名。

二、注释规范

  1. 代码注释,分为单行注释和多行注释。其中单行注释可以用来注释不用的代码,也可以用来对代码做说明。多行注释一般用来做多行代码注释。
void main() {
  // TODO: refactor into an AbstractLlamaGreetingFactory?
  print('Welcome to my Llama farm!');
}


void main() {
  /*
   * This is a lot of work. Consider raising chickens.

  Llama larry = Llama();
  larry.feed();
  larry.exercise();
  larry.clean();
   */
}
  1. 文档注视 类注释:第一行为注视摘要,然后空一行,第三行为详细说明 方法注释:同类注释。不同的是可以用[]将参数包裹,做参数的说明
/// 这是一个测试类
///
/// 就是测试一下
class Test {
  /// 名字
  String name;

  /// feed方法
  void feed(int num) {}

  /// feedTwo
  /// [i] i参数
  /// [j] j参数
  void feedTwo (int i, int j){}
}

为什么要空一行呢?是生成api文档的时候方便查看。

image
image
image

从这里可以看出第一行的注释在文档中作为类的摘要展现在最外面的页面中。

三、如何生成API文档呢?

打开命令行,定位到项目的根目录下,输入

dartdoc

运行结束后,会在当前项目目录生成一个 doc 的文件夹。

image
打开 doc/api/index.html 文件,就能看到文档内容了。

遇到的坑 我在运行dartdoc命令的时候居然报错了,环境变量也都配置了,不知道为何,解决办法参考以下地址,这里不再赘述。

➜  flutter_module_example dartdoc
Documenting flutter_module_example...

dartdoc failed: Top level package requires Flutter but FLUTTER_ROOT environment variable not set.

解决办法: juejin.cn/post/684490…

四、代码风格规范

你是不是经常头疼别人的代码写的空格不完美,每次都要挨个文件format呢?一个命令就可以搞定。

dartfmt -w --fix lib/

dartfmt 工具的规范包括了以下几点:

  • 使用空格而不是 tab;
  • 在一个完整的代码逻辑后面使用空行区分;
  • 二元或者三元运算符之间使用空格;
  • 在关键词 , 和 ; 之后使用空格;
  • 一元运算符后请勿使用空格;
  • 在流控制关键词,例如 for 和 while 后,使用空格区分;
  • 在 ( [ { } ] ) 符号后请勿使用空格;
  • 在 { 后前使用空格;
  • 使用 . 操作符,从第二个 . 符号后每次都使用新的一行。 其他规范可以参考dart规范。
/// 这是一个测试类
///
/// 就是测试一下
class Test {
  /// 名字
  String name;

  /// feed方法
  void feed( int num  ) {   }
  
  

  /// feedTwo
  /// [i] i参数
  /// [j] j参数
  void feedTwo(   int i,   int j) {
    
  }
} 

这样一段凌乱的代码,执行完命令后

/// 这是一个测试类
///
/// 就是测试一下
class Test {
  /// 名字
  String name;

  /// feed方法
  void feed(int num) {}

  /// feedTwo
  /// [i] i参数
  /// [j] j参数
  void feedTwo(int i, int j) {}
}

超级舒服有木有。

五、静态代码检查

dartanalyzer工具,在Dart SDK中已经集成了。在项目根目录下新增analysis_options.yaml 文件,然后在里面配置要检查的项目即可。我们还可以直接依赖现有的库 pedantic 或者 effective_dart 。 在配置文件 pubspec.yaml 中添加依赖

dependencies:
  flutter:
    sdk: flutter
  pedantic: ^1.8.0
dev_dependencies:
  flutter_test:
    sdk: flutter
  pedantic: ^1.8.0

如果我们认为 pedantic 不满足我们的要求,我们再根据 Dart linter rules 规范,前往选择自己需要的规范配置,修改下面的配置(analysis_options.yaml文件):

include: package:pedantic/analysis_options.1.8.0.yaml
analyzer:
  strong-mode:
    implicit-casts: false
linter:
  rules:
    # STYLE
    - camel_case_types
    - camel_case_extensions
    - file_names
    - non_constant_identifier_names
    - constant_identifier_names # prefer
    - directives_ordering
    - lines_longer_than_80_chars # avoid
    # DOCUMENTATION
    - package_api_docs # prefer
    - public_member_api_docs # prefer

在 pedantic 的基础上又增加了一些对于样式和文档的规范。 在命令行运行:

dartanalyzer lib

然后可以看到一些信息:

➜  flutter_module_example dartanalyzer lib
Analyzing lib...
  hint • The value of the local variable 'test' isn't used. • lib/main.dart:61:10 • unused_local_variable
1 hint found.

有问题的代码:

image
控制台给的说明也比较容易懂,基本一看就能修改。