在我的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状态下,主题模式必须已经设置。有什么建议我可以这样做吗?
1条答案
按热度按时间j1dl9f461#
我相信您已将systemUiOverlayStyle添加为必需参数,我建议尝试此解决方案:
1.在SysUiCubit构造函数中,使systemUiOverlayStyle成为可选参数(无需传递“currentTheme:当前主题”)
1.在SysUiCubit contractor中,检查systemUiOverlayStyle参数是否为空,如果参数已满,则检查共享首选项,如果应用程序存储了最后一个主题(暗或亮),如果shareprefrance为空(主要是因为用户第一次打开应用程序),则强制使用基于系统主题的默认主题(存在检索活动主题的软件包或系统函数)。
1.每当你想改变主题时,调用块控制器并更新值(systemUiOverlayStyle)。
1.无需更改当前小部件的顺序
明白我的意思了就告诉我。