BlocListener 不会在状态更改时构建小部件

时间:2021-02-21 05:10:15

标签: flutter flutter-bloc

我试图根据 bloc 的状态显示文本,因此我决定使用 BlocListener,因为我认为这是小部件的主要目的。我想在状态为 AuthFailed 时显示文本。

BlocListener

BlocListener<AuthBloc, AuthState>(
  listener: (context, state) {
    if (state is AuthFailed)
      return Text(
        'Oops, Invalid Credentials.',
        style: TextStyle(color: Colors.red),
      );
  },
  child: Container(),
),

问题是,当状态为 AuthFailed 时文本不会出现,但如果我使用 BlocBuilder,它会起作用。

BlocBuilder

BlocBuilder<AuthBloc, AuthState>(
  builder: (context, state) {
    if (state is AuthFailed)
      return Text(
        'Oops, Invalid Credentials.',
        style: TextStyle(color: Colors.red),
      );
    return Container(
      width: 0,
      height: 0,
    );
  },
),

1 个答案:

答案 0 :(得分:2)

您应该使用 BlocBuilder 来完成该任务。构建器的目的是根据状态返回一个小部件。

BlocListener 用于基于状态的任务,例如路由或显示小吃店等。当您想根据状态做某事时。

文档非常好,请查看:

https://pub.dev/packages/flutter_bloc

此外,侦听器函数是一个空函数,因此当您返回文本小部件时,它会被丢弃。如果您有 linting,您可能会收到警告。