使用 BloC 切换主题。我做得对吗?

Switching theme with BloC. Am I doing right?

您好,我正在尝试使用 BloC 更改主题。但不确定这是否是最佳做法。

这是我的switch_theme_cubit.dart

class ThemeCubit extends Cubit<ThemeData> {
  ThemeCubit() : super(AppTheme.lightTheme);

  void switchTheme() {
    state == AppTheme.lightTheme
        ? emit(AppTheme.darkTheme)
        : emit(AppTheme.lightTheme);
  }
}

MaterialApp部分main.dart

class App extends StatelessWidget {
  const App({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return MultiBlocProvider(
      providers: [
        BlocProvider(create: (context) => InternetConnectivityCubit()),
        BlocProvider(create: (context) => CounterCubit()),
        BlocProvider(create: (context) => ThemeCubit())
      ],
      child: BlocBuilder<ThemeCubit, ThemeData>(
        builder: (context, state) {
          return MaterialApp(
            title: Strings.appTitle,
            theme: state,
            debugShowCheckedModeBanner: false,
            initialRoute: AppRouter.homeScreen,
            onGenerateRoute: AppRouter.onGenerateRoute,
          );
        },
      ),
    );
  }
}

看起来像this(自述文件中gif 的第一部分)。我做得对吗?

是的,从技术上讲,这是绝对正确的。

我建议您将模式设置为 three-state。浅色、深色和系统默认值。

当我将我的设备设置为深色模式时,我希望我的所有应用程序都默认进入深色模式。我不想打开所有 37 个应用程序并找到设置并单独切换它们。默认应该是,如果我没有明确设置它,它将采用我在系统设置中设置的值。