Cubit 函数调用后未执行 BlocListener
BlocListener not being executed after Cubit function call
所以,我有一个带有 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
,但没有用。我如何对这里的状态变化做出反应?谢谢。
此 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);
});
},
),
所以,我有一个带有 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
,但没有用。我如何对这里的状态变化做出反应?谢谢。
此 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);
});
},
),