最佳實踐 Flutter 最佳實踐

2021-10-16 02:28:06 字數 4451 閱讀 6789

最佳實踐是乙個領域可以接受的專業標準,對於任何程式語言來說,提高**質量、可讀性、可維護性和健壯性都非常重要。

讓我們探索一些設計和開發flutter應用程式的最佳實踐。

classenumtypedefextension應採用駝峰命名uppercamelcase規則。

class mainscreen 

enum mainitem 

typedef predicate = bool function(t value);

extension mylist on list 

類庫、包、目錄、以及原始碼檔案都應使用帶下劃線的小寫命名lowercase_with_underscores

library firebase_dynamic_links;

import 'socket/socket_manager.dart';

變數、常量、引數和命名引數應都應使用小寫字母開頭的駝峰命名lowercamelcase

var item;

const bookprice = 3.14;

final urlscheme = regexp('^([a-z]+):');

void sum(int bookprice) 

當同時使用相對和絕對匯入時,從兩種不同的方式匯入同一類時,可能會造成混亂。為了避免這種情況,我們應該對lib/資料夾中的檔案使用相對路徑匯入

// don't

import 'package:demo/src/utils/dialog_utils.dart';

// do

import '../../../utils/dialog_utils.dart';

當值的型別已知時,請務必指定成員的型別,盡可能避免使用var

//don't

var item = 10;

final car = car();

const timeout = 2000;

//do

int item = 10;

final car bar = car();

string name = 'john';

const int timeout = 20;

通常,如果無法進行強制轉換,使用as強制轉換將會引發異常,為了避免異常,可以使用is

//don't

(item as animal).name = 'lion';

//do

if (item is animal)

item.name = 'lion';

很多時候,我們需要根據條件渲染widget,如果在條件表示式在任何情況下都返回null時,那麼我們應該僅僅使用if條件

//don't

widget gettext(buildcontext context) 

//do

widget gettext(buildcontext context) 

優先使用??(如果為null) 和?.(可識別空值)運算子,而不是條件表示式中null檢查

//don't

v = a == null ? b : a;

//do

v = a ?? b;

//don't

v = a == null ? null : a.b;

//do

v = a?.b;

當現有專案已經儲存在另乙個集合中時,spread 集合語法將使**更簡單

//don't

var y = [4,5,6];

var x = [1,2];

x.addall(y);

//do

var y = [4,5,6];

var x = [1,2,...y];

如果我們不想對同一物件執行一系列操作,則應使用級聯運算子

// don't

var path = path();

path.lineto(0, size.height);

path.lineto(size.width, size.height);

path.lineto(size.width, 0);

path.close();  

// do

var path = path()

..lineto(0, size.height)

..lineto(size.width, size.height)

..lineto(size.width, 0)

..close(); 

原始字串可用於避免轉義字元帶來的困擾

//don't

var s = 'this is demo string \\ and \$';

//do

var s = r'this is demo string \ and $';

在 dart 中,如果未指定變數的值,則變數會自動初始化為 null ,因此新增 null 是多餘且不需要的

//don't

int _item = null;

//do

int _item;

對於僅包含乙個表示式的函式,可以使用表示式函式

//don't

get width 

widget getprogressbar() //doget width => right - left;

widget getprogressbar() => circularprogressindicator(

valuecolor: alwaysstoppedanimation(colors.blue),

);

print()debugprint()均用於列印日誌到控制台,如果你使用print()並且一次輸出太多內容,android有時會丟棄一些日誌行,為了避免這種情況,請使用debugprint()當呼叫setstate(),所有後代widget都將重建,因此,將widget拆分為小的widget,在真正需要改變的widget上呼叫setstate()當使用無限列表或者非常大的列表時,通常建議使用listview.builder以提高效能。

預設的listview建構函式一次生成整個列表,listview.builder建立乙個惰性列表,當使用者向下滾動列表時,flutter會按需構建widget

setstate呼叫時不會改變的widget,我們應該將其定義為常量,這將阻止widget重建,從而提高效能

container(

padding: const edgeinsets.only(top: 10),

color: colors.black,

child: const center(

child: const text(

"no data found",

style: const textstyle(fontsize: 30, fontweight: fontweight.w800),

),),

);

我希望這些能給你一些見識,使你的flutter**更具可讀性,同時也可以提高應用程式的效能。

編碼愉快!

「在看和**」

就是最大的支援

JUnit最佳實踐

junit最佳實踐 cherami 轉貼 參與分 20053,專家分 4960 發表 2003 9 16 下午7 57 版本 1.0 閱讀 3899次 martin fowler說過 當你試圖列印輸出一些資訊或除錯乙個表示式時,寫一些測試 來替代那些傳統的方法。一開始,你會發現你總是要建立一些新的f...

SVN最佳實踐

楊爭 subversion是新一代的版本控制工具,由於其優於cvs的一些特點,得到了越來越多人的關注和使用,本人根據自己使用svn的經驗,寫了這篇文章,希望對大家有所幫助,其中有些實踐並不是僅僅適用於svn,對其他版本控制工具也是適用的。1 養成良好的記錄日誌的習慣.svn ci提交,最好在日誌中記...

MongoDB 最佳實踐

已經有很多關於 nosql 選擇的文章了。影響你選擇資料庫的因素有 讀 寫操作的吞吐量,永續性,一致性,延遲性等等。nathan hurst 的文章 visual guide to nosql system 很好的總結了這一點。nosql 通用的最佳實踐 1.徹底的測試 模擬你的生產環境,包括流量來...