Flutter編程規(guī)范

Error Rules

在引用其他模塊的頭文件時(shí),應(yīng)該通過‘package:xxx’來引用(always_use_package_imports)

避免通過使用**lib/中的**相對路徑來引用其他模塊的文件.

避免直接使用一個(gè)dynamic類型的對象(avoid_dynamic_calls (experimental))

不應(yīng)該直接使用一個(gè)dynamic對象,包括直接獲取一個(gè)dynamic對象的屬性,或者直接對于一個(gè)dynamic對象調(diào)用方法,而是應(yīng)該將他轉(zhuǎn)換為一個(gè)特定的類型,再繼續(xù)使用.

避免在ifelse中的else語句為空(avoid_empty_else)

避免else的語句為空.

在線上代碼中應(yīng)該避免使用print(avoid_print)

應(yīng)該在正式環(huán)境的代碼中去掉對print方法的調(diào)用.

避免使用相對路徑引用(avoid_relative_lib_import)

避免在lib中使用相對路徑的引用,而使用package.

在返回類型為future的方法中,避免返回null(avoid_returning_null_for_future)

在需要返回Future的方法中,不應(yīng)該返回null。

避免使用慢速的異步io方法(avoid_slow_async_io)

避免使用 **dart:io** 中的異步慢速io方法,而使用他們對應(yīng)的同步io方法.

t)方法(avoid_type_to_string)

避免在線上代碼中使用toString()方法,而應(yīng)該使用自定義的方法,來實(shí)現(xiàn)將類中數(shù)據(jù)轉(zhuǎn)換成字符串.

避免參數(shù)的名稱和類型的名稱重名(avoid_types_as_parameter_name)

參數(shù)的名稱不應(yīng)該和任何一個(gè)已知的類重名.

不要在Flutter的web plugin外使用web庫(avoid_web_libraries_in_flutter)

不要在僅可在web中使用的庫在web插件外的地方使用.(**dart:html**, **dart:js** and **dart:js_util**

在使用stream時(shí),使用完一定要對stream調(diào)用cancel方法(cancel_subscriptions)

要對StreamSubscription使用cancel方法,防止內(nèi)存泄漏.

在使用sink時(shí),使用完一定要調(diào)用close方法(close_sinks)

要對**dart.core.Sink 使用close方法,以防止內(nèi)存泄漏**.

阻止控制流進(jìn)入finally語句中(control_flow_in_finally

組織控制流進(jìn)入finally語句中,這樣會(huì)導(dǎo)致很難調(diào)試.

diagnostic應(yīng)該覆蓋所有的屬性(diagnostic_describe_all_properties)

應(yīng)該覆蓋所有的公共屬性在debug的方法中以便更好的進(jìn)行調(diào)試.

不要寫空語句(empty_statements)

空語句和誤用分號(hào)很類似.

hash和==應(yīng)該同時(shí)被覆蓋或者改寫(hash_and_equals)

永遠(yuǎn)同時(shí)覆蓋 **hashCode** 如果覆蓋 **==**.

不要在條件判斷中賦值或者對同一個(gè)條件判斷兩次(invariant_booleans (experimental))

條件判斷語句中不應(yīng)該永遠(yuǎn)是true或者false.

在迭代中不要使用contains來判斷不相關(guān)的類型(iterable_contains_unrelated_type)

調(diào)用 Iterable.contains 會(huì)調(diào)用==而返回false.

在list中不要?jiǎng)h除不相關(guān)的類型(list_remove_unrelated_type)

在list中刪除不相關(guān)的類型會(huì)返回false,而這往往是開發(fā)者所未預(yù)料到的.

在判斷語句中只進(jìn)行真假的判斷(literal_only_boolean_expressions)

判斷語句中只進(jìn)行真假的判斷,而不要進(jìn)行賦值等各種其他操作.

不要在list中連接字符串(no_adjacent_strings_in_list)

這個(gè)很有可能意味著忘記了使用逗號(hào)來分隔list中的元素.

不要再case中有重復(fù)的值(no_duplicate_case_value)

在switch-case語句中,case中的值不應(yīng)該有重復(fù)的.

在creatState方法中不應(yīng)該有任何邏輯(no_logic_in_create_state)

createState方法中只應(yīng)該有創(chuàng)建state的方法調(diào)用,而不應(yīng)該有其他的任何邏輯.

引用同一模塊的頭文件時(shí),使用相對路徑(prefer_relative_imports)

在引用同一模塊下的其他 **lib/下的文件的頭文件時(shí),使用相對路徑**.

在void可以使用的時(shí)候,不要使用NULL(prefer_void_to_null)

不要使用Null類型,除非你確認(rèn)你不希望使用void .

在復(fù)寫==方法時(shí),一定要判斷傳入的參數(shù)的類型(test_types_in_equals)

復(fù)寫類的==方法時(shí),一定要判斷入?yún)⒌念愋停苑乐箓魅雗ull等.

在finally中不應(yīng)該拋出error(throw_in_finally)

避免在finally中使用throw,這會(huì)導(dǎo)致代碼的調(diào)試?yán)щy.

無用的代碼應(yīng)該及時(shí)刪除(unnecessary_statements)

避免使用無意義的diamanté和避免使用無用的語句在代碼中,并且應(yīng)該及時(shí)刪除.

不要使用==來比較兩個(gè)無關(guān)的類(unrelated_type_equality_checks)

==來比較無關(guān)的兩個(gè)類,有可能導(dǎo)致返回false,但是沒法達(dá)到開發(fā)者的目的.

在同步方法中使用BuildContexts(use_build_context_synchronously (experimental))

如果在異步方法中使用 BuildContexts,可能會(huì)導(dǎo)致BuildContexts雖然已經(jīng)被銷毀,仍然被使用的情況.

在組件的初始化方法中一定要使用key(use_key_in_widget_constructors)

在組件的初始化方法中一定要使用key,并調(diào)用super將key傳入super的初始化方法.

正則表達(dá)式應(yīng)該是有效的(valid_regexp

正則表達(dá)式的書寫應(yīng)該是有效的,否則在運(yùn)行時(shí)會(huì)報(bào)錯(cuò).

comment_references

Only reference in scope identifiers in doc comments.

unsafe_html

Avoid unsafe HTML APIs.

Style Rules

總是標(biāo)明方法的返回類型(always_declare_return_types)

聲明方法的返回類型.

控制語句的控制體總是新起一行(always_put_control_body_on_new_line)

在控制語句中,每一個(gè)控制體總是新起一行來實(shí)現(xiàn).

將必傳命名參數(shù)放在參數(shù)列表的第一位(always_put_required_named_parameters_first)

將必傳命名參數(shù)放在第一位.

總是指定參數(shù)的類型(always_specify_types)

使用變量和參數(shù)時(shí),總是明確的指定參數(shù)的類型.

使用override注解來覆蓋父類的方法和參數(shù)(annotate_override)

使用override以防止參數(shù)被意外的覆蓋.

在非必要的情況下避免使用dynamic作為返回值或者函數(shù)的參數(shù)(avoid_annotating_with_dynamic)

在非必要的情況下,不使用dynamic作為返回值或者函數(shù)參數(shù)的類型,可以直接省略類型.

在條件表達(dá)式中避免使用bool字面值(avoid_bool_literals_in_conditional_expressions)

在條件表達(dá)式中,避免直接使用true和false.

不要在catch中不指定exception的類型(avoid_catches_without_on_clauses)

以防止捕捉到其他非意料到的異常而未做正確處理.

不要顯式的捕捉error(avoid_catching_errors)

Error和Exception不同,不應(yīng)該主動(dòng)的捕捉.Error可以在運(yùn)行前提前檢查并解決掉。

不要定義只有靜態(tài)變量和靜態(tài)方法的類(avoid_classes_with_only_static_members)

靜態(tài)變量可以以常量來替代,靜態(tài)方法可以以全局函數(shù)來替代.

不要檢查類型是int或者double,應(yīng)該檢查num(void_double_and_int_checks)

編譯成js的時(shí)候都會(huì)變成float類型.

不要對未標(biāo)記為@immutable的類覆蓋==和hashcode方法(avoid_equals_and_hash_code_on_mutable_classes)

這個(gè)操作可能引發(fā)未可知的問題.

通過雙引號(hào)來消除字符串中的轉(zhuǎn)義字符(avoid_escaping_inner_quotes)

雙引號(hào)來引用字符串,可以不需要對字符進(jìn)行轉(zhuǎn)義.

在常量類中避免進(jìn)行初始化(avoid_field_initializers_in_const_classes)

而直接通過get方法獲取常量屬性.

不要使用foreach來進(jìn)行遍歷(avoid_function_literals_in_foreach_calls)

在Dart中,如果要迭代序列,那么慣用的方法就是使用循環(huán).

不要使用implement來實(shí)現(xiàn)一個(gè)覆蓋了==方法的父類(avoid_implementing_value_types)

這樣在子類中,父類的==實(shí)現(xiàn)并不會(huì)被繼承.

不要顯式的初始化一個(gè)變量為null(avoid_init_to_null)

可以不初始化它.

避免使用難以被轉(zhuǎn)換為js的int數(shù)字(avoid_js_rounded_ints)

在編譯成js的時(shí)候int和double會(huì)被轉(zhuǎn)換為js中的number類型.

不要在一行中聲明多個(gè)變量(avoid_multiple_declarations_per_line)

每一個(gè)變量應(yīng)該單獨(dú)一行來聲明.

不要在自定義的==中判斷是否等于null(avoid_null_checks_in_equality_operators)

只要判斷類型是否相同,就能確定他是否是null了.

不要使用位置布爾參數(shù)(avoid_positional_boolean_parameters)

要是用命名布爾參數(shù),否則很難辨認(rèn)布爾參數(shù)的含義.

不要使用私有的typedef函數(shù)定義(avoid_private_typedef_functions)

只使用一次的 typedef 函數(shù)定義,可以直接使用內(nèi)聯(lián)函數(shù).

不要重復(fù)設(shè)置參數(shù)的值(avoid_redundant_argument_values)

對于已經(jīng)有默認(rèn)值的函數(shù)可選參數(shù),使用時(shí)不應(yīng)該再重復(fù)設(shè)置和他默認(rèn)值相同的值.

不要重命名覆蓋函數(shù)的參數(shù)變量的名稱(avoid_renaming_method_parameters)

應(yīng)該變量的名稱保持一致.

不要設(shè)置setters方法的返回值(avoid_return_types_on_setters)

因?yàn)閟etter方法不應(yīng)該有返回值.

在返回類型為bool、double、int、num的函數(shù)中,不應(yīng)該返回null(avoid_returning_null)

應(yīng)該返回一個(gè)默認(rèn)值當(dāng)前類型值.

在無返回值的void函數(shù)中,不應(yīng)該返回null(void_returning_null_for_void)

應(yīng)該直接使用retrun即可.

避免在流式接口中返回this(avoid_returning_this)

直接使用..來實(shí)現(xiàn)流式接口.

不要只實(shí)現(xiàn)setters而不實(shí)現(xiàn)getters(avoid_setters_without_getters)

這樣容易出現(xiàn)錯(cuò)誤.

不要不使用類型參數(shù)的類型(avoid_shadowing_type_parameters)

在類中定義了類型參數(shù),就應(yīng)該在類中的方法中使用,而不應(yīng)該使用其他類型參數(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ù),都應(yīng)該有用處,并被使用.

異步方法async應(yīng)該有Future的返回類型(avoid_void_async)

異步方法不應(yīng)該返回void類型,而是應(yīng)該返回Future類型.

await方法只應(yīng)該用在future上(await_only_future)

可以使用await在**Future<X>**, **FutureOr<X>**, **Future<X>?**, **FutureOr<X>?** and **dynamic或者null上**

對于extension應(yīng)該使用駝峰命名(camel_case_extension)

使用駝峰命名規(guī)則來命名extension.

類名和typedef應(yīng)該使用駝峰命名法(camel_case_types)

應(yīng)該使用首字母大寫的駝峰命名法而且不要有下劃線.

當(dāng)對同一個(gè)對象連續(xù)調(diào)用方法時(shí),使用層疊樣式(cascade_invocations)

使用..語法,對同一個(gè)對象連續(xù)調(diào)用方法.

不要將一個(gè)nullable對象強(qiáng)制轉(zhuǎn)換為一個(gè)非空對象(cast_nullable_to_non_nullable (experimental))

轉(zhuǎn)換后可能會(huì)導(dǎo)致不會(huì)做非空判斷.

常量名稱使用小寫字母開頭的駝峰命名(constant_identifier_names)

命名使用小寫字母開頭的駝峰命名.

總是在控制流中使用大括號(hào)來括住控制語句(curly_braces_in_flow_control_structures)

使用大括號(hào)來括住控制語句可以保證不出現(xiàn)懸垂語句.

類中的deprecated應(yīng)該保持一致(deprecated_consistency)

類如果廢棄他的初始化方法應(yīng)該標(biāo)識(shí)為廢棄,屬性廢棄則初始化方法中對于此屬性的引用應(yīng)該廢棄.

對于dart:的引用應(yīng)該在其他引用之前(directives_ordering)

對于頭文件的引用應(yīng)該首先寫dart庫中的頭文件.

不要使用空的catches block(empty_catches)

如果想要忽略它,應(yīng)該異常的參數(shù)使用_來表示.如果是故意制造的異常,應(yīng)該寫注釋。

不要使用大括號(hào)來括住空的初始化方法(empty_constructor_bodies)

要是用分號(hào) **;** 而不是大括號(hào) **{}來表示空的初始化方法體**.

switch-case中應(yīng)該列出case的所有可能(exhaustive_cases)

應(yīng)該分別列出case中的所有能,并針對性的做處理.

文件名稱應(yīng)該以小寫字母加下劃線的規(guī)則來命名(file_names)

**代碼文件的名稱應(yīng)該遵循lowercase_with_underscores**.

不要引用其他package的lib/src文件夾下的文件(implementation_imports)

只應(yīng)該引用lib文件夾下的文件,src是package的具體實(shí)現(xiàn),可能隨時(shí)被修改.

庫的名稱應(yīng)該使用小寫字母加下劃線(library_names)

庫的命名規(guī)則應(yīng)該遵循 **lowercase_with_underscores**.

引用庫的前綴應(yīng)該遵循小寫字母沒有下劃線格式(library_prefixes)

使用 **lowercase_with_underscores** 規(guī)則import ‘dart:,math‘ as math.

不要在庫的公開的API中使用私有類型(library_private_types_in_public_api)

避免在對外開放的API中使用似有類型.

非常量屬性應(yīng)該使用小寫字母命名規(guī)范(non_constant_identifier_names)

非常量屬性命名遵循 lowerCamelCase規(guī)范.

不要對一個(gè)可能為空的參數(shù)上使用是否為空的判斷(null_check_on_nullable_type_parameter (experimental))

這種很容易出現(xiàn)錯(cuò)誤不要使用T!而是使用T as W.

不要將null作為一個(gè)匿名函數(shù)傳遞給參數(shù)(null_closure)

當(dāng)需要一個(gè)內(nèi)明函數(shù)作為參數(shù)的時(shí)候不要直接傳null .

不要設(shè)置局部變量的類型(omit_local_variable_types)

局部變量一般很容易從上下文中判斷出他的類型.

不要定義只有一個(gè)成員的類(one_member_abstracts)

如果一個(gè)簡單的函數(shù)定義可以替代就不要重新定義一個(gè)類.

只拋出error或者exception類型的異常(only_throw_errors)

只拋出 Exception 或者 Error或者他們子類的異常.

不要覆蓋父類的屬性(overridden_fields)

通常覆蓋父類的屬性都是錯(cuò)誤的.

應(yīng)該給package中的公共類提供文檔(package_api_docs)

給公開的API提供文檔注釋.

應(yīng)該給package中的類名添加前綴(package_prefixed_library_names)

添加包名.路徑名.

不要給方法中的參數(shù)重新賦值(parameter_assignments)

這種做法很容易造成錯(cuò)誤,除非你使用 ??=.

使用相鄰字符串來連接字符串(prefer_adjacent_string_concatenation)

定義的相鄰字符串會(huì)自動(dòng)連接而不是用+.

初始化函數(shù)中在初始化列表中使用assert(prefer_asserts_in_initializer_lists)

而不是在初始化函數(shù)的函數(shù)體中做assert.

在assert中需要加一個(gè)提示信息(prefer_asserts_with_messag)

assert命中的時(shí)候并不是總是知道是什么原因造成的.

使用集合字面量(prefer_collection_literals)

使用[],{},使用[]或者{},但是LinkedHashSet和LinkedHashMap除外.

使用??=來代替判空(prefer_conditional_assignmen)

如果只是針對簡單的判空賦值,直接使用??=.

使用const來修飾具有const初始化方法產(chǎn)生的對象(prefer_const_constructors)

盡量使用const來修飾.

對于不可變的類,需要使用const來修飾初始化方法(prefer_const_constructors_in_immutables)

對于聲明為 **@immutable** 類的初始化方法需要設(shè)置為const.

對于常量聲明使用const來修飾(prefer_const_declaration)

推薦使用const 而不是final 來修飾常量的聲明.

在不可變類中的初始化參數(shù)設(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** 是否包含某個(gè)對象

使用=將命名參數(shù)和他的默認(rèn)值分開(prefer_equal_for_default_values)

使用 **=** 而不是:.

使用=>來表示簡單的表達(dá)是函數(shù)體(prefer_expression_function_bodies)

使用 => 來作為一個(gè)簡單的返回函數(shù)的函數(shù)體.

不修改的私有變量設(shè)置為final(prefer_final_field)

有利于編譯器優(yōu)化.

在foreach中的變量設(shè)置為final(prefer_final_in_for_each)

如果在循環(huán)體中不修改它.

盡量使用final來設(shè)置變量(prefer_final_locals)

如果不會(huì)被重新賦值,使用final.

在函數(shù)的參數(shù)變量中使用final(prefer_final_parameters)

只要函數(shù)中的參數(shù)不會(huì)在函數(shù)體中被修改.

通過遍歷來創(chuàng)建map時(shí)最好使用for(prefer_for_elements_to_map_fromIterable)

使用for循環(huán)來進(jìn)行遍歷.

如果你準(zhǔn)備對循環(huán)的每個(gè)變量使用某一個(gè)方法使用foreach(prefer_foreach)

使用 **forEach** 來對所有的元素使用方法.

使用函數(shù)聲明將函數(shù)綁定到名稱(prefer_function_declarations_over_variables)

而不是使用變量來賦值.

使用=號(hào)來作為函數(shù)的別名(prefer_generic_function_type_aliases)

而不是用直接命名.

在build方法中盡量使用ifelse而不使用三目運(yùn)算符(prefer_if_elements_to_conditional_expressions)

盡量使用ifelse.

使用??來作為判空進(jìn)行賦值操作(prefer_if_null_operators)

而不是使用if來進(jìn)行判空操作.

盡可能使用初始化來給類屬性賦值(prefer_initializing_formals)

使用初始化形式可以使得你的代碼更加簡潔.

在初始化的時(shí)候設(shè)置元素而不是用add(prefer_inlined_adds)

盡可能在初始化的時(shí)候設(shè)置所有元素.

盡量使用整數(shù)賦值而不要使用對應(yīng)的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然后在遍歷的過程中對類型做檢查.

使用mixin來混入(prefer_mixin)

使用 mixins.

在對一個(gè)對象使用方法之前使用?判斷對象是否為空(prefer_null_aware_method_calls)

使用?.來調(diào)用方法,而不是if.

使用?.來判空(prefer_null_aware_operators)

使用?.來調(diào)用方法,而不是if.

使用擴(kuò)展運(yùn)算符...來擴(kuò)展集合(prefer_spread_collections)

盡量使用...來將一個(gè)集合合并入另一個(gè)集合.

未在定義的時(shí)候初始化的變量應(yīng)該指明類型(prefer_typing_uninitialized_variables)

否則很容易出現(xiàn)錯(cuò)誤.

在deprecation中寫明信息(provide_deprecation_message)

通過 @Deprecated("message")來說明過期的信息.

對所有的公共的api變量輸出文檔(public_member_api_docs)

說明所有的公共變量.

不要?jiǎng)?chuàng)建遞歸的getter(recursive_getters)

這通常說明是寫錯(cuò)了.

使用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的屬性的賦值放在最后.

類中的構(gòu)造方法放在第一位(sort_constructors_first)

構(gòu)造方法放在其他屬性之前.

未命名的構(gòu)造方法放在第一位(sort_unnamed_constructors_first)

先是未命名的然后是命名的.

在公共的API中指定參數(shù)的類型(type_annotate_public_apis)

指定參數(shù)的類型.

初始化參數(shù)如果是類中的屬性不需要指定類型(type_init_formals)

不要設(shè)置構(gòu)造方法中的初始化屬性的類型.

在異步方法中的Future應(yīng)該使用awaited或者標(biāo)記為unawaited(unawaited_future)

否則很容易出現(xiàn)異步的錯(cuò)誤.

不要返回一個(gè)awaited的表達(dá)式(unnecessary_await_in_return)

在返回表達(dá)式中不要使用awaited關(guān)鍵字.

不要在字符串中使用不必要的大括號(hào)(unnecessary_brace_in_string_interps)

有的字符串組合沒必要用大括號(hào).

不要使用沒必要的const(unnecessary_const)

避免在一個(gè) const上下文中重復(fù)使用 const.

對于局部變量不要使用final(unnecessary_final)

使用var更短,而且也沒有改變意思.

不使用沒必要的getter和setter(unnecessary_getters_setter)

沒必要為了安全而使用getter和setter.

當(dāng)可以使用閉包是,不要使用匿名函數(shù)(unnecessary_lambdas)

閉包可以直接調(diào)用,而不需要使用復(fù)雜的匿名函數(shù).

不使用沒必要的new(unnecessary_new)

創(chuàng)建實(shí)例不需要使用new.

不要使用沒必要的null檢測(unnecessary_null_checks (experimental))

如果可以接受非空的參數(shù).

. 如果可以接受空參數(shù),

對于初始化未非空的final變量不要定義為可空類型(unnecessary_nullable_for_final_variable_declarations (experimental))

肯定會(huì)是一個(gè)非空類型.

不要使用沒必要的overrides(unnecessary_overrides)

不要在一個(gè)只調(diào)用super方法中的override中使用overrides.

不要使用沒必要的小括號(hào)(unnecessary_parenthesis)

沒必要的小括號(hào)要被移除.

不使用沒必要的raw字符串(unnecessary_raw_strings)

沒必要的raw字符串應(yīng)該不使用.

不要使用沒必要的轉(zhuǎn)義符(unnecessary_string_escape)

刪除沒必要的轉(zhuǎn)義字符.

不要使用沒必要的this(unnecessary_this)

除非是為了防止被覆蓋.

使用8位16進(jìn)制表示顏色(use_full_hex_values_for_flutter_colors)

使用8位16進(jìn)制數(shù)表示顏色(0xFFFFFFFF) .

使用??來將null轉(zhuǎn)換為布爾值(use_if_null_to_convert_nulls_to_bools)

使用??true 或者false.

使用isEven或者isodd來判斷奇偶(use_is_even_rather_than_modulo)

而不是判斷% 2的結(jié)果.

使用late來定義非空的私有變量(use_late_for_private_fields_and_variables (experimental))

如果沒有被初始化.

使用系統(tǒng)已經(jīng)定義好的常量值(use_named_constants)

而不是自己設(shè)置一個(gè)值.

使用raw string來避免使用轉(zhuǎn)義符(use_raw_strings)

如果字符串需要轉(zhuǎn)義使用r'fsf / $'.

使用rethrow再次拋出異常(use_rethrow_when_possible)

當(dāng)在捕獲異常中有遇到異常使用rethrow.

使用setter點(diǎn)方法修改屬性而不是直接調(diào)用方法(use_setters_to_change_properties)

使用rect.width = 3 而不是rect.setWidth(3).

使用stringbuffer來組合字符串(use_string_buffers)

string buffers 更加高效.

use_test_throws_matchers

Use throwsA matcher instead of fail().

use_to_and_as_if_applicable

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_as (deprecated)

Avoid using **as**.

不要使用fromEnvironment和hasEnvironment(do_not_use_environment)

可能容易引起誤解.

不要給void類型的變量賦值(void_checks)

不要給void類型的變量賦值.

應(yīng)該遵循flutter的todo樣式(flutter_style_todos)

Use Flutter TODO format: // TODO(username): message, https://URL-to-issue.

盡量將返回語句和賦值語句合并返回成一個(gè)語句返回(join_return_with_assignment)

返回語句和賦值語句合并成一個(gè)語句一起返回.

多行字符串應(yīng)該新起一行(leading_newlines_in_multiline_strings)

比較易讀.

在switch-case中不要使用default(no_default_cases (experimental))

每一個(gè)case都應(yīng)該單獨(dú)處理.

每行不超過80個(gè)字符(lines_longer_than_80_chars)

避免超過 80 個(gè)字符.

在連接字符串的時(shí)候應(yīng)該加入空格(missing_whitespace_between_adjacent_strings)

防止字符串連接過程中遺忘.

不要在toString方法使用runtimeType方法(no_runtimeType_toString)

因?yàn)?runtimeType比較耗費(fèi)時(shí)間,除非你不在乎時(shí)間和效率.

內(nèi)置類型是冪等的有些操作是多余的(noop_primitive_operations)

刪除相關(guān)的冪等操作.

prefer_bool_in_asserts (deprecated)

Prefer using a boolean as the assert condition.

推薦使用雙引號(hào)來修飾字符串(prefer_double_quotes)

Prefer double quotes where they won't require escape sequences.

prefer_single_quotes

Only use double quotes for strings containing single quotes.

require_trailing_commas (experimental)

Use trailing commas for all function calls and declarations.

super_goes_last (deprecated)

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

依賴的庫應(yīng)該在dependcies中指定版本號(hào)(depend_on_referenced_packages)

以防止大版本號(hào)的遷移導(dǎo)致出現(xiàn)問題.

給package命名應(yīng)該使用小寫加下劃線(package_names)

package的名稱應(yīng)該遵循 **lowercase_with_underscores** .

sort_pub_dependencies

Sort pub dependencies.

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,461評論 6 532
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,538評論 3 417
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,423評論 0 375
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,991評論 1 312
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,761評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,207評論 1 324
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,268評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,419評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,959評論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,782評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 42,983評論 1 369
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,528評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,222評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,653評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,901評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,678評論 3 392
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 47,978評論 2 374

推薦閱讀更多精彩內(nèi)容