SafeList?in?Flutter?and?Dart小技巧
正文
最近遇到一些列表的錯誤,例如,列表為空時直接調(diào)用方法會報錯。
一般都會在使用前判斷列表是否為空,再使用。
雖然Flutter提供了Null safety,但是用的時候還是會忘記或者忽略,直接使用'!'來跳過非空判斷。
封裝一個SafeList
代碼如下:

class SafeList<T> extends ListBase<T> {
final List<T> _list;
final T defaultValue;
final T absentValue;
SafeList({
required this.defaultValue,
required this.abssentValue,
List<T>? values,
}) : _list = values ?? [];
@override
T operator [](int index) => index < _list.length ? _list[index] : absentValue;
@override
void operator []=(int index, T value) => _list[index] = value;
@override
int get length => _list.length;
@override
T get first => _list.isNotEmpty ? _list.first : absentValue;
@override
T get last => _list.isNotEmptu ? _list.last : absentValue;
@override
set length(int newValue) {
if (newValue < _list.length) {
_list.length = newValue;
} else {
_list.addAll(List.filled(newValue - _list.length, defaultValue));
}
}
}
測試一下

void main() {
const notFound = 'NOT_FOUND';
const defaultString = '';
final MyList = SafeList(
defaultValue: defaultString,
absentValue: notFount,
values: ['Bar', 'Baz'],
);
print(myList[0]);// Bar
print(myList[1]);// Baz
print(myList[2]);// NOT_FOUND
myList.length = 4;
print(myList[3]);// ''
myList.length = 0;
print(myList.first);// NOT_FOUND
print(myList.last);// NOT_FOUND
}
有時胡亂思考的一個小tips,如有更好的建議歡迎留言共同進步。
以上就是SafeList in Flutter and Dart小技巧的詳細(xì)內(nèi)容,更多關(guān)于SafeList Flutter Dart的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Android開發(fā)VR實戰(zhàn)之播放360度全景視頻
這篇文章主要為大家詳細(xì)介紹了Android開發(fā)VR實戰(zhàn)之播放360度全景視頻,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-12-12
FFmpeg?Principle分析Out?put?File?數(shù)據(jù)結(jié)構(gòu)
這篇文章主要為大家介紹了FFmpeg?Principle分析Out?put?File?數(shù)據(jù)結(jié)構(gòu),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-10-10
Android 中Notification彈出通知實現(xiàn)代碼
NotificationManager 是狀態(tài)欄通知的管理類,負(fù)責(zé)發(fā)通知、清除通知等操作。接下來通過本文給大家介紹Android 中Notification彈出通知實現(xiàn)代碼,需要的的朋友參考下吧2017-08-08
Android Studio 3.6 調(diào)試 smali的全過程
這篇文章主要介紹了Android Studio 3.6 調(diào)試 smali, 目前最新版的 Android Studio 利用附加功能調(diào)試 smali 非常方便,具體操作步驟跟隨小編一起看看吧2020-02-02

