Flutter 代码开发规范
代码风格
标识符三种类型
大驼峰
类、枚举、typedef和类型参数
class SliderMenu { ... }
class HttpRequest { ... }
typedef Predicate = bool Function<T>(T value);
包括用于元数据注释的类
class Foo {
const Foo([arg]);
}
@Foo(anArg)
class A { ... }
@Foo()
class B { ... }
使用小写加下划线来命名库和源文件
library peg_parser.source_scanner;
import 'file_system.dart';
import 'slider_menu.dart';
不推荐如下写法:
library pegparser.SourceScanner;
import 'file-system.dart';
import 'SliderMenu.dart';
使用小写加下划线来命名导入前缀
import 'dart:math' as math;
import 'package:angular_components/angular_components'
as angular_components;
import 'package:js/js.dart' as js;
不推荐如下写法:
import 'dart:math' as Math;
import 'package:angular_components/angular_components'
as angularComponents;
import 'package:js/js.dart' as JS;
使用小驼峰法命名其他标识符
var item;
HttpRequest httpRequest;
void align(bool clearItems) {
// ...
}
优先使用小驼峰法作为常量命名
const pi = 3.14;
const defaultTimeout = 1000;
final urlScheme = RegExp('^([a-z]+):');
class Dice {
static final numberGenerator = Random();
}
不推荐如下写法:
const PI = 3.14;
const DefaultTimeout = 1000;
final URL_SCHEME = RegExp('^([a-z]+):');
class Dice {
static final NUMBER_GENERATOR = Random();
}
不使用前缀字母
因为Dart可以告诉您声明的类型、范围、可变性和其他属性,所以没有理由将这些属性编码为标识符名称。
defaultTimeout
不推荐如下写法:
kDefaultTimeout
排序
为了使你的文件前言保持整洁,我们有规定的命令,指示应该出现在其中。每个“部分”应该用空行分隔。
在其他引入之前引入所需的dart库
import 'dart:async';
import 'dart:html';
import 'package:bar/bar.dart';
import 'package:foo/foo.dart';
在相对引入之前先引入在包中的库
import 'package:bar/bar.dart';
import 'package:foo/foo.dart';
import 'util.dart';
第三方包的导入先于其他包
import 'package:bar/bar.dart';
import 'package:foo/foo.dart';
import 'package:my_package/util.dart';
在所有导入之后,在单独的部分中指定导出
import 'src/error.dart';
import 'src/foo_bar.dart';
export 'src/error.dart';
不推荐如下写法:
import 'src/error.dart';
export 'src/error.dart';
import 'src/foo_bar.dart';
所有流控制结构,请使用大括号
这样做可以避免悬浮的else问题
if (isWeekDay) {
print('Bike to work!');
} else {
print('Go dancing or read a book!');
}