Error Rules
在引用其他模塊的頭文件時,應該通過‘package:xxx’來引用(always_use_package_imports)
避免通過使用**lib/中的**
相對路徑來引用其他模塊的文件.
避免直接使用一個dynamic類型的對象(avoid_dynamic_calls (experimental))
不應該直接使用一個dynamic對象类溢,包括直接獲取一個dynamic對象的屬性,或者直接對于一個dynamic對象調用方法琳要,而是應該將他轉換為一個特定的類型,再繼續(xù)使用.
避免在ifelse中的else語句為空(avoid_empty_else)
避免else的語句為空.
在線上代碼中應該避免使用print(avoid_print)
應該在正式環(huán)境的代碼中去掉對print方法的調用.
避免使用相對路徑引用(avoid_relative_lib_import)
避免在lib中使用相對路徑的引用秤茅,而使用package.
在返回類型為future的方法中稚补,避免返回null(avoid_returning_null_for_future)
在需要返回Future的方法中,不應該返回null框喳。
避免使用慢速的異步io方法(avoid_slow_async_io)
避免使用 **dart:io**
中的異步慢速io方法课幕,而使用他們對應的同步io方法.
避免在線上代碼中使用toString()方法,而應該使用自定義的方法,來實現(xiàn)將類中數(shù)據(jù)轉換成字符串.
避免參數(shù)的名稱和類型的名稱重名(avoid_types_as_parameter_name)
參數(shù)的名稱不應該和任何一個已知的類重名.
不要在Flutter的web plugin外使用web庫(avoid_web_libraries_in_flutter)
不要在僅可在web中使用的庫在web插件外的地方使用.(**dart:html**
, **dart:js**
and **dart:js_util**
)
在使用stream時五垮,使用完一定要對stream調用cancel方法(cancel_subscriptions)
要對StreamSubscription使用cancel方法乍惊,防止內存泄漏.
在使用sink時,使用完一定要調用close方法(close_sinks)
要對**dart.core.Sink 使用close方法放仗,以防止內存泄漏**
.
阻止控制流進入finally語句中(control_flow_in_finally)
組織控制流進入finally語句中润绎,這樣會導致很難調試.
diagnostic應該覆蓋所有的屬性(diagnostic_describe_all_properties)
應該覆蓋所有的公共屬性在debug的方法中以便更好的進行調試.
空語句和誤用分號很類似.
hash和==應該同時被覆蓋或者改寫(hash_and_equals)
永遠同時覆蓋 **hashCode**
如果覆蓋 **==**
.
不要在條件判斷中賦值或者對同一個條件判斷兩次(invariant_booleans (experimental))
條件判斷語句中不應該永遠是true或者false.
在迭代中不要使用contains來判斷不相關的類型(iterable_contains_unrelated_type)
調用 Iterable.contains 會調用==而返回false.
在list中不要刪除不相關的類型(list_remove_unrelated_type)
在list中刪除不相關的類型會返回false,而這往往是開發(fā)者所未預料到的.
在判斷語句中只進行真假的判斷(literal_only_boolean_expressions)
判斷語句中只進行真假的判斷,而不要進行賦值等各種其他操作.
不要在list中連接字符串(no_adjacent_strings_in_list)
這個很有可能意味著忘記了使用逗號來分隔list中的元素.
不要再case中有重復的值(no_duplicate_case_value)
在switch-case語句中莉撇,case中的值不應該有重復的.
在creatState方法中不應該有任何邏輯(no_logic_in_create_state)
createState方法中只應該有創(chuàng)建state的方法調用呢蛤,而不應該有其他的任何邏輯.
引用同一模塊的頭文件時,使用相對路徑(prefer_relative_imports)
在引用同一模塊下的其他 **lib/下的文件的頭文件時稼钩,使用相對路徑**
.
在void可以使用的時候顾稀,不要使用NULL(prefer_void_to_null)
不要使用Null類型,除非你確認你不希望使用void .
在復寫==方法時,一定要判斷傳入的參數(shù)的類型(test_types_in_equals)
復寫類的==方法時坝撑,一定要判斷入?yún)⒌念愋停苑乐箓魅雗ull等.
在finally中不應該拋出error(throw_in_finally)
避免在finally中使用throw粮揉,這會導致代碼的調試困難.
無用的代碼應該及時刪除(unnecessary_statements)
避免使用無意義的diamanté和避免使用無用的語句在代碼中巡李,并且應該及時刪除.
不要使用==來比較兩個無關的類(unrelated_type_equality_checks)
==來比較無關的兩個類,有可能導致返回false扶认,但是沒法達到開發(fā)者的目的.
在同步方法中使用BuildContexts(use_build_context_synchronously (experimental))
如果在異步方法中使用 BuildContexts侨拦,可能會導致BuildContexts雖然已經被銷毀,仍然被使用的情況.
在組件的初始化方法中一定要使用key(use_key_in_widget_constructors)
在組件的初始化方法中一定要使用key辐宾,并調用super將key傳入super的初始化方法.
正則表達式的書寫應該是有效的狱从,否則在運行時會報錯.
Only reference in scope identifiers in doc comments.
Avoid unsafe HTML APIs.
Style Rules
總是標明方法的返回類型(always_declare_return_types)
聲明方法的返回類型.
控制語句的控制體總是新起一行(always_put_control_body_on_new_line)
在控制語句中,每一個控制體總是新起一行來實現(xiàn).
將必傳命名參數(shù)放在參數(shù)列表的第一位(always_put_required_named_parameters_first)
將必傳命名參數(shù)放在第一位.
總是指定參數(shù)的類型(always_specify_types)
使用變量和參數(shù)時叠纹,總是明確的指定參數(shù)的類型.
使用override注解來覆蓋父類的方法和參數(shù)(annotate_override)
使用override以防止參數(shù)被意外的覆蓋.
在非必要的情況下避免使用dynamic作為返回值或者函數(shù)的參數(shù)(avoid_annotating_with_dynamic)
在非必要的情況下季研,不使用dynamic作為返回值或者函數(shù)參數(shù)的類型,可以直接省略類型.
在條件表達式中避免使用bool字面值(avoid_bool_literals_in_conditional_expressions)
在條件表達式中誉察,避免直接使用true和false.
不要在catch中不指定exception的類型(avoid_catches_without_on_clauses)
以防止捕捉到其他非意料到的異常而未做正確處理.
不要顯式的捕捉error(avoid_catching_errors)
Error和Exception不同与涡,不應該主動的捕捉.Error可以在運行前提前檢查并解決掉。
不要定義只有靜態(tài)變量和靜態(tài)方法的類(avoid_classes_with_only_static_members)
靜態(tài)變量可以以常量來替代持偏,靜態(tài)方法可以以全局函數(shù)來替代.
不要檢查類型是int或者double驼卖,應該檢查num(void_double_and_int_checks)
編譯成js的時候都會變成float類型.
不要對未標記為@immutable的類覆蓋==和hashcode方法(avoid_equals_and_hash_code_on_mutable_classes)
這個操作可能引發(fā)未可知的問題.
通過雙引號來消除字符串中的轉義字符(avoid_escaping_inner_quotes)
雙引號來引用字符串,可以不需要對字符進行轉義.
在常量類中避免進行初始化(avoid_field_initializers_in_const_classes)
而直接通過get方法獲取常量屬性.
不要使用foreach來進行遍歷(avoid_function_literals_in_foreach_calls)
在Dart中鸿秆,如果要迭代序列酌畜,那么慣用的方法就是使用循環(huán).
不要使用implement來實現(xiàn)一個覆蓋了==方法的父類(avoid_implementing_value_types)
這樣在子類中,父類的==實現(xiàn)并不會被繼承.
不要顯式的初始化一個變量為null(avoid_init_to_null)
可以不初始化它.
避免使用難以被轉換為js的int數(shù)字(avoid_js_rounded_ints)
在編譯成js的時候int和double會被轉換為js中的number類型.
不要在一行中聲明多個變量(avoid_multiple_declarations_per_line)
每一個變量應該單獨一行來聲明.
不要在自定義的==中判斷是否等于null(avoid_null_checks_in_equality_operators)
只要判斷類型是否相同卿叽,就能確定他是否是null了.
不要使用位置布爾參數(shù)(avoid_positional_boolean_parameters)
要是用命名布爾參數(shù)桥胞,否則很難辨認布爾參數(shù)的含義.
不要使用私有的typedef函數(shù)定義(avoid_private_typedef_functions)
只使用一次的 typedef 函數(shù)定義,可以直接使用內聯(lián)函數(shù).
不要重復設置參數(shù)的值(avoid_redundant_argument_values)
對于已經有默認值的函數(shù)可選參數(shù)附帽,使用時不應該再重復設置和他默認值相同的值.
不要重命名覆蓋函數(shù)的參數(shù)變量的名稱(avoid_renaming_method_parameters)
應該變量的名稱保持一致.
不要設置setters方法的返回值(avoid_return_types_on_setters)
因為setter方法不應該有返回值.
在返回類型為bool埠戳、double、int蕉扮、num的函數(shù)中整胃,不應該返回null(avoid_returning_null)
應該返回一個默認值當前類型值.
在無返回值的void函數(shù)中,不應該返回null(void_returning_null_for_void)
應該直接使用retrun即可.
避免在流式接口中返回this(avoid_returning_this)
直接使用..來實現(xiàn)流式接口.
不要只實現(xiàn)setters而不實現(xiàn)getters(avoid_setters_without_getters)
這樣容易出現(xiàn)錯誤.
不要不使用類型參數(shù)的類型(avoid_shadowing_type_parameters)
在類中定義了類型參數(shù)喳钟,就應該在類中的方法中使用屁使,而不應該使用其他類型參數(shù).
avoid_single_cascade_in_expression_statements
Avoid single cascade in expression statements.
avoid_types_on_closure_parameter
Avoid annotating types for function expression parameters.
不要使用沒有必要的containers(avoid_unnecessary_containers)
沒有其他參數(shù)的containers沒有任何作用在岂,反而增加widget的層級.
不要在初始化方法中使用沒必要的參數(shù)(avoid_unused_constructor_parameters)
初始化方法中的所有參數(shù),都應該有用處蛮寂,并被使用.
異步方法async應該有Future的返回類型(avoid_void_async)
異步方法不應該返回void類型蔽午,而是應該返回Future類型.
await方法只應該用在future上(await_only_future)
可以使用await在**Future<X>**
, **FutureOr<X>**
, **Future<X>?**
, **FutureOr<X>?**
and **dynamic或者null上**
對于extension應該使用駝峰命名(camel_case_extension)
使用駝峰命名規(guī)則來命名extension.
類名和typedef應該使用駝峰命名法(camel_case_types)
應該使用首字母大寫的駝峰命名法而且不要有下劃線.
當對同一個對象連續(xù)調用方法時,使用層疊樣式(cascade_invocations)
使用..語法酬蹋,對同一個對象連續(xù)調用方法.
不要將一個nullable對象強制轉換為一個非空對象(cast_nullable_to_non_nullable (experimental))
轉換后可能會導致不會做非空判斷.
常量名稱使用小寫字母開頭的駝峰命名(constant_identifier_names)
命名使用小寫字母開頭的駝峰命名.
總是在控制流中使用大括號來括住控制語句(curly_braces_in_flow_control_structures)
使用大括號來括住控制語句可以保證不出現(xiàn)懸垂語句.
類中的deprecated應該保持一致(deprecated_consistency)
類如果廢棄他的初始化方法應該標識為廢棄及老,屬性廢棄則初始化方法中對于此屬性的引用應該廢棄.
對于dart:的引用應該在其他引用之前(directives_ordering)
對于頭文件的引用應該首先寫dart庫中的頭文件.
不要使用空的catches block(empty_catches)
如果想要忽略它,應該異常的參數(shù)使用_來表示.如果是故意制造的異常范抓,應該寫注釋骄恶。
不要使用大括號來括住空的初始化方法(empty_constructor_bodies)
要是用分號 **;**
而不是大括號 **{}來表示空的初始化方法體**
.
switch-case中應該列出case的所有可能(exhaustive_cases)
應該分別列出case中的所有能,并針對性的做處理.
文件名稱應該以小寫字母加下劃線的規(guī)則來命名(file_names)
**代碼文件的名稱應該遵循lowercase_with_underscores**
.
不要引用其他package的lib/src文件夾下的文件(implementation_imports)
只應該引用lib文件夾下的文件匕垫,src是package的具體實現(xiàn)僧鲁,可能隨時被修改.
庫的名稱應該使用小寫字母加下劃線(library_names)
庫的命名規(guī)則應該遵循 **lowercase_with_underscores**
.
引用庫的前綴應該遵循小寫字母沒有下劃線格式(library_prefixes)
使用 **lowercase_with_underscores**
規(guī)則import ‘dart:,math‘ as math.
不要在庫的公開的API中使用私有類型(library_private_types_in_public_api)
避免在對外開放的API中使用似有類型.
非常量屬性應該使用小寫字母命名規(guī)范(non_constant_identifier_names)
非常量屬性命名遵循 lowerCamelCase規(guī)范.
不要對一個可能為空的參數(shù)上使用是否為空的判斷(null_check_on_nullable_type_parameter (experimental))
這種很容易出現(xiàn)錯誤不要使用T!而是使用T as W.
不要將null作為一個匿名函數(shù)傳遞給參數(shù)(null_closure)
當需要一個內明函數(shù)作為參數(shù)的時候不要直接傳null .
不要設置局部變量的類型(omit_local_variable_types)
局部變量一般很容易從上下文中判斷出他的類型.
不要定義只有一個成員的類(one_member_abstracts)
如果一個簡單的函數(shù)定義可以替代就不要重新定義一個類.
只拋出error或者exception類型的異常(only_throw_errors)
只拋出 Exception 或者 Error或者他們子類的異常.
通常覆蓋父類的屬性都是錯誤的.
應該給package中的公共類提供文檔(package_api_docs)
給公開的API提供文檔注釋.
應該給package中的類名添加前綴(package_prefixed_library_names)
添加包名.路徑名.
不要給方法中的參數(shù)重新賦值(parameter_assignments)
這種做法很容易造成錯誤象泵,除非你使用 寞秃??=.
使用相鄰字符串來連接字符串(prefer_adjacent_string_concatenation)
定義的相鄰字符串會自動連接而不是用+.
初始化函數(shù)中在初始化列表中使用assert(prefer_asserts_in_initializer_lists)
而不是在初始化函數(shù)的函數(shù)體中做assert.
在assert中需要加一個提示信息(prefer_asserts_with_messag)
assert命中的時候并不是總是知道是什么原因造成的.
使用集合字面量(prefer_collection_literals)
使用[],{},使用[]或者{}偶惠,但是LinkedHashSet和LinkedHashMap除外.
使用??=來代替判空(prefer_conditional_assignmen)
如果只是針對簡單的判空賦值春寿,直接使用??=.
使用const來修飾具有const初始化方法產生的對象(prefer_const_constructors)
盡量使用const來修飾.
對于不可變的類,需要使用const來修飾初始化方法(prefer_const_constructors_in_immutables)
對于聲明為 **@immutable**
類的初始化方法需要設置為const.
對于常量聲明使用const來修飾(prefer_const_declaration)
推薦使用const 而不是final 來修飾常量的聲明.
在不可變類中的初始化參數(shù)設置為const(prefer_const_literals_to_create_immutables)
使用const 作為 @immutable 類的初始化參數(shù).
使用初始化方法而不使用靜態(tài)方法來創(chuàng)建類對象(prefer_constructors_over_static_methods)
使用初始化方法來創(chuàng)建類對象.
不要使用indexof來查看是否包含(prefer_contains)
使用contains來看**List**
和 **String**
是否包含某個對象
使用=將命名參數(shù)和他的默認值分開(prefer_equal_for_default_values)
使用 **=**
而不是:.
使用=>來表示簡單的表達是函數(shù)體(prefer_expression_function_bodies)
使用 => 來作為一個簡單的返回函數(shù)的函數(shù)體.
不修改的私有變量設置為final(prefer_final_field)
有利于編譯器優(yōu)化.
在foreach中的變量設置為final(prefer_final_in_for_each)
如果在循環(huán)體中不修改它.
盡量使用final來設置變量(prefer_final_locals)
如果不會被重新賦值洲鸠,使用final.
在函數(shù)的參數(shù)變量中使用final(prefer_final_parameters)
只要函數(shù)中的參數(shù)不會在函數(shù)體中被修改.
通過遍歷來創(chuàng)建map時最好使用for(prefer_for_elements_to_map_fromIterable)
使用for循環(huán)來進行遍歷.
如果你準備對循環(huán)的每個變量使用某一個方法使用foreach(prefer_foreach)
使用 **forEach**
來對所有的元素使用方法.
使用函數(shù)聲明將函數(shù)綁定到名稱(prefer_function_declarations_over_variables)
而不是使用變量來賦值.
使用=號來作為函數(shù)的別名(prefer_generic_function_type_aliases)
而不是用直接命名.
在build方法中盡量使用ifelse而不使用三目運算符(prefer_if_elements_to_conditional_expressions)
盡量使用ifelse.
使用??來作為判空進行賦值操作(prefer_if_null_operators)
而不是使用if來進行判空操作.
盡可能使用初始化來給類屬性賦值(prefer_initializing_formals)
使用初始化形式可以使得你的代碼更加簡潔.
在初始化的時候設置元素而不是用add(prefer_inlined_adds)
盡可能在初始化的時候設置所有元素.
盡量使用整數(shù)賦值而不要使用對應的double數(shù)字賦值(prefer_int_literals)
如果整數(shù)能滿足需求就不要用double數(shù)字來賦值.
使用變量來組合字符串而不是+(prefer_interpolation_to_compose_strings)
直接在字符串中加入變量.
使用方法isempty而不是查詢它的長度(prefer_is_empty)
對于集合來說使用isempty來判斷是否無元素.
使用方法isnotempty而不是isempty取反(prefer_is_not_empty)
對于集合使用 **isNotEmpty**
.
使用is堂淡!而不是反is(prefer_is_not_operator)
使用 is! 操作符.
使用whereType按照類型過濾集合(prefer_iterable_whereType)
而不是使用where然后在遍歷的過程中對類型做檢查.
使用 mixins.
在對一個對象使用方法之前使用?判斷對象是否為空(prefer_null_aware_method_calls)
使用?.來調用方法扒腕,而不是if.
使用?.來判空(prefer_null_aware_operators)
使用?.來調用方法绢淀,而不是if.
使用擴展運算符...來擴展集合(prefer_spread_collections)
盡量使用...來將一個集合合并入另一個集合.
未在定義的時候初始化的變量應該指明類型(prefer_typing_uninitialized_variables)
否則很容易出現(xiàn)錯誤.
在deprecation中寫明信息(provide_deprecation_message)
通過 @Deprecated("message")來說明過期的信息.
對所有的公共的api變量輸出文檔(public_member_api_docs)
說明所有的公共變量.
不要創(chuàng)建遞歸的getter(recursive_getters)
這通常說明是寫錯了.
使用sizedbox來替換container來作為空白區(qū)域(sized_box_for_whitespace)
SizedBox 比container更加輕量級.
使用///來作為注釋(slash_for_doc_comments)
使用 /// 作為文檔注釋.
在widget創(chuàng)建過程中將child屬性放在最后(sort_child_properties_last)
在widget的創(chuàng)建過程中child的屬性的賦值放在最后.
類中的構造方法放在第一位(sort_constructors_first)
構造方法放在其他屬性之前.
未命名的構造方法放在第一位(sort_unnamed_constructors_first)
先是未命名的然后是命名的.
在公共的API中指定參數(shù)的類型(type_annotate_public_apis)
指定參數(shù)的類型.
初始化參數(shù)如果是類中的屬性不需要指定類型(type_init_formals)
不要設置構造方法中的初始化屬性的類型.
在異步方法中的Future應該使用awaited或者標記為unawaited(unawaited_future)
否則很容易出現(xiàn)異步的錯誤.
不要返回一個awaited的表達式(unnecessary_await_in_return)
在返回表達式中不要使用awaited關鍵字.
不要在字符串中使用不必要的大括號(unnecessary_brace_in_string_interps)
有的字符串組合沒必要用大括號.
不要使用沒必要的const(unnecessary_const)
避免在一個 const上下文中重復使用 const.
對于局部變量不要使用final(unnecessary_final)
使用var更短,而且也沒有改變意思.
不使用沒必要的getter和setter(unnecessary_getters_setter)
沒必要為了安全而使用getter和setter.
當可以使用閉包是瘾腰,不要使用匿名函數(shù)(unnecessary_lambdas)
閉包可以直接調用皆的,而不需要使用復雜的匿名函數(shù).
創(chuàng)建實例不需要使用new.
不要使用沒必要的null檢測(unnecessary_null_checks (experimental))
如果可以接受非空的參數(shù).
. 如果可以接受空參數(shù),
對于初始化未非空的final變量不要定義為可空類型(unnecessary_nullable_for_final_variable_declarations (experimental))
肯定會是一個非空類型.
不要使用沒必要的overrides(unnecessary_overrides)
不要在一個只調用super方法中的override中使用overrides.
不要使用沒必要的小括號(unnecessary_parenthesis)
沒必要的小括號要被移除.
不使用沒必要的raw字符串(unnecessary_raw_strings)
沒必要的raw字符串應該不使用.
不要使用沒必要的轉義符(unnecessary_string_escape)
刪除沒必要的轉義字符.
不要使用沒必要的this(unnecessary_this)
除非是為了防止被覆蓋.
使用8位16進制表示顏色(use_full_hex_values_for_flutter_colors)
使用8位16進制數(shù)表示顏色(0xFFFFFFFF) .
使用??來將null轉換為布爾值(use_if_null_to_convert_nulls_to_bools)
使用??true 或者false.
使用isEven或者isodd來判斷奇偶(use_is_even_rather_than_modulo)
而不是判斷% 2的結果.
使用late來定義非空的私有變量(use_late_for_private_fields_and_variables (experimental))
如果沒有被初始化.
使用系統(tǒng)已經定義好的常量值(use_named_constants)
而不是自己設置一個值.
使用raw string來避免使用轉義符(use_raw_strings)
如果字符串需要轉義使用r'fsf / $'.
使用rethrow再次拋出異常(use_rethrow_when_possible)
當在捕獲異常中有遇到異常使用rethrow.
使用setter點方法修改屬性而不是直接調用方法(use_setters_to_change_properties)
使用rect.width = 3 而不是rect.setWidth(3).
使用stringbuffer來組合字符串(use_string_buffers)
string buffers 更加高效.
Use throwsA matcher instead of fail().
Start the name of the method with to/_to or as/_as if applicable.
always_require_non_null_named_parameters
Specify **@required**
on named parameters without defaults.
Avoid using **as**
.
不要使用fromEnvironment和hasEnvironment(do_not_use_environment)
可能容易引起誤解.
不要給void類型的變量賦值.
應該遵循flutter的todo樣式(flutter_style_todos)
Use Flutter TODO format: // TODO(username): message, https://URL-to-issue.
盡量將返回語句和賦值語句合并返回成一個語句返回(join_return_with_assignment)
返回語句和賦值語句合并成一個語句一起返回.
多行字符串應該新起一行(leading_newlines_in_multiline_strings)
比較易讀.
在switch-case中不要使用default(no_default_cases (experimental))
每一個case都應該單獨處理.
每行不超過80個字符(lines_longer_than_80_chars)
避免超過 80 個字符.
在連接字符串的時候應該加入空格(missing_whitespace_between_adjacent_strings)
防止字符串連接過程中遺忘.
不要在toString方法使用runtimeType方法(no_runtimeType_toString)
因為 runtimeType比較耗費時間蹋盆,除非你不在乎時間和效率.
內置類型是冪等的有些操作是多余的(noop_primitive_operations)
刪除相關的冪等操作.
prefer_bool_in_asserts (deprecated)
Prefer using a boolean as the assert condition.
推薦使用雙引號來修飾字符串(prefer_double_quotes)
Prefer double quotes where they won't require escape sequences.
Only use double quotes for strings containing single quotes.
require_trailing_commas (experimental)
Use trailing commas for all function calls and declarations.
Place the **super**
call last in a constructor initialization list.
tighten_type_of_initializing_formals
Tighten type of initializing formal.
unnecessary_null_aware_assignments
Avoid null in null-aware assignment.
unnecessary_null_in_if_null_operators
Avoid using **null**
in **if null**
operators.
use_function_type_syntax_for_parameters
Use generic function type syntax for parameters.
unnecessary_string_interpolations
Unnecessary string interpolation.
Pub Rules
依賴的庫應該在dependcies中指定版本號(depend_on_referenced_packages)
以防止大版本號的遷移導致出現(xiàn)問題.
給package命名應該使用小寫加下劃線(package_names)
package的名稱應該遵循 **lowercase_with_underscores**
.
Sort pub dependencies.