在 Cubit 函数调用后未执行 BlocListener
Posted
技术标签:
【中文标题】在 Cubit 函数调用后未执行 BlocListener【英文标题】:BlocListener not being executed after Cubit function call 【发布时间】:2021-09-05 22:43:22 【问题描述】:所以,我有一个带有 POST 数据功能的肘位。我有三个州,DataLoading
、DataError
和 DataLoaded
为我的肘。
当用户点击一个按钮时,我调用cubit中的函数。之后,我有一个 BlocListener 等待 Cubit 发出DataLoaded
状态。问题是监听器正在对状态变化做出反应。
Button(
text: 'Add',
onTap: ()
final data = _textController.text;
context.read<PostDataCubit>().post(data);
BlocListener<PostDataCubit, PostDataState>(
listener: (context, state)
if (state is DataLoaded)
// navigate to another route
else if (state is DataError)
// show error
,
);
),
我尝试在read()
调用中使用await
,但没有奏效。我如何对这里的状态变化做出反应?谢谢。
【问题讨论】:
你的意思是当状态更新时你的监听器没有反应? 是的。当我发出一个状态但没有发生时,应该采取一些行动。 【参考方案1】:这个BlocListener
没有监听,因为您在函数中添加了监听器,而不是在小部件树中添加它。将您的按钮包裹在 BlocConsumer
小部件中,它会正常工作。看看下面的代码。
BlocListener<PostDataCubit, PostDataState>(
listener: (context, state)
if (state is DataLoaded)
// navigate to another route
else if (state is DataError)
// show error
,
builder: (context, state)
return Button(
text: 'Add',
onTap: ()
final data = _textController.text;
context.read<PostDataCubit>().post(data);
);
,
),
【讨论】:
以上是关于在 Cubit 函数调用后未执行 BlocListener的主要内容,如果未能解决你的问题,请参考以下文章
成功执行 isCustomResponse() 后未调用 handleChallenge()