前言
-
無規則不成方圓,不管什麼平臺,寫什麼程式碼。每一種程式語言都有著自己的語法標準,程式碼規範,並且在不斷更新改進,達到優化語言效能的目的。
-
俗話說
程式碼不規範,維護兩行淚
,說的就是這個道理。我們應該遵守它們,避免程式碼看起來亂七八糟。
Style linter for Dart
說是Flutter的規範,其實是Dart語言的程式碼規範(linter)。
官方叫它為 Style linter for Dart
,我們可以通過訪問Lint Rules來檢視所有的規範。
我們隨便點開一個看看,比如 sort_constructors_first.
- DO
sort constructor declarations before other members.
類構造應該在其他成員之前。
- GOOD:
abstract class Animation<T> {
const Animation(this.value);
double value;
void addListener(VoidCallback listener);
}
複製程式碼
- BAD:
abstract class Visitor {
double value;
visitSomething(Something s);
Visitor();
}
複製程式碼
非常清晰,例子一看就能明白什麼意思。但是那麼多規則,我們都需要去遵守嗎?我們需要遵守哪些呢?
analysis_options.yaml
其實Flutter Team已經制定好了。對於開發者來說,你使用的是什麼分支(branch)的Flutter SDK進行開發,你就可以直接使用當前分支下面的指定好的規則。
將SDK中的analysis_options.yaml複製到你們的專案下面吧,準備接受制裁吧,騷年們!
實踐
說了那麼多,我們自己來試一下,怎麼操(受)作(虐)。把analysis_options.yaml複製到專案下面之後,應該會在VSCode下面的PROBLEMS下面/Android Studio在Dart Analysis下面看到提示。
修復
- 根據提示修復
在提示規則的連結(上圖藍色部分,滑鼠放上去後會變藍色)上面 Shift + 點選
,就會跳轉到我們前面講的各個規則的詳細講解上面了,按照例子改正就可以了。
- 利用VSCode快速修復
在提示有問題的程式碼的地方Ctrl + .
, 就會自動彈出快速修復,比如圖中為增加const
標識。 是不是快多了,嗯,幾千的話應該也要不了多少時間。
analysis_options.yaml檔案的分析
下面是檔案裡面的核心內容
analyzer:
strong-mode:
implicit-casts: false
implicit-dynamic: false
enable-experiment:
- extension-methods
errors:
# treat missing required parameters as a warning (not a hint)
missing_required_param: warning
# treat missing returns as a warning (not a hint)
missing_return: warning
# allow having TODOs in the code
todo: ignore
# Ignore analyzer hints for updating pubspecs when using Future or
# Stream and not importing dart:async
# Please see https://github.com/flutter/flutter/pull/24528 for details.
sdk_version_async_exported_from_core: ignore
# exclude:
# - "bin/cache/**"
# # the following two are relative to the stocks example and the flutter package respectively
# # see https://github.com/dart-lang/sdk/issues/28463
# - "lib/i18n/messages_*.dart"
# - "lib/src/http/**"
linter:
rules:
# these rules are documented on and in the same order as
# the Dart Lint rules page to make maintenance easier
# https://github.com/dart-lang/linter/blob/master/example/all.yaml
- always_declare_return_types
複製程式碼
隱式轉換
strong-mode:
# 隱式轉換
implicit-casts: false
# 隱式dynamic
implicit-dynamic: false
複製程式碼
這部分是我們提示最多的一部分,因為這個選項平時預設都是true。特別是在將json轉換成dart mode的時候,int i= map['test'];
這種程式碼是不少見的吧。慶幸的是,JsonToDart工具已經完全支援最新的analysis_options.yaml
錯誤
這一部分是分在error group當中的,當然你可以通過下面的方式降低或者直接ignore。
errors:
# treat missing required parameters as a warning (not a hint)
missing_required_param: warning
# treat missing returns as a warning (not a hint)
missing_return: warning
# allow having TODOs in the code
todo: ignore
# Ignore analyzer hints for updating pubspecs when using Future or
# Stream and not importing dart:async
# Please see https://github.com/flutter/flutter/pull/24528 for details.
sdk_version_async_exported_from_core: ignore
複製程式碼
提示
這一部分就是各種提示,你可以根據自己的需求,新增或者刪除
linter:
rules:
# these rules are documented on and in the same order as
# the Dart Lint rules page to make maintenance easier
# https://github.com/dart-lang/linter/blob/master/example/all.yaml
- always_declare_return_types
複製程式碼
exclude
你可以通過下面方式將某個檔案,某個資料夾移除規則限制。
exclude:
- "bin/cache/**"
# the following two are relative to the stocks example and the flutter package respectively
# see https://github.com/dart-lang/sdk/issues/28463
- "lib/i18n/messages_*.dart"
- "lib/src/http/**"
複製程式碼
ignore
在Dart程式碼中,你可以通過下面的方式去掉某些規則的限制。
- ignore指定位置的某些規則
你可以用ignore:
方式去除指定位置某些規則的警告,多個規則以,
隔開。
// ignore: prefer_const_constructors
Text('save network image to photo')
複製程式碼
- ignore整個檔案的某些規則
你可以用ignore_for_file:
方式去除整個檔案中某些規則的警告,多個規則以,
隔開。
// ignore_for_file: prefer_const_constructors
Text('save network image to photo')
複製程式碼
擴充套件方法
開啟擴充套件方法,加入下面設定,並且保證Dart SDK 大於等於 2.6.0
enable-experiment:
- extension-methods
複製程式碼
environment:
sdk: ">=2.6.0 <3.0.0"
複製程式碼
flutter analyze
命令
我們除了在VSCode/Android Studio裡面可以看到提示之外,Flutter提供了專門的analyze
命令。
在終端中執行flutter analyze -h
,可以看到下面提示。可以看到大部分命令預設是開啟的。
接下來我們在終端中輸入flutter analyze --watch
,每當檔案改變的時候都會重新分析。下面是一些提示和錯誤。
結語
其實這篇文章的來歷是因為群裡有個小夥伴問
怎麼規範自己的Flutter程式碼呢?
我看到了,就丟了一個analysis_options.yaml檔案到群裡,群裡頓時炸開鍋了。
you see see you, one by one
幾千的提示,幾千的錯誤...
雖然打碼了,但是如果認出來,心裡知道就好了,哈哈哈哈哈。
最後歡迎加入Flutter Candies一起製造小糖果。 (QQ群:181398081)
對了,還有,性感群祕書,線上指(勸)導(退)哦!
最最後放上Flutter Candies全家桶,真香!