最佳實踐是乙個領域可以接受的專業標準,對於任何程式語言來說,提高**質量、可讀性、可維護性和健壯性都非常重要。
讓我們探索一些設計和開發flutter應用程式的最佳實踐。
class
、enum
、typedef
和extension
應採用駝峰命名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.徹底的測試 模擬你的生產環境,包括流量來...