我知道我们可以在腕尺的某个状态下返回不同的小部件,但我们如何在状态下显示警报或其他交互:
BlocBuilder<LoginCubit, LoginState> (
builder: (context, LoginState loginState) {
if (loginState is LoginInitial) {
return Text("LoginInitial");
} else if (loginState is LoginLoading) {
return Text("LoginLoading");
} else if (loginState is LoginLoaded) {
return Text("LoginLoaded");
} else if (loginState is LoginError) {
return Text("LoginError");
} else {
return Container();
}
},
)
在LoginError中,我希望显示一个警报对话框。
2条答案
按热度按时间5cg8jx4n1#
您可以使用
BlocConsumer
,它同时包含builder
和listener
:builder
属性是您已经知道的小部件构建器回调listener
是状态改变时调用的回调函数,您可以在其中执行几乎任何操作。要实现更细粒度的控制,可以使用
buildWhen
和listenWhen
,如果它们返回true
,则分别触发builder
或listener
回调。例如,您可以看到我如何使用
BlocConsumer
来显示此处出现错误状态时的SnackBar
。别介意再检查一下类型
因为它可能是无用的(根据文档),我只是想确定这一点时,我没有使用
listenWhen
非常清楚。您可以在the docs中查看更多关于
BlocConsumer
的信息(不幸的是,我无法链接锚)。nue99wik2#
显示对话框、小吃栏、退出屏幕或导航到其他地方--这些任务应该在监听器中完成,如下所示:
这里我使用了带钩子的cubits。
useCubitListener()
是一个全局函数。在我的Flutter cubits + hooks tutorial中有更多关于这个的内容。