我试图显示基于块状态的文本,所以我决定使用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,
);
},
),
您应该使用BlocBuilder来完成该任务。构建器的目的是基于状态返回一个小部件。
BlocListener用于诸如路由或显示基于状态的零食栏等任务。当你想做一些基于状态的事情。
文档非常出色,请查看:
https://pub.dev/packages/flutter_bloc
此外,侦听器函数是一个void函数,因此当您返回文本小部件时,它将被丢弃。如果你身上有绒毛,你可能会得到一个警告。