Flutter 如何听设备暗色主题瞬间变化

Posted

技术标签:

【中文标题】Flutter 如何听设备暗色主题瞬间变化【英文标题】:Flutter how lo listen device dark theme change instantly 【发布时间】:2021-07-12 19:45:52 【问题描述】:

我的 Flutter 应用程序不会在深色主题功能下听取用户的偏好变化。我需要硬重启我的应用以反映更改。

如何在设备设置中打开/关闭深色主题后立即更改颤振主题?

  Widget build(BuildContext context) 
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        brightness: Brightness.light
      ),
      darkTheme: ThemeData(
        brightness: Brightness.dark
      ),
      themeMode: ThemeMode.system,
      home: MyHomePage(title: 'Flutter Demo Home Page'),
    );
  

谢谢

【问题讨论】:

【参考方案1】:

要查看更改,您需要两件事,使用StatefulWidget 并在每次用户更改主题时调用setState

IconButton(
  onPressed: () 
    setState(() 
      functionToChangeTheme();
    );
  ,
  icon: Icon(Icons.add),
)

【讨论】:

【参考方案2】:

我建议你试试这个插件Adaptive Chameleon Theme。它旨在帮助您轻松切换主题模式,无论是从浅色到深色,还是使用默认的用户定义的设备主题。

像这样:

// sets theme mode to dark
AdaptiveChameleonTheme.of(context).changeThemeMode(dark: true);
  
// sets theme mode to light
AdaptiveChameleonTheme.of(context).changeThemeMode(dark: false);
  
// sets theme mode to system default
AdaptiveChameleonTheme.of(context).changeThemeMode(dynamic: true);

它还具有额外的好处,允许您根据需要更改主题颜色。

AdaptiveChameleonTheme.of(context).setTheme(AppThemes.LightRed);
AdaptiveChameleonTheme.of(context).setTheme(AppThemes.LightBlue);

选择存储在共享首选项中并持久保存在设备内存中。

完全公开,我是插件的开发者,所以你可以认为这是一个无耻的插件。但是,我过去也面临过类似的挑战,因此我开发了这个快速且易于使用的解决方案。

【讨论】:

以上是关于Flutter 如何听设备暗色主题瞬间变化的主要内容,如果未能解决你的问题,请参考以下文章

IDE 的主题应该用亮色还是暗色?终极答案来了!

Flutter Forward 活动即将到来!

Flutter Forward 活动即将到来!

Flutter Forward 活动即将到来!

flutter 完全使用GetX 主题切换 以及 自创建Widget的颜色随主题变化方案

如何让暗色模式在我的应用上工作?