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

时间:2019-01-24 23:18:51

标签: asynchronous dart flutter rxdart

我试图在关闭屏幕后从屏幕取回数据,然后将其添加到我的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');
  }

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

1 个答案:

答案 0 :(得分:0)

您不应将两种使用期货的方式结合起来。

  1. 您可以使用async / await方法。

    kernel_motion_blur = np.zeros((size, size))
    kernel_motion_blur[int(:, (size-1)/2)] = np.ones(size)
    kernel_motion_blur = kernel_motion_blur / size
    
  2. 您可以使用“老式”方法。

    Future<void> _getDataFromSomeScreen(context) async {
      final data = await Navigator.push(
            context, MaterialPageRoute(builder: (context) => SomeScreen()));
      _bloc.streamController.sink.add(data);
    }