Flutter BLoC我需要主题作为初始值

sr4lhrrt  于 2023-01-18  发布在  Flutter
关注(0)|答案(1)|浏览(121)

在我的app.dart中,我有我的BlocProviders:

return MultiBlocProvider(
        providers: [      
           BlocProvider(
            create: (context) => SysUiCubit(context: context, "currentTheme: currentTheme"),
          ), child: MaterialApp(
      theme: AppTheme.lightTheme.copyWith(brightness: Brightness.light),
      darkTheme: AppTheme.darkTheme.copyWith(brightness: Brightness.dark),
      themeMode: themeService.getSysMode ? ThemeMode.system : (themeService.getDarkMode ? ThemeMode.dark : ThemeMode.light),

在我的BlocProviders之后我有MaterialApp。问题是:对于SysUiCubit,我需要当前主题的状态,就像我试图在引号内可视化一样。最简单的方法是在我的BlocProvider之前使用MaterialApp,但我认为这是不可能的--不是吗?要理解用例:在我的SysUiCubit中,我有一个

factory SysUiState.initial(BuildContext context){
    return  const SysUiState(systemUiOverlayStyle: SystemUiOverlayStyle.dark);
  }

在这里我想添加一个依赖于当前主题的Overlaystyle。所以你可以猜到,要实现在init状态下,主题模式必须已经设置。有什么建议我可以这样做吗?

j1dl9f46

j1dl9f461#

我相信您已将systemUiOverlayStyle添加为必需参数,我建议尝试此解决方案:
1.在SysUiCubit构造函数中,使systemUiOverlayStyle成为可选参数(无需传递“currentTheme:当前主题”)
1.在SysUiCubit contractor中,检查systemUiOverlayStyle参数是否为空,如果参数已满,则检查共享首选项,如果应用程序存储了最后一个主题(暗或亮),如果shareprefrance为空(主要是因为用户第一次打开应用程序),则强制使用基于系统主题的默认主题(存在检索活动主题的软件包或系统函数)。
1.每当你想改变主题时,调用块控制器并更新值(systemUiOverlayStyle)。
1.无需更改当前小部件的顺序
明白我的意思了就告诉我。

相关问题