广告
返回顶部
首页 > 资讯 > 移动开发 >FlutterRecoveringStreamErrors小技巧
  • 458
分享到

FlutterRecoveringStreamErrors小技巧

FlutterRecoveringStreamErrorsFlutterStream 2022-12-08 20:12:22 458人浏览 泡泡鱼
摘要

目录正文简单封装override bind()测试一下正文 你是否遇到过,出现异常的时候也需要给一个默认值,让程序可以继续运行下去? 一般的做法就是 一个达到try catch,然

正文

你是否遇到过,出现异常的时候也需要给一个默认值,让程序可以继续运行下去?

一般的做法就是 一个达到try catch,然后在finally里面做一个处理。

今天我尝试换一个思路,简单的封装一下

简单封装

首先定义一个stream转换器,为了处理error handler。

如果onError不为空,就将出现错误添加到stream中

class StreamErrorHandle<T> extends StreamTransfORMerBase<T, T> {
    final _controller = StreamController<T>.broadcast();
    final T? Function(Object error) onError;
    StreamErrorHandler({
        required this.onError,
    });
    @override
    Stream<T> bind(Stream<T> stream) {
        ...
    }
}

override bind()

用Stream里面的handleError来捕获错误。如果出现错误,我们调用handler,如果我们得到一个返回值,就将他发送到stream

@override
Stream<T> bind(Stream<T> stream) {
    final sub = stream.handleError((error) {
        final value = onError(error);
        if (value != null) {
            _controller.sink.add(value);
        }
    }).listen(_controller.sink.add);
    _controller.onCancel = (){
        sub.cancel();
    };
    return _controller.stream;
}

最后我们在Stream上面创建一个拓展,它允许我们轻松的使用我们的流转换器

extension Recover<T> on Stream<T> {
    Stream<T> onErrorRecoverWith(T? Functioon(Object error) onError) => transform(StreamErrorHandle<T>(onError: onError));
}

测试一下

Stream<String> getNames() async* {
    yield 'Foo'.
    yield 'Bar';
    throw Exception('Something went wrong');
}
Future<void> testIt() async {
    final names = getNames().onErrorRecoverWith(
        (error) {
            error.log();
            return 'Baz';
        },
    );
    await for(final name in names){
        name.log(); // Foo, Bar, Baz
    }
}

最后来看一下结果:

这里面有一个小注意的地方,log()是我自己封装的一个拓展

import 'dart:developer' as devtools show log;
extension Log on Object {
    void log() => devtools.log(toString());
}

以上就是Flutter Recovering Stream Errors小技巧的详细内容,更多关于Flutter Recovering Stream Errors的资料请关注编程网其它相关文章!

--结束END--

本文标题: FlutterRecoveringStreamErrors小技巧

本文链接: https://www.lsjlt.com/news/174583.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • FlutterRecoveringStreamErrors小技巧
    目录正文简单封装override bind()测试一下正文 你是否遇到过,出现异常的时候也需要给一个默认值,让程序可以继续运行下去? 一般的做法就是 一个达到try catch,然...
    99+
    2022-12-08
    Flutter Recovering Stream Errors Flutter Stream
  • JavaScript小技巧
    这篇文章主要介绍了 JavaScript小技巧,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1.判断数据类型使用 Object.protot...
    99+
    2022-10-19
  • Python3 小技巧
    完全个人总接 每个文件头部都可以加入这个,或者放到用单独一个文件,再import *。其实都一样,只需要一行false=False;true=True;none=null=None;hid=lambda o:"0x%X"%id(o) 作用...
    99+
    2023-01-31
    小技巧
  • Windows tips小技巧
    自从 Windows 2000 以及 Active Directory(Microsoft Windows 2000 操作系统的目录服务)面世以来,在与 Microsoft 合作伙伴交往的亲身经历中 ,我积累了许多这样的...
    99+
    2023-05-25
    Windows tips 技巧
  • python中requests小技巧
    关于 Python requests ,在使用中,总结了一些小技巧把,记录下。 1:保持请求之间的Cookies,我们可以这样做。 2:请求时,会加上headers,一般我们会写成这样 唯一不便的是之...
    99+
    2022-06-04
    小技巧 python requests
  • PyCharm使用小技巧
    本文部分内容参考了明宇李前辈的博客,原文请阅读 Pycharm的配置(背景颜色,字体,解释器等); 鼠标滑轮控制字体大小 部分参考了墨颜前辈的博客,原文请阅读 用鼠标滑轮控制代码字体大小; 感谢各位前辈的分享。除此之外,其余均为自己平时使...
    99+
    2023-01-31
    小技巧 PyCharm
  • Python小技巧 - string 和
    本文记录了 str 转 list 的多种情况的解决方法和 list 转 str 的解决方法。 目录 1. string to list 2. list to string 1. string to list 情况...
    99+
    2023-01-31
    小技巧 Python string
  • Windows98优化小技巧
    加快系统启动速度   1、用系统配置程序定制自动选项。   单击“开始”按钮,选择“运行”,在“打开”输入框内输入msconfig,单击&ldq...
    99+
    2023-05-23
    技巧 Windows98
  • windows8的50个使用小技巧 win8的50个小技巧大全
    1、锁屏启动之后,用户将首先看到Windows 8的锁屏界面,每当系统启动、恢复或登录的时候,锁屏就会出现。如果您使用的是触摸屏设备,那么用手指一扫然后输入密码就可以登录系统。如果不是触摸屏设备,那么就用鼠...
    99+
    2022-06-04
    小技巧 大全
  • phpcms小技巧:巧用碎片功能
    比如我有一块要显示这样的新闻标题,有的一行一个标题,有的一行两个标题,还有一行三个标题,而且要自定义标题的颜色,样式等,如果写到循环里面,你想想,是不是非常麻烦,而且不容易实现?你怎么判断这一行要显示一个还是两个呢,并且...
    99+
    2022-06-12
    phpcms 碎片
  • mysql小技巧有哪些
    这篇文章主要介绍mysql小技巧有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完! 1.  查看历史操作记录 1.1   linux操作系统查看历...
    99+
    2022-10-18
  • Spring框架的小技巧
    这篇文章主要介绍了Spring框架的小技巧,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获。下面让小编带着大家一起了解一下。Spring框架在面试中是一个必问点,里面究竟有哪些内容...
    99+
    2022-10-18
  • JavaScript有哪些小技巧
    这篇文章主要为大家展示了“JavaScript有哪些小技巧”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“JavaScript有哪些...
    99+
    2022-10-19
  • ES6小技巧有哪些
    小编给大家分享一下ES6小技巧有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1. 强制要求参数ES6提供了默认参数值机制,...
    99+
    2022-10-19
  • 优化MySQL的小技巧
    这篇文章主要介绍了优化MySQL的小技巧,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1.没有两个数据库或者应用程序是完全相同的。这里假设我...
    99+
    2022-10-18
  • Flutter基于DartUnwrappingMultipleOptional小技巧
    目录正文withAll函数测试一下正文 接收到这样一个需求,就是英文名字中firstName和lastName,其中任何一个为null,就返回Empty。 刚拿到需求,这不简单,i...
    99+
    2022-12-08
    Flutter Dart Multiple Optional Flutter Dart
  • Element-UI10个技巧小结
    目录el-scrollbar 滚动条el-upload 模拟点击el-select 下拉框选项过长el-input 首尾不能为空格el-input type=number 输入中文,...
    99+
    2022-11-12
  • 有哪些Python小技巧
    这篇文章主要讲解了“有哪些Python小技巧”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“有哪些Python小技巧”吧!集合开发人员常常忘记 Python 也有集合数据类型,大家都喜欢使用列...
    99+
    2023-06-15
  • 12条实用Win7 小技巧
    一、Windows键 + 空格键“Space” [作用]:透明化所有窗口,快速查看桌面(并不切换) [快捷键]:win+空格 [小结]:当你打开了很多程序窗口的时候,这招非常有用,而且桌面还会有...
    99+
    2023-05-25
    Win7 小技巧
  • MybatisGenerator具体使用小技巧
    目录1、问题描述2、解决方案2.1pom中指定mybatisgenerator插件2.2generatorConfig.xml2.3执行2.4总结1、问题描述 mybatis gen...
    99+
    2022-11-12
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作