总之,我希望“context.read().add(EnabledEvent())”能够从控制器本身或我可以用来从控制器触发事件并更新状态的其他替代方案工作:
class SplashCtrl extends GetxController {
@override
void onReady() {
User user = loadUser();
if (user.isExampleEnabled) {
context.read<ExampleBloc>().add(EnabledEvent());
}
}
我尝试的另一件事是:
ExampleBloc testBloc = ExampleBloc();
testBloc.add(TestEvent());
在控制器中,它似乎确实触发了事件,但 UI 不会随着状态更改而更新。我似乎真的需要上下文来改变这一点。有任何想法吗?
更多细节和背景:
我想不仅在页面本身中触发块事件,而且在页面的控制器中触发块事件!
因此,我的 flutter 应用程序中有页面,每个视图都有一个控制器,如下所示:
class SplashPage extends GetView<SplashCtrl> {
@override
Widget build(BuildContext context) {
Get.lazyPut(() => SplashCtrl());
return Scaffold(...);
}
}
SplashCtrl 是该页面的控制器。此启动视图页面是加载并准备就绪(基本上立即)时运行功能的第一个页面之一,例如检查用户是否登录并将其数据加载到应用程序,如下所示:
class SplashCtrl extends GetxController {
@override
void onReady() {
// run stuff here
}
我已经能够在页面中创建 lambda 函数并根据它们的功能触发事件,并像这样进行切换:
IconSwitchedButtonUi(
value: state.isExampleOn,
icon: Images.toggleIcon,
title: "Is Example enabled?",
onChanged: (value) {
if (value) {
context.read<ExampleBloc>().add(EnabledEvent());
} else {
context.read<ExampleBloc>().add(DisabledEvent());
}
},
),
但现在,如果用户的某个字段具有特定值,我需要一个 bloc 事件来触发并稍微更改状态。我怎么做?如何从控制器内触发事件? “context.read”不起作用,因为控制器没有上下文,或者有吗?