Flutter Analysis Options

法的空間發表於2020-05-29

前言

  • 無規則不成方圓,不管什麼平臺,寫什麼程式碼。每一種程式語言都有著自己的語法標準,程式碼規範,並且在不斷更新改進,達到優化語言效能的目的。

  • 俗話說程式碼不規範,維護兩行淚,說的就是這個道理。我們應該遵守它們,避免程式碼看起來亂七八糟。

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進行開發,你就可以直接使用當前分支下面的指定好的規則。

Flutter Analysis Options

將SDK中的analysis_options.yaml複製到你們的專案下面吧,準備接受制裁吧,騷年們!

Flutter Analysis Options

實踐

說了那麼多,我們自己來試一下,怎麼操(受)作(虐)。把analysis_options.yaml複製到專案下面之後,應該會在VSCode下面的PROBLEMS下面/Android Studio在Dart Analysis下面看到提示。

Flutter Analysis Options

修復

  • 根據提示修復

在提示規則的連結(上圖藍色部分,滑鼠放上去後會變藍色)上面 Shift + 點選,就會跳轉到我們前面講的各個規則的詳細講解上面了,按照例子改正就可以了。

  • 利用VSCode快速修復

在提示有問題的程式碼的地方Ctrl + ., 就會自動彈出快速修復,比如圖中為增加const標識。 是不是快多了,嗯,幾千的話應該也要不了多少時間。

Flutter Analysis Options

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 Analysis Options

接下來我們在終端中輸入flutter analyze --watch ,每當檔案改變的時候都會重新分析。下面是一些提示和錯誤。

Flutter Analysis Options

結語

其實這篇文章的來歷是因為群裡有個小夥伴問

怎麼規範自己的Flutter程式碼呢?

我看到了,就丟了一個analysis_options.yaml檔案到群裡,群裡頓時炸開鍋了。

you see see you, one by one 幾千的提示,幾千的錯誤...

Flutter Analysis Options

Flutter Analysis Options

Flutter Analysis Options

雖然打碼了,但是如果認出來,心裡知道就好了,哈哈哈哈哈。

Flutter Analysis Options
Flutter Analysis Options
Flutter Analysis Options

最後歡迎加入Flutter Candies一起製造小糖果。 (QQ群:181398081)

對了,還有,性感群祕書,線上指(勸)導(退)哦!

Flutter Analysis Options

最最後放上Flutter Candies全家桶,真香!

Flutter Analysis Options

相關文章