我试图根据 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,
);
},
),
答案 0 :(得分:2)
您应该使用 BlocBuilder 来完成该任务。构建器的目的是根据状态返回一个小部件。
BlocListener 用于基于状态的任务,例如路由或显示小吃店等。当您想根据状态做某事时。
文档非常好,请查看:
https://pub.dev/packages/flutter_bloc
此外,侦听器函数是一个空函数,因此当您返回文本小部件时,它会被丢弃。如果您有 linting,您可能会收到警告。