[英]state not yield in Flutter bloc pattern
I am building a test app in flutter bloc patter using flutter_bloc package.我正在使用 flutter_bloc 包在 flutter bloc 模式中构建一个测试应用程序。 The problem is only the states of Event1 are rendered but the code executes in mapEventToState.
问题是仅呈现 Event1 的状态,但代码在 mapEventToState 中执行。 I think the problem is with the yield statement because on triggering the Event2 the corresponding print statements in mapEventToState Executes.
我认为问题出在 yield 语句上,因为在触发 Event2 时,mapEventToState 中的相应打印语句会执行。
The mapEventTOState function in page_bloc.dart page_bloc.dart中的mapEventTOState函数
Stream<PageState> mapEventToState(PageEvent event) async* {
print(event);
if (event is Event1) {
print(">> $event");
yield State10();
try {
await someAsyncFunction();
yield State11(message: "message");
print("reached 100");
} catch (e) {
yield State12();
}
} else if (event is Event2) {
yield State20();
try {
await someAyncFunction2();
yield State21();
} catch (e) {
yield State22(message: e.toString());
}
}
// TODO: implement mapEventToState
}
The page_state.dart is as follows: page_state.dart如下:
abstract class PageState extends Equatable {
@override
List<Object> get props => [];
}
class State10 extends PageState {}
class State11 extends PageState {}
class State12 extends PageState {}
class State20 extends PageState {}
class State21 extends PageState {}
class State22 extends PageState {}
The page_event.dart is given below page_event.dart在下面给出
abstract class PageEvent extends Equatable {
@override
// TODO: implement props
List<Object> get props => null;
}
class Event1 extends PageEvent {}
class Event2 extends PageEvent {}
The BlocBuilder is as follows: BlocBuilder如下:
child: BlocBuilder<PageBloc, PageState>(
builder: (context, state) {
print(state);
if (state is State10) {
return Text("State10");
} else if (state is State11) {
return Text("State11");
} else if (state is State12) {
return Text("State12");
} else if (state is State20) {
return Text("State20");
} else if (state is State21) {
return Text("State21");
} else if (state is State22) {
return Text("State22");
}
},
)
The floating action button in Scaffold is as follows: Scaffold 中的浮动动作按钮如下:
floatingActionButton: FloatingActionButton(
onPressed: () => pageBlocInstace2..add(Event2()),
child: Icon(Icons.done),
),
And another widget in the scaffold is as follows:脚手架中的另一个小部件如下:
GestureDetector(
onTap: () => pageBlocInstace1..add(Event1()),
child: Center(child: Text("Tap to here")));
This issue was due to the fact that the two events call separate bloc instance.这个问题是由于这两个事件调用了单独的 bloc 实例。
floatingActionButton: FloatingActionButton(
onPressed: () => pageBlocInstace..add(Event2()),
child: Icon(Icons.done),
),
GestureDetector(
onTap: () => pageBlocInstace..add(Event1()),
child: Center(child: Text("Tap to here")));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.