Функция сборки вернула ноль. Виджет, который нарушает работу: StreamBuilder <Response> - PullRequest
0 голосов
/ 04 сентября 2018

Я новичок во Флаттере и пытаюсь выполнить простую вещь: Я хочу создать функциональность регистрации, используя шаблон BLoC и потоки.

Для пользовательского интерфейса у меня есть степпер , который на самом последнем шаге должен запустить запрос к серверу с собранными данными.

Полагаю, у меня все работает до части StreamBuilder. StreamBuilders предназначены для возврата виджетов, однако в моем случае мне не нужно возвращать виджеты, в случае успеха я хочу перейти к следующему экрану, в противном случае в ModalBottomSheet будет отображаться ошибка.
StreamBuilder жалуется, что виджет не возвращается.

Есть ли что-то еще, что можно было бы использовать на стороне просмотра для воздействия на события из потока?

Или есть лучший подход к проблеме?

1 Ответ

0 голосов
/ 04 сентября 2018

Если вам не нужно ничего визуализировать, не используйте StreamBuilder для начала. StreamBuilder - вспомогательный виджет, используемый для отображения содержимого Stream.

То, что вы хотите, отличается. Поэтому вы можете просто прослушать Stream вручную.

Будет делать следующее:

class Foo<T> extends StatefulWidget {
  Stream<T> stream;

  Foo({this.stream});

  @override
  _FooState createState() => _FooState<T>();
}

class _FooState<T> extends State<Foo<T>> {
  StreamSubscription streamSubscription;

  @override
  void initState() {
    streamSubscription = widget.stream.listen(onNewValue);
    super.initState();
  }

  void onNewValue(T event) {
    Navigator.of(context).pushNamed("my/new/route");
  }


  @override
  void dispose() {
    streamSubscription.cancel();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Container();
  }
}
...