flutter - Flutter:以编程方式导致使用 darkTheme
问题描述
在 Flutter 中,您可以设置要使用的深色主题,如果某些上下文(例如 Android Q 上设置了深色模式)将使用该主题。是否有推荐的方法允许以编程方式覆盖它?例如,响应用户偏好?
我想这可以在应用程序的最顶层完成:
MaterialApp(
theme: ThemeData.light(),
darkTheme: ThemeData.dark(),
themeMode: fromSomeState,
)
但是,我还希望能够在应用程序的各个点以编程方式打开应用程序是否处于暗模式(例如,用于图像选择):
MediaQuery.of(context).platformBrightness == Brightness.dark;
我也可以尝试更新MediaQueryData
to override platformBrightness
,但这只能在里面完成MaterialApp
,这看起来很尴尬。
做这种事情有更好的模式吗?
解决方案
您可以查看dynamic_theme
如何使用
只需添加Dynamic Theme
为您的父母MaterialApp
DynamicTheme(
defaultBrightness: Brightness.light,
data: (brightness) => new ThemeData(
primarySwatch: Colors.indigo,
brightness: brightness,
),
themedWidgetBuilder: (context, theme) {
return new MaterialApp(
.......
);
}
)
获取currentBrightness
使用
DynamicTheme.of(context).brightness;
并使用
DynamicTheme.of(context).setBrightness(Theme.of(context).brightness == Brightness.dark? Brightness.light: Brightness.dark);
您可以阅读有关它的更多信息或创建自己的,查看此媒体帖子
已编辑
您可以使用检查当前的操作系统主题
MediaQuery.of(context).platformBrightness;
并相应地设置主题。
推荐阅读
- django - Django Todo App - 按外键过滤导致 TypeError
- laravel - 在 maatwebsite excel 导出/导入中,我需要插入名称而不是 id
- bash - 在数字列表中添加前导空格?
- drop-down-menu - 如何从按钮移动下拉菜单框的位置?
- gitlab - 即使组在重新配置期间拥有该文件夹,Gitlab 也没有启动并尝试执行 chgrp 命令
- gcc - 找不到 -ll collect2:错误:ld 返回 1 退出状态
- reactjs - UseEffect 或在功能组件中抛出逻辑
- pycharm - 无法在 Windows 10 PC 中打开我的 PyCharm 应用程序?
- c++ - 单个文件中的多个命名空间相互引用 C++
- python-3.x - Modin df iterrows 非常缓慢。有什么办法可以加快速度吗?