-
自從把Flutter SDK中的analysis_options.yaml copy到專案根目錄後就***,當時是700多個error,警告記不清了,提示資訊有7k個,總共花了一天半全部改完。
-
所以還是得養成良好的程式碼編寫習慣
字串用單引號
除非你的字串中有單引號---> ',不然整個字串用單引號。
泛型規範
只要類的定義中有寫泛型,或者一些方法中用到了泛型,那麼在使用這些類或者呼叫這些方法的時候也一定要加上泛型
最常見的例子
List<String> list=<String>[];
Map<String,String> map=<String,String>{};
Future<void>
複製程式碼
Flutter中:
Navgator.pust<void>
showDialog<void>
Tween<double>
Tween<int>
複製程式碼
根據具體場景新增泛型 在傳遞List或者Map的時候
<T>[]
<T,T>{}
複製程式碼
前面的泛型也務必加上 []也需要在前面加上泛型
省略new關鍵字
有new的都是祖傳程式碼了,沒啥細講的.
不要省略物件的型別
也儘量不要用var與dynamic
final關鍵字
在任何時候使用新的變數,如果它不需要被二次修改,請一定加上final修飾
final String str='Nightmare';
for(final String str in xxx){
}
複製程式碼
Map、List的物件都是引用,類似於C語言中的指標,所以在定義後都是不會改變的
final List<int> list= <int>[];
final Map<String,dynamic> map=<String,dynamic>{};
複製程式碼
const修飾
const Duration();
const Text();
const Color(0xffff0000);
const EdgeInsets.only(bottom: 20.0);
複製程式碼
一些巢狀物件的的const
const Center(
child: SizedBox(
width: 80,
height: 80,
),
),
),
複製程式碼
其中SizedBox的const不用加
if與for語句的花括號
不管if條件後是單語句還是多條語句 都新增大括號{}
if(bool){
print('');
}
for(***){
}
複製程式碼
官方程式碼也有很多單語句不加花括號的...
避免不必要的字串插值
例子:
String number='Nightmare';
Text('$number')
複製程式碼
優化:
String number='Nightmare';
Text(number)
複製程式碼
字串插值避免不必要的的大括號
例子:
int a;
String b='${a}';
複製程式碼
優化:
int a;
String b='$a';
複製程式碼
官方的有些程式碼都有這種情況
字串相加可以省略加號
例子:
'str1'+'str2'
複製程式碼
修改:
'str1' 'str2'
複製程式碼
不要在列表裡面使用相鄰字串
例子:
<String>['str1','str2' 'str3','str4']
複製程式碼
你也許會想幹嘛不寫成 'str2str3' 但有些場景如下
<String>[
'-c',
'''export PATH=/data/data/com.nightmare/files/usr/bin:\$PATH
mkdir /data/data/com.nightmare/files/home/$_index
busybox unzip -o $_filePath -d /data/data/com.nightmare/files/home/$_index
cd /data/data/com.nightmare/files/home/$_index
sh /data/data/com.nightmare/files/home/$_index/install.sh
rm -rf /data/data/com.nightmare/files/home/$_index
rm -rf $_filePath'''
],
複製程式碼
如果寫成單個字串單行會特別長所以解決方法將整個字串用''',所以有時候可以用三個單引號包起來
回撥函式寫明型別
例子
itemBuilder: (c, i) {}
複製程式碼
優化
itemBuilder: (BuildContext context, int index) {}
複製程式碼
為所有的方法寫上型別
void function()
複製程式碼
或者
Future<void> function() async
複製程式碼
Flutter被遺棄的介面
Theme中
body1=>bodyText2
title=>headline6
subhead=>subtitle1
複製程式碼
這只是我個人專案使用到的,其他的看原始碼就知道了
將條件語句轉換成if-else
bool isExist;
***
isExist?***:***;
複製程式碼
優化
bool isExist;
***
if(isExist){
}else{
}
複製程式碼
類的建構函式在所有子成員前面
先寫構造,再寫成員引數
如果有沒有用到的包,請在程式碼頂部刪除它
無詳細解釋
導包的排序
- 有些編譯器不能自動給你修復,需要你手動按照字母將導包的順序排序
並遵循一下大前提如下:
- dart sdk內的庫
- flutter內的庫
- 第三方庫
- 自己的庫
- 相對路徑引用
先全部import再export,不要交替進行
類的內部訪問成員省略this.
無詳細解釋
有一些不想要更改的規範
dart官網有介紹,在使用以下方法時,非同步比同步要慢得多
Directory.exists
Directory.stat
File.lastModified
File.exists
File.stat
FileSystemEntity.isDirectory
FileSystemEntity.isFile
FileSystemEntity.isLink
FileSystemEntity.type
複製程式碼
但個人遇到的很多場景帶sync的方法會把UI卡住,尤其是在這些方法短時間裡頻繁訪問的情況,所以我註釋掉了analysis_options.yaml的這一行。
最後
- 有任何錯誤指出
- 個人專案在Flutter1.0的正式版前就已經使用了,依稀記得是0.7,當時程式設計基礎所有的能力很不紮實(現在也差不多),所以有很多沒能避免的地方,但我在知道怎麼優化的時候,一定及時優化。
- 可能大家沒有體驗過,一邊學Flutter一邊學C語言的hello world吧,所以說話與評價些許有些輕鬆。
- 記錄給需要的人,在這些場景程式碼編寫規範。