0

我试图在屏幕关闭后从屏幕取回数据,然后将其添加到我的 BLoC 中的流控制器。但是,当我尝试使用 _bloc.streamController.value 检索值时,它为空。流控制器是一个 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 传递给函数。

如果我删除“异步”和“等待”并硬编码一个值,它似乎可以工作。为什么异步导致我的数据无法保存到我的流控制器?

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

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

4

1 回答 1

0

您不应该结合使用 Futures 的 2 种方式。

  1. 您可以使用异步/等待方法。

    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));
    }
    
于 2019-04-19T08:35:14.590 回答