Вернуть данные с экрана и добавить их в поток - PullRequest
0 голосов
/ 25 января 2019

Я пытаюсь вернуть данные с экрана после его закрытия, а затем добавить их в контроллер потока в моем 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);
  }

Другие варианты, которые я пробовал, включают вызов sink.add внутри оператора then, передавая мой блок в функцию.

Если я уберу 'async' и 'await' и просто жестко закодирую значение, оно, похоже, будет работать. Почему из-за асинхронности мои данные не сохраняются на контроллере потока?

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

Как я могу вернуть данные с экрана и добавить их в мой потоковый контроллер?

1 Ответ

0 голосов
/ 19 апреля 2019

Вам не следует сочетать 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));
    }
    
...