zoukankan      html  css  js  c++  java
  • fluter使用---->动态更换Theme

    create enum

    enum AppTheme { Light, Dark }
    
    final appThemeData = {
      AppTheme.Light: ThemeData(
        brightness: Brightness.light,
        textTheme: GoogleFonts.latoTextTheme(),
      ),
      AppTheme.Dark: ThemeData(
        brightness: Brightness.dark,
        textTheme: GoogleFonts.latoTextTheme(),
      ),
    };
    

    create bloc for the theme changing

    • Theme state:
    class AppThemeState extends Equatable {
      final AppTheme appTheme;
    
      AppThemeState({this.appTheme});
    
      @override
      List<Object> get props => [appTheme];
    }
    
    • Theme event:
    abstract class AppThemeEvent extends Equatable {
      const AppThemeEvent();
    
      @override
      List<Object> get props => [];
    }
    
    class AppThemeChanged extends AppThemeEvent {
      final bool isLight;
    
      const AppThemeChanged({this.isLight});
    
      @override
      List<Object> get props => [isLight];
    }
    
    • Theme bloc:
    class AppThemeBloc extends Bloc<AppThemeEvent, AppThemeState> {
      @override
      AppThemeState get initialState => AppThemeState(appTheme: AppTheme.Light);
    
      @override
      Stream<AppThemeState> mapEventToState(AppThemeEvent event) async* {
        if (event is AppThemeChanged) {
          if (event.isLight) {
            PrefsUtil.saveIsLightTheme(true);
            yield AppThemeState(appTheme: AppTheme.Light);
          } else {
            PrefsUtil.saveIsLightTheme(false);
            yield AppThemeState(appTheme: AppTheme.Dark);
          }
        }
      }
    }
    

    main screen

    class _MainAppState extends State<MainApp> {
      @override
      Widget build(BuildContext context) {
        return BlocProvider<AppThemeBloc>(
          create: (context) => AppThemeBloc(),
          child: BlocBuilder<AppThemeBloc, AppThemeState>(
            builder: (BuildContext context, AppThemeState state) {
              return MaterialApp(
                home: RouterHelper.splashBuilder(context),
                theme: appThemeData[state.appTheme],
              );
            },
          ),
        );
      }
    }
    

    create the theme

    BlocProvider.of<AppThemeBloc>(context).add(AppThemeChanged(isLight: !PrefsUtil.getIsLightTheme()));
    

  • 相关阅读:
    Spring+SpringMVC+MyBatis深入学习及搭建(一)——MyBatis的基础知识
    单例模式
    JVM的内存区域划分以及垃圾回收机制详解
    线上出现OutOfMemoryError的一次解决问题记录
    MYSQL针对于行多个字段转成多行的处理
    MYSQL 在insert时出现死锁的情况
    idea下载
    LTS用户文档
    HMS06. 编译构件相关
    HMS05. 与IDE使用相关的杂顶内容
  • 原文地址:https://www.cnblogs.com/huhx/p/13040265.html
Copyright © 2011-2022 走看看