Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 如何使用bloc在颤振中切换主题?_Flutter_Dart_Bloc_Flutter Bloc_Cubit - Fatal编程技术网

Flutter 如何使用bloc在颤振中切换主题?

Flutter 如何使用bloc在颤振中切换主题?,flutter,dart,bloc,flutter-bloc,cubit,Flutter,Dart,Bloc,Flutter Bloc,Cubit,我是新来的。我正在做一个应用程序与集团状态管理,可以改变作为系统主题的主题改变。现在它的工作很好,但我需要开关,可以覆盖的主题。我如何实现这一点?我通过观看youtube教程来制作这个应用程序。 不管怎样,这都是为了创建可以更改主题的开关 主题立体图 class ThemeCubit extends Cubit<ThemeState> { ThemeCubit() : super(ThemeState(themeMode: ThemeMode.light)) { upda

我是新来的。我正在做一个应用程序与集团状态管理,可以改变作为系统主题的主题改变。现在它的工作很好,但我需要开关,可以覆盖的主题。我如何实现这一点?我通过观看youtube教程来制作这个应用程序。 不管怎样,这都是为了创建可以更改主题的开关

主题立体图

class ThemeCubit extends Cubit<ThemeState> {
  ThemeCubit() : super(ThemeState(themeMode: ThemeMode.light)) {
    updateAppTheme();
  }

  void updateAppTheme() {
    final Brightness currentBrightness = AppTheme.currentSystemBrightness;
    currentBrightness == Brightness.light
        ? _setTheme(ThemeMode.light)
        : _setTheme(ThemeMode.dark);
  }

  void _setTheme(ThemeMode themeMode) {
    AppTheme.setStatusBarAndNavigationBarColor(themeMode);
    emit(ThemeState(themeMode: themeMode));
  }
}
void main() {
  Bloc.observer = AppBlocObserver();
  runApp(DevicePreview(
    builder: (context) => App(),
    enabled: false,
    plugins: [
      const ScreenshotPlugin(),
    ],
  ));
}

class App extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MultiBlocProvider(
      providers: [
        BlocProvider<ThemeCubit>(
          create: (context) => ThemeCubit(),
        ),
      ],
      child: MchatsApp(),
    );
  }
}

class MchatsApp extends StatefulWidget {
  const MchatsApp({
    Key key,
  }) : super(key: key);

  @override
  _MchatsAppState createState() => _MchatsAppState();
}

class _MchatsAppState extends State<MchatsApp> with WidgetsBindingObserver {
  @override
  void initState() {
    WidgetsBinding.instance.addObserver(this);
    super.initState();
  }

  @override
  void dispose() {
    WidgetsBinding.instance.removeObserver(this);
    super.dispose();
  }

  @override
  void didChangePlatformBrightness() {
    context.read<ThemeCubit>().updateAppTheme();
    super.didChangePlatformBrightness();
  }

  @override
  Widget build(BuildContext context) {
    return LayoutBuilder(
      builder: (context, constraints) {
        return OrientationBuilder(
          builder: (context, orientation) {
            SizerUtil().init(constraints, orientation);

            return MaterialApp(
              locale: DevicePreview.locale(context),
              builder: DevicePreview.appBuilder,
              title: Strings.appTitle,
              theme: AppTheme.lightTheme,
              darkTheme: AppTheme.darkTheme,
              themeMode: context.select(
                  (ThemeCubit themeCubit) => themeCubit.state.themeMode),
              debugShowCheckedModeBanner: false,
              initialRoute: AppRouter.root,
              onGenerateRoute: AppRouter.onGenerateRoute,
            );
          },
        );
      },
    );
  }
}
这是main.dart的代码

class ThemeCubit extends Cubit<ThemeState> {
  ThemeCubit() : super(ThemeState(themeMode: ThemeMode.light)) {
    updateAppTheme();
  }

  void updateAppTheme() {
    final Brightness currentBrightness = AppTheme.currentSystemBrightness;
    currentBrightness == Brightness.light
        ? _setTheme(ThemeMode.light)
        : _setTheme(ThemeMode.dark);
  }

  void _setTheme(ThemeMode themeMode) {
    AppTheme.setStatusBarAndNavigationBarColor(themeMode);
    emit(ThemeState(themeMode: themeMode));
  }
}
void main() {
  Bloc.observer = AppBlocObserver();
  runApp(DevicePreview(
    builder: (context) => App(),
    enabled: false,
    plugins: [
      const ScreenshotPlugin(),
    ],
  ));
}

class App extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MultiBlocProvider(
      providers: [
        BlocProvider<ThemeCubit>(
          create: (context) => ThemeCubit(),
        ),
      ],
      child: MchatsApp(),
    );
  }
}

class MchatsApp extends StatefulWidget {
  const MchatsApp({
    Key key,
  }) : super(key: key);

  @override
  _MchatsAppState createState() => _MchatsAppState();
}

class _MchatsAppState extends State<MchatsApp> with WidgetsBindingObserver {
  @override
  void initState() {
    WidgetsBinding.instance.addObserver(this);
    super.initState();
  }

  @override
  void dispose() {
    WidgetsBinding.instance.removeObserver(this);
    super.dispose();
  }

  @override
  void didChangePlatformBrightness() {
    context.read<ThemeCubit>().updateAppTheme();
    super.didChangePlatformBrightness();
  }

  @override
  Widget build(BuildContext context) {
    return LayoutBuilder(
      builder: (context, constraints) {
        return OrientationBuilder(
          builder: (context, orientation) {
            SizerUtil().init(constraints, orientation);

            return MaterialApp(
              locale: DevicePreview.locale(context),
              builder: DevicePreview.appBuilder,
              title: Strings.appTitle,
              theme: AppTheme.lightTheme,
              darkTheme: AppTheme.darkTheme,
              themeMode: context.select(
                  (ThemeCubit themeCubit) => themeCubit.state.themeMode),
              debugShowCheckedModeBanner: false,
              initialRoute: AppRouter.root,
              onGenerateRoute: AppRouter.onGenerateRoute,
            );
          },
        );
      },
    );
  }
}
void main(){
Bloc.observer=AppBlocObserver();
runApp(DevicePreview(
生成器:(上下文)=>App(),
启用:false,
插件:[
const ScreenshotPlugin(),
],
));
}
类应用程序扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回多BlocProvider(
供应商:[
BlocProvider(
create:(context)=>ThemeCubit(),
),
],
子项:MchatsApp(),
);
}
}
类MchatsApp扩展StatefulWidget{
康斯特麦克哈塔普({
关键点,
}):super(key:key);
@凌驾
_MchatsAppState createState()=>\u MchatsAppState();
}
类MchatsAppState使用WidgetsBindingObserver扩展状态{
@凌驾
void initState(){
WidgetsBinding.instance.addObserver(这个);
super.initState();
}
@凌驾
无效处置(){
WidgetsBinding.instance.removeObserver(此);
super.dispose();
}
@凌驾
void didchangeflatformbrightness(){
context.read().updateAppTheme();
super.didChangePlatformBrightness();
}
@凌驾
小部件构建(构建上下文){
返回布局生成器(
生成器:(上下文、约束){
返回方向生成器(
生成器:(上下文、方向){
SizerUtil().init(约束、方向);
返回材料PP(
locale:DevicePreview.locale(上下文),
生成器:DevicePreview.appBuilder,
标题:Strings.appTitle,
主题:AppTheme.lightTheme,
暗色调:AppTheme.darkTheme,
主题:context.select(
(ThemeCubit ThemeCubit)=>ThemeCubit.state.themeMode),
debugShowCheckedModeBanner:false,
initialRoute:AppRouter.root,
onGenerateRoute:AppRouter.onGenerateRoute,
);
},
);
},
);
}
}
是的,您可以

在Switch小部件的onChanged函数中,在cubit中调用updateAppTheme()函数

context.read<ThemeCubit>().updateAppTheme();
context.read().updateaptheme();
Builder(
生成器:(上下文){
bool isDark=context.select(
(ThemeCubit ThemeCubit)=>ThemeCubit.state.themmode)==themmode.dark?true:false;
返回开关(值:isDark,一旦更改:(值){
context.read().updateAppTheme();}
);
})

它不工作。开关(activeColor:Colors.black,value:false,onChanged:(value){ScaffoldMessenger.of(context).showSnackBar(SnackBar(内容:Text('Theme Change'),持续时间:持续时间(毫秒:700),);setState((){context.read().updateAppTheme();_switchValue=value;});},),onChanged函数的值总是false,因为它没有stateWait。我尝试为您的problem@SunnyRahi尝试新代码它显示了这一点,但主题没有改变。I/flatter(5260):onChange--ThemeCubit,Change{currentState:Instance'themstate',nextState:Instance'themstate'}