首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >颤振.listen多次调用

颤振.listen多次调用
EN

Stack Overflow用户
提问于 2020-04-13 18:30:06
回答 1查看 2.9K关注 0票数 0

我在我的项目中使用上传器

存储库

代码语言:javascript
复制
try {
      final result = await InternetAddress.lookup('google.com');
      if (result.isNotEmpty && result[0].rawAddress.isNotEmpty) {
        final taskId = await uploader.enqueue(
            url:
                'https://xxxx',
            files: files,
            data: {
             ....
            },
            method: UploadMethod.POST,
            showNotification: true,
            tag: title);

        final subscription = uploader.result.listen((result) async {
          print("response " + result.response);
        }, onError: (ex, stacktrace) {
          print(ex.toString());
        });
      }
    } catch (e) {
      ...
    }
  }

当我第一次调用它时,uploader.result.listen只打印一次。但是如果我再次调用此方法,uploader.result.listen将调用两次。为什么?

编辑

我已将代码更改为

PageA

代码语言:javascript
复制
  StreamSubscription<UploadTaskResponse> _subscription;
  FlutterUploader uploader = FlutterUploader();

  @override
  void initState() {
    super.initState();

    _subscription = uploader.result.listen(
      (result) {

         // insert result to database
           .....
      },
      onError: (ex, stacktrace) {
        // ... code to handle error
      },
    );

  }

  void dispose() {
    super.dispose();
    _subscription.cancel();
    _defectBloc.dispose();
  }

在A页,它有floatingActionButton。当单击浮动操作按钮时,它将打开B页。我将把uploader param传递给PageB和bloc,这样它就可以监听uploader。如果我在init页面上可以插入到本地数据库中的数据。如果我退出应用程序,我如何让插入也能工作呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-13 19:10:20

当您调用uploader.result.listen时,它每次都会添加一个订阅,如果您调用了n次,就会添加n个订阅。

要解决此问题,您需要使用取消()方法取消以前的订阅,或者只需添加一次订阅(在initState中,在dispose方法中为cancel )。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61194277

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档