基於專案實戰整理的一份 Flutter 程式碼規範與目錄規範v1.0

YYDev發表於2019-08-20

專案規範與文章地址

目錄規範與命名

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;
複製程式碼

相關文章