SafeList in Flutter and Dart小技巧

 更新时间:2022年12月08日 15:23:11   作者:程序员界的小学生  
这篇文章主要为大家介绍了SafeList in Flutter and Dart小技巧,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

正文

最近遇到一些列表的错误,例如,列表为空时直接调用方法会报错。

一般都会在使用前判断列表是否为空,再使用。

虽然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小技巧的详细内容,更多关于SafeList Flutter Dart的资料请关注脚本之家其它相关文章!

相关文章

  • Android Studio 3.0 原生支持kotlin 例子详解

    Android Studio 3.0 原生支持kotlin 例子详解

    这篇文章主要介绍了 Android Studio 3.0 原生支持kotlin 例子详解,非常具有实用价值,需要的朋友可以参考下
    2017-05-05
  • Android 8.0安装apk的实例代码

    Android 8.0安装apk的实例代码

    本文给大家分享了Android 8.0安装apk的实例代码,非常不错,具有参考借鉴价值,需要的朋友参考下吧
    2018-03-03
  • Flutter软键盘的原理浅析

    Flutter软键盘的原理浅析

    大家应该都知道目前Flutter官方是没有自定义键盘的解决方案,下面这篇文章主要给大家介绍了关于Flutter软键盘原理的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2021-10-10
  • Android studio报: java.lang.ExceptionInInitializerError 错误

    Android studio报: java.lang.ExceptionInInitializerError 错误

    本篇文章主要介绍了Android studio报: java.lang.ExceptionInInitializerError错误的解决方法,具有很好的参考价值。下面跟着小编一起来看下吧
    2017-03-03
  • Android绘制炫酷引导界面

    Android绘制炫酷引导界面

    这篇文章主要帮助大家使用Android绘制炫酷引导界面,具有实用性和参考价值,感兴趣的小伙伴们可以参考一下
    2016-05-05
  • Android入门之Fragment嵌套Fragment的用法详解

    Android入门之Fragment嵌套Fragment的用法详解

    这篇文章主要为大家详细介绍了Android中如何实现Fragment嵌套Fragment的相关资料,文中的示例代码讲解详细,具有一定的借鉴价值,需要的可以参考一下
    2023-02-02
  • Kotlin协程上下文与上下文元素深入理解

    Kotlin协程上下文与上下文元素深入理解

    协程上下文是一个有索引的Element实例集合,每个element在这个集合里有一个唯一的key;协程上下文包含用户定义的一些数据集合,这些数据与协程密切相关;协程上下文用于控制线程行为、协程的生命周期、异常以及调试
    2022-08-08
  • Android中Activity的四种启动模式和onNewIntent()

    Android中Activity的四种启动模式和onNewIntent()

    android 中activity的启动模式分为四种,(standard、singleTop、singTask、singleInstance),本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友参考下吧
    2018-08-08
  • Android Studio常用快捷键功能说明

    Android Studio常用快捷键功能说明

    本文给大家收藏整理了关于Android Studio常用快捷键功能说明,需要的朋友可以参考下
    2017-10-10
  • Android串口通信封装之OkUSB的示例代码

    Android串口通信封装之OkUSB的示例代码

    本篇文章主要介绍了Android串口通信封装之OkUSB的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-10-10

最新评论