日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學(xué)無(wú)先后,達(dá)者為師

網(wǎng)站首頁(yè) 編程語(yǔ)言 正文

SafeList?in?Flutter?and?Dart小技巧_Android

作者:程序員界的小學(xué)生 ? 更新時(shí)間: 2023-01-07 編程語(yǔ)言

正文

最近遇到一些列表的錯(cuò)誤,例如,列表為空時(shí)直接調(diào)用方法會(huì)報(bào)錯(cuò)。

一般都會(huì)在使用前判斷列表是否為空,再使用。

雖然Flutter提供了Null safety,但是用的時(shí)候還是會(huì)忘記或者忽略,直接使用'!'來(lái)跳過(guò)非空判斷。

封裝一個(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));
        }
    }
}

測(cè)試一下

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)步。

原文鏈接:https://juejin.cn/post/7172887827070320676

欄目分類
最近更新