更新 找到了onChange覆盖方法后,似乎更新的状态没有被发出 #困惑
更新2 进一步调试显示,当尝试发出更新的状态时,StreamController似乎已关闭。
出于某种原因,我的应用程序中有一个BlocBuilder在Cubit发出之后拒绝重新绘制,我无论如何都无法弄清原因,在运行或调试时没有错误,状态数据正在更新并传递到emit中。
目前,它是一个挂钩小部件,但我已经尝试将其设置为Stateless、Stateful,在effect中调用cubit方法、在context.bloc上调用等。
我尝试将其设置为consumer,但什么也没进入listen,甚至尝试过messing with listenWhen和buildWhen,但没有任何迹象表明这个widget为什么不会构建。
它呈现出加载状态,那就是它的终点。
Widget:
class LandingView extends HookWidget {
@override
Widget build(BuildContext context) {
final hasError = useState<bool>(false);
return Scaffold(
key: const Key(LANDING_VIEW_KEY),
body: BlocProvider<CoreCubit>(
create: (_) => sl<CoreCubit>()..fetchDomainOptions(),
child: BlocBuilder<CoreCubit, CoreState>(
builder: (context, state) {
switch (state.status) {
case CoreStatus.loaded:
return LandingViewLoaded();
case CoreStatus.error:
return LandingViewError();
case CoreStatus.loading:
default:
return AppIcon();
}
},
),
),
);
}
}
立方体法:
Future<void> fetchDomainOptions() async {
final inputEither = await getDomainOptions();
return inputEither.fold(
_handleFailure,
(options) {
emit(state.copyWith(
domainOptions: options,
status: CoreStatus.loaded,
));
},
);
}
我有几个其他的小部件,它们使用冻结的数据类工作,并且使用相同的状态键逻辑而没有任何问题,我甚至试图将一个lastUpdated时间戳键添加到它上面以进行更多数据更改,但在初始状态下,domainOptions为null,status为CoreStatus.loading,这应该已经足以触发UI更新。
TIA