SafeList?in?Flutter?and?Dart小技巧
正文
最近遇到一些列表的錯(cuò)誤,例如,列表為空時(shí)直接調(diào)用方法會(huì)報(bào)錯(cuò)。
一般都會(huì)在使用前判斷列表是否為空,再使用。
雖然Flutter提供了Null safety,但是用的時(shí)候還是會(huì)忘記或者忽略,直接使用'!'來跳過非空判斷。
封裝一個(gè)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
}
有時(shí)胡亂思考的一個(gè)小tips,如有更好的建議歡迎留言共同進(jìn)步。
以上就是SafeList in Flutter and Dart小技巧的詳細(xì)內(nèi)容,更多關(guān)于SafeList Flutter Dart的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Android Studio 3.0 原生支持kotlin 例子詳解
這篇文章主要介紹了 Android Studio 3.0 原生支持kotlin 例子詳解,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2017-05-05
Android studio報(bào): java.lang.ExceptionInInitializerError 錯(cuò)誤
本篇文章主要介紹了Android studio報(bào): java.lang.ExceptionInInitializerError錯(cuò)誤的解決方法,具有很好的參考價(jià)值。下面跟著小編一起來看下吧2017-03-03
Android入門之Fragment嵌套Fragment的用法詳解
這篇文章主要為大家詳細(xì)介紹了Android中如何實(shí)現(xiàn)Fragment嵌套Fragment的相關(guān)資料,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,需要的可以參考一下2023-02-02
Android中Activity的四種啟動(dòng)模式和onNewIntent()
android 中activity的啟動(dòng)模式分為四種,(standard、singleTop、singTask、singleInstance),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2018-08-08

