【问题标题】:show alert on cubit state in flutter在颤动中显示肘部状态警报
【发布时间】:2021-02-01 23:11:21
【问题描述】:

我知道我们可以在特定的 cubit 状态下返回不同的小部件,但是我们如何在状态上显示警报或其他交互:

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 中我想显示一个警告对话框。

【问题讨论】:

  • 你不能在返回Text("LoginError")之前调用函数showDialog(AlertDialog dialog)吗?返回部分应该构建您正在显示的小部件,而 showDialog 在另一层构建对话框。
  • 不,它返回了一个错误,它只需要一个小部件。

标签: flutter dart bloc flutter-bloc


【解决方案1】:

您可以使用BlocConsumer,它同时具有builderlistener

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

对于更细粒度的控制,您可以使用buildWhenlistenWhen,如果它们返回true,则分别触发builderlistener 回调。

例如,您可以看到我是如何使用BlocConsumer 在出现错误状态时显示SnackBar here

不要介意仔细检查类型

if (state is RegionalReportLoadingError)

因为它可能没用(根据文档),我只是想确定一下,当我没有很清楚 listenWhen 的用法时。

您可以在the docs 中查看更多关于BlocConsumer 的信息(很遗憾我无法链接锚点)。

【讨论】:

  • 我知道,这太棒了! :D
猜你喜欢
  • 2021-08-09
  • 2021-06-01
  • 2021-05-26
  • 1970-01-01
  • 2021-08-13
  • 1970-01-01
  • 2021-03-19
  • 1970-01-01
  • 2019-11-15
相关资源
最近更新 更多