R2T*_*2T8 4 android dart flutter android-10.0 android-darkmode
如何检查使用Flutter的Android Q中是否启用了暗模式?我知道如何设置黑暗模式,但是我没有找到检查背景主题的方法。
这是设置黑暗主题的代码。
darkTheme: ThemeData.dark(),
Run Code Online (Sandbox Code Playgroud)
Baj*_*Bob 42
随着 Dart 中扩展方法的引入,我更喜欢直接附加该功能BuildContext。这提供了一个更干净的感觉界面并且可读性更好。
import 'dart:ui';
import 'package:flutter/widgets.dart';
extension DarkMode on BuildContext {
/// is dark mode currently enabled?
bool get isDarkMode {
final brightness = MediaQuery.of(this).platformBrightness;
return brightness == Brightness.dark;
}
}
Run Code Online (Sandbox Code Playgroud)
然后在我的构建函数中我可以轻松地使用它。
@override
Widget build(BuildContext context) {
final Widget logo = SvgPicture.asset(
context.isDarkMode ? "assets/logo_dark.svg" : "assets/logo.svg",
semanticsLabel: 'my logo');
}
Run Code Online (Sandbox Code Playgroud)
小智 10
如果您在 中定义了深色主题,MaterialApp则当启用 Android Q 深色主题时,您的应用将自动变暗。你必须像这样指定你的黑暗主题:
MaterialApp(
theme: ThemeData(
brightness: Brightness.light,
primaryColor: Colors.red,
),
darkTheme: ThemeData(
brightness: Brightness.dark,
),
);
Run Code Online (Sandbox Code Playgroud)
根据这篇中篇文章,
现在,当您在系统抽屉中切换 Dark Theme 时,您的 Flutter 应用程序将自动从您的常规主题切换到您的 darkTheme!
但是,如果您想手动检查您是否处于暗模式,您可以使用 Platform Channel API 轻松编写一个方法。更多细节在这里。至于本机代码,请查看此处。
可以ThemeMode在里面使用MaterialApp。
MaterialApp(
themeMode: ThemeMode.system,
theme: ThemeData(
brightness: Brightness.light,
primaryColor: Colors.red,
),
darkTheme: ThemeData(
brightness: Brightness.dark,
),
);
Run Code Online (Sandbox Code Playgroud)
ThemeMode.system将获取操作系统中的活动主题,然后使用theme或darkTheme. 另外ThemeMode.dark将始终使用darkTheme并将ThemeMode.light始终使用theme.
我找到了方法。这里是。
bool _darkModeEnabled = false;
void _checkIfDarkModeEnabled() {
final ThemeData theme = Theme.of(context);
theme.brightness == appDarkTheme().brightness
? _darkModeEnabled = true
: _darkModeEnabled = false;
}
Run Code Online (Sandbox Code Playgroud)
您可以使用检查它MediaQuery。
var brightness = MediaQuery.of(context).platformBrightness;
if (brightness == Brightness.dark)
print("Dark mode");
else
print("Normal mode");
Run Code Online (Sandbox Code Playgroud)
无论当前的平台是什么,如果您有权访问,则context可以使用 简单地检查它Theme。以下是我用来将白色更改为透明颜色(如果当前应用程序主题为 )的示例dark。
(Theme.of(context) == Brightness.dark) ? Colors.white : Colors.transparent
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1553 次 |
| 最近记录: |