Flutter时腕式状态显示告警

1dkrff03  于 2023-01-06  发布在  Flutter
关注(0)|答案(2)|浏览(113)

我知道我们可以在腕尺的某个状态下返回不同的小部件,但我们如何在状态下显示警报或其他交互:

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中,我希望显示一个警报对话框。

5cg8jx4n

5cg8jx4n1#

您可以使用BlocConsumer,它同时包含builderlistener

  • builder属性是您已经知道的小部件构建器回调
  • listener是状态改变时调用的回调函数,您可以在其中执行几乎任何操作。

要实现更细粒度的控制,可以使用buildWhenlistenWhen,如果它们返回true,则分别触发builderlistener回调。
例如,您可以看到我如何使用BlocConsumer来显示此处出现错误状态时的SnackBar
别介意再检查一下类型

if (state is RegionalReportLoadingError)

因为它可能是无用的(根据文档),我只是想确定这一点时,我没有使用listenWhen非常清楚。
您可以在the docs中查看更多关于BlocConsumer的信息(不幸的是,我无法链接锚)。

nue99wik

nue99wik2#

显示对话框、小吃栏、退出屏幕或导航到其他地方--这些任务应该在监听器中完成,如下所示:

useCubitListener<BookDetailsCubit, BookDetailsPageState>(cubit, (cubit, state, context) {
  state.maybeWhen(
    saveBook: () => context.router.pop<bool>(true),
    deleteBook: () => context.router.pop<bool>(true),
    orElse: () => null,
  );
}, listenWhen: (state) => (state is BookDetailsPageSaveBook || state is BookDetailsPageDeleteBook));

这里我使用了带钩子的cubits。useCubitListener()是一个全局函数。在我的Flutter cubits + hooks tutorial中有更多关于这个的内容。

相关问题