目錄規範與命名
Lib
├──page 落地頁
│ └──user 頁面模組資料夾
│ └──login 頁面落地頁資料夾
│ └──user_login.dart => class UserLoginPage 字尾為page為落地頁 唯一入口
│ └──user_login_button.dart => class UserLoginButton 非公共部分頁面子元件
├──component 通用元件
│ └──Modal
│ └──alert.dart => class ModalAlertComponent
├──store 資料集中管理
│ ├──index.dart 例項化Provider export model類
│ ├──proto pb協議轉換程式碼
│ ├──service pb協議 yyp協議 等等轉義成 dart方法
│ ├──model
│ │ ├──user_model.dart => class UserModel
│ │ └──index.dart => export all models
│ └──object
│ └──user_object.dart => class UserObject
├──helper 公共方法
│ └──index.dart 常規方法、通用方法、全域性方法可以用過這個入口export 避免重複引入、可以作用通過用方法入口
├──config 配置中心
│ ├──index.dart 配置變數與切換方法
└──router 路由
└── 頁面對映配置、observe 方法匯出
複製程式碼
識別符號
在 Dart 中識別符號有三種風格:
- 大寫駝峰:每個單詞的第一個字母大寫,包括第一個單詞。
- 小寫駝峰:每個單詞的第一個字母大寫,除了 第一個單詞一直小寫,即使第一個單詞是縮寫。
- 小寫加下劃線:只使用小寫字母,即使是縮寫,然後使用下劃線_分隔。
型別名使用大寫駝峰
類,列舉,自定義型別和引數型別,應該使用大寫駝峰,且不能使用分隔符。
class SliderMenu { }
class HttpRequest { }
typedef bool Predicate<T>(T value);
class Foo {
const Foo([arg]);
}
@Foo(anArg)
class A { }
@Foo()
class B { }
// 如果註解類的建構函式沒有引數,可以建立一個單獨的小寫駝峰常量。
const foo = const Foo();
@foo
class C { }
複製程式碼
庫和原始檔名使用小寫加下劃線
library peg_parser.source_scanner;
import 'file_system.dart';
import 'slider_menu.dart';
複製程式碼
其它識別符號使用小寫駝峰
var item;
HttpRequest httpRequest;
void align(bool clearItems) {
// ...
}
複製程式碼
推薦常量名使用小寫駝峰
const pi = 3.14;
const defaultTimeout = 1000;
final urlScheme = new RegExp('^([a-z]+):');
class Dice {
static final numberGenerator = new Random();
}
複製程式碼
超過兩個字母的首字母縮略詞以及縮寫詞,應該大寫
HttpConnectionInfo
uiHandler
IOStream
HttpRequest
Id
DB
複製程式碼
匯入順序
各部分內按字母順序排序
// 在其它匯入之前匯入 “dart:”
import 'dart:async';
import 'dart:html';
// 在相對匯入之前匯入 “package:”
import 'package:bar/bar.dart';
import 'package:foo/foo.dart';
// 在其它匯入前匯入第三方 “package:”
import 'package:my_package/util.dart';
//
import 'util.dart';
// 在所有匯入之後的單獨部分指定匯出
export 'util.dart';
複製程式碼
dartfmt 格式化
官方使用 dartfmt 格式化程式碼。
避免一行的長度超過 80 個字元
可讀性研究表明,過長的文字不適合閱讀,因為當你看到下一行開始的時候眼睛移動的距離過大。這就是為什麼新聞和雜誌使用多列的文字。
對所有流程控制結構使用大括號
if (isWeekDay) {
print('Bike to work!');
} else {
print('Go dancing or read a book!');
}
// 有一個例外是:if 語句沒有 else,符合條件只有一行,可以省略大括號。
if (arg == null) return defaultValue;
複製程式碼