【发布时间】:2022-01-01 19:02:59
【问题描述】:
在我的第一个屏幕上,我填写了表格,然后单击下一步按钮,它将 SubmitDataEvent() 添加到该集团。然后,BolcListner 列表和 SuccessSate 导航到下一个屏幕。
在第二个屏幕上,当我单击后退按钮时,它会导航到上一个屏幕。之后,当我更改表单上的用户输入数据并再次单击下一步按钮时,现在 SubmitDataEvent() 没有添加。
我更喜欢一些与此相关的资源,我理解问题是状态位于SuccessSate 并且不会更改为InitialState。所以在dispose()我用bloc.close();
@override
void dispose() {
bloc.close();
super.dispose();
}
但是,它仍然无法正常工作。另外,我尝试使用此代码
@override
void dispose() {
bloc.emit(InitialState);
bloc.close();
super.dispose();
}
还是不行。
我用它在屏幕之间导航:
Navigator.popAndPushNamed()
我想做的是:
在第一个屏幕上,当单击下一个按钮 SubmitDataEvent() 添加到该集团,它在SuccessState 它导航到下一个屏幕。当我单击第二页上的后退按钮时,它会再次导航到第一个屏幕。现在,当我单击第一个屏幕上的下一步按钮时 我想再次运行所有 bloc 进程。
第一个和第二个屏幕没有依赖关系。
首屏代码:
...
@override
void initState() {
super.initState();
bloc = injection<SubmitPersonalDetailsBloc>();
EasyLoading.addStatusCallback((status) {
print('EasyLoading Status $status');
if (status == EasyLoadingStatus.dismiss) {
_timer?.cancel();
}
});
}
@override
void dispose() {
_scrollController.dispose();
bloc.close();
super.dispose();
}
@override
Widget buildView(BuildContext context) {
return Scaffold(
body: BlocProvider<SubmitPersonalDetailsBloc>(
create: (_) => bloc,
child: BlocListener<SubmitPersonalDetailsBloc,
BaseState<PersonalDetailsState>>(
listener: (context, state) {
if (state is LoadingSubmitPersonalDetailsState) {
EasyLoading.show(status: 'Submitting Data');
}
if (state is SubmitPersonalDetailsSuccessState) {
setState(() {
submitPersonalDetailsResponseEntity =
state.submitPersonalDetailsResponseEntity;
});
if (submitPersonalDetailsResponseEntity!.responseCode == "00") {
EasyLoading.showSuccess('Done!');
//Navigate next screen
EasyLoading.dismiss();
}
} else if (state is SubmitPersonalDetailsFailedState) {
EasyLoading.showError(state.error); }
},
....
【问题讨论】:
-
你在哪里创建你的集团?
-
拜托,分享块代码sn-p。
-
我在页面顶部使用了 bloc provider
-
尝试使用 Navigator.pushNamed() 或 Navigator.pushReplacementNamed() 进行导航
-
@Poran 我添加了代码
标签: flutter dart bloc state-management flutter-bloc