У меня есть проблема / вопрос, касающийся блока блока с флаттером.В настоящее время я запускаю свое приложение, как это
class _MyAppState extends State<MyApp> {
@override
Widget build(BuildContext context) {
return BlocProvider(
bloc: MyBloc(),
child: MaterialApp(
title: "MyApp",
home: MyHomePage(),
routes: {
'/homePage': (context) => MyHomePage(),
'/otherPage': (context) => OtherPage(),
'/otherPage2': (context) => OtherPage2(),
...
},
));
, чтобы я мог получить / получить доступ к myBloc, как
myBloc = BlocProvider.of(context) as MyBloc;
, и данные, представленные в состоянии, как
BlocBuilder<MyBlocEvent, MyObject>(
bloc: myBloc,
builder: (BuildContext context, MyObject myObject) {
....
var t = myObject.data;
....
myBloc.onFirstEvent();
...
};
везде, где мне это нужно.
MyBloc реализован так:
abstract clas MyBlocEvent {}
class FirstEvent extends MyBlocEvent {}
class SecondEvent extends MyBlocEvent {}
class MyBloc extends Bloc<MyBlocEvent , MyObject>
void onFirstEvent()
{
dispatch(FirstEvent());
}
void onSecondEvent()
{
dispatch(SecondEvent());
}
@override
Stream<MyObject> mapEventToState( MyObject state, MyBlocEvent event) async* {
if (event is FirstEvent) {
state.data = "test1";
}
else if (event is SecondEvent) {
state.otherData = 5;
}
yield state;
}
Проблема, с которой я столкнулся, заключается в том, что, как только я изменяю значения состояния и вызываю
Navigator.pop(context)
Чтобы вернуться в текущий стек, я ничего не могу изменить, это состояние больше, потому что основной поток, кажется, закрыт.Сбой с сообщением:
Было сгенерировано другое исключение: Плохое состояние: невозможно добавить новые события после вызова close "
Теперь это происходит только после того, как я вызову pop. Еслия только нажимаю на новые экраны, я могу без проблем менять данные о состоянии без проблем.
Я делаю что-то не так в отношении навигации здесь или есть что-то еще, что я не уловил относительно флаттера или самого шаблона блока?