欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Flutter Recovering Stream Errors小技巧

 更新時(shí)間:2022年12月08日 14:52:15   作者:程序員界的小學(xué)生  
這篇文章主要為大家介紹了Flutter Recovering Stream Errors小技巧,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

正文

你是否遇到過,出現(xiàn)異常的時(shí)候也需要給一個(gè)默認(rèn)值,讓程序可以繼續(xù)運(yùn)行下去?

一般的做法就是 一個(gè)達(dá)到try catch,然后在finally里面做一個(gè)處理。

今天我嘗試換一個(gè)思路,簡(jiǎn)單的封裝一下

簡(jiǎn)單封裝

首先定義一個(gè)stream轉(zhuǎn)換器,為了處理error handler。

如果onError不為空,就將出現(xiàn)錯(cuò)誤添加到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來捕獲錯(cuò)誤。如果出現(xiàn)錯(cuò)誤,我們調(diào)用handler,如果我們得到一個(gè)返回值,就將他發(fā)送到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;
}

最后我們?cè)赟tream上面創(chuàng)建一個(gè)拓展,它允許我們輕松的使用我們的流轉(zhuǎn)換器

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

測(cè)試一下

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
    }
}

最后來看一下結(jié)果:

這里面有一個(gè)小注意的地方,log()是我自己封裝的一個(gè)拓展

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

以上就是Flutter Recovering Stream Errors小技巧的詳細(xì)內(nèi)容,更多關(guān)于Flutter Recovering Stream Errors的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Android 刪除指定包名的App實(shí)例代碼

    Android 刪除指定包名的App實(shí)例代碼

    這篇文章主要介紹了Android 刪除指定包名的App實(shí)例代碼,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2017-07-07
  • Android仿知乎懸浮功能按鈕FloatingActionButton效果

    Android仿知乎懸浮功能按鈕FloatingActionButton效果

    前段時(shí)間在看屬性動(dòng)畫,恰巧這個(gè)按鈕的效果可以用屬性動(dòng)畫實(shí)現(xiàn),下面通過本文給大家分享adroid仿知乎懸浮功能按鈕FloatingActionButton效果,需要的朋友參考下吧
    2017-04-04
  • Android的廣播Receiver動(dòng)態(tài)注冊(cè)和靜態(tài)注冊(cè)示例

    Android的廣播Receiver動(dòng)態(tài)注冊(cè)和靜態(tài)注冊(cè)示例

    本篇文章主要介紹了Android的廣播Receiver動(dòng)態(tài)注冊(cè)和靜態(tài)注冊(cè)示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-02-02
  • Android TimePicker 直接輸入的問題解決方案

    Android TimePicker 直接輸入的問題解決方案

    這篇文章主要介紹了Android TimePicker 直接輸入的問題解決方案的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • 解決Android 6.0獲取wifi Mac地址為02:00:00:00:00:00問題

    解決Android 6.0獲取wifi Mac地址為02:00:00:00:00:00問題

    這篇文章主要介紹了Android 6.0獲取wifi Mac地址為02:00:00:00:00:00的解決方法,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2017-11-11
  • Android RecyclerView實(shí)現(xiàn)吸頂動(dòng)態(tài)效果流程分析

    Android RecyclerView實(shí)現(xiàn)吸頂動(dòng)態(tài)效果流程分析

    RecyclerView是Android一個(gè)更強(qiáng)大的控件,其不僅可以實(shí)現(xiàn)和ListView同樣的效果,還有優(yōu)化了ListView中的各種不足。其可以實(shí)現(xiàn)數(shù)據(jù)縱向滾動(dòng),也可以實(shí)現(xiàn)橫向滾動(dòng)(ListView做不到橫向滾動(dòng))。接下來講解RecyclerView的用法
    2022-12-12
  • Android Volley框架使用源碼分享

    Android Volley框架使用源碼分享

    這篇文章主要為大家分享了詳細(xì)的Android Volley框架使用流程源碼,具有參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-05-05
  • 深入淺析Android手機(jī)衛(wèi)士保存密碼時(shí)進(jìn)行md5加密

    深入淺析Android手機(jī)衛(wèi)士保存密碼時(shí)進(jìn)行md5加密

    一般的手機(jī)沒有root權(quán)限,進(jìn)不去data/data目錄,當(dāng)手機(jī)刷機(jī)了后,擁有root權(quán)限,就可以進(jìn)入data/data目錄,查看我們保存的密碼文件,因此我們需要對(duì)存入的密碼進(jìn)行MD5加密,接下來通過本文給大家介紹Android手機(jī)衛(wèi)士保存密碼時(shí)進(jìn)行md5加密,需要的朋友一起學(xué)習(xí)吧
    2016-04-04
  • Android 中WallpaperManager用法實(shí)例

    Android 中WallpaperManager用法實(shí)例

    這篇文章主要介紹了Android 中WallpaperManager用法實(shí)例的相關(guān)資料,希望通過本文能幫助到大家實(shí)現(xiàn)這樣的功能,需要的朋友可以參考下
    2017-09-09
  • 詳解kotlin中::雙冒號(hào)的使用

    詳解kotlin中::雙冒號(hào)的使用

    在?Kotlin?中?,?::?雙冒號(hào)操作符?的作用是獲取類,對(duì)象,函數(shù),屬性的?類型對(duì)象引用,這篇文章主要介紹了詳解kotlin中::雙冒號(hào)的使用,需要的朋友可以參考下
    2023-04-04

最新評(píng)論