从屏幕返回数据并将其添加到流中

问题描述 投票:0回答:1

我试图在关闭后从屏幕上恢复数据,然后将其添加到我的BLoC中的流控制器中。但是,当我尝试使用_bloc.streamController.value检索该值时,它为null。流控制器是BehaviorSubject。

  void _getDataFromSomeScreen(context) async {
    final data = await Navigator.push(
            context, MaterialPageRoute(builder: (context) => SomeScreen()))
        .then((onValue) {});

    _bloc.streamController.sink.add(data);
  }

我尝试过的其他选项包括在then语句中调用sink.add,将我的bloc传递给函数。

如果我删除'async'和'await'并且只是硬编码一个值,它似乎工作。为什么异步导致我的数据无法保存到我的流控制器?

  void _getDataFromSomeScreen(context) {
   _bloc.streamController.sink.add('some data');
  }

如何从屏幕返回数据并将其添加到流控制器?

asynchronous dart flutter rxdart
1个回答
0
投票

你不应该将两种与Futures合作的方式结合起来。

  1. 您可以使用async / await方法。 Future<void> _getDataFromSomeScreen(context) async { final data = await Navigator.push( context, MaterialPageRoute(builder: (context) => SomeScreen())); _bloc.streamController.sink.add(data); }
  2. 你可以使用“旧时尚”的方法。 void _getDataFromSomeScreen(context) { Navigator.push( context, MaterialPageRoute(builder: (context) => SomeScreen())) .then((data) => _bloc.streamController.sink.add(data)); }
© www.soinside.com 2019 - 2024. All rights reserved.