如何使用 Flutter 检查 Android Q 中是否启用了暗模式?
我知道如何设置暗模式,但是我没有找到一种检查背景主题的方法。
这是设置黑暗主题的代码。
darkTheme: ThemeData.dark(),
答案 0 :(得分:2)
我找到了路。在这里。
bool _darkModeEnabled = false;
void _checkIfDarkModeEnabled() {
final ThemeData theme = Theme.of(context);
theme.brightness == appDarkTheme().brightness
? _darkModeEnabled = true
: _darkModeEnabled = false;
}
答案 1 :(得分:1)
您可以使用BEGIN TRY
BEGIN TRANSACTION InsertValues;
INSERT INTO TableAB (IDTAbleA, IDTAbleB) VALUES(1,2);
INSERT INTO TableAB (IDTAbleA, IDTAbleB) VALUES(1,3);
INSERT INTO TableAB (IDTAbleA, IDTAbleB) VALUES(1,3);
COMMIT InsertValues;
END TRY
BEGIN CATCH
ROLLBACK InsertValues;
THROW;
END CATCH
进行检查。
MediaQuery
答案 2 :(得分:1)
无论当前平台是什么,如果您可以访问 context
,您只需使用 Theme
进行检查即可。以下是如果当前应用主题为 dark
时我用来将白色更改为透明色的示例。
(Theme.of(context) == Brightness.dark) ? Colors.white : Colors.transparent
答案 3 :(得分:0)
如果您在MaterialApp
中定义了深色主题,则当启用Android Q深色主题时,您的应用将自动变为深色。您必须像这样指定深色主题:
MaterialApp(
theme: ThemeData(
brightness: Brightness.light,
primaryColor: Colors.red,
),
darkTheme: ThemeData(
brightness: Brightness.dark,
),
);
现在,当您在系统抽屉中切换“黑暗主题”时,Flutter应用程序将自动从常规主题切换到DarkTheme!
但是,如果要手动检查是否处于暗模式,则可以使用Platform Channel API轻松编写方法。更多详细信息here。至于本机代码,check here。
答案 4 :(得分:0)
bool _darkModeEnabled = false;
bool _lightModeEnabled = false;
void _checkIfDarkModeEnabled() {
final ThemeData theme = Theme.of(context);
theme.brightness == Brightness.dark
? _darkModeEnabled = true
: _darkModeEnabled = false;
}
void _checkIfLightModeEnabled() {
final ThemeData theme = Theme.of(context);
theme.brightness == Brightness.light
? _lightModeEnabled = true
: _lightModeEnabled = false;
}
答案 5 :(得分:0)
检查操作系统主题模式:(如果使用 ThemeMode.system
)
var brightness = SchedulerBinding.instance.window.platformBrightness;
bool darkModeOn = brightness == Brightness.dark;
如果想检查您的应用正在使用的主题
在MaterialApp
中设置亮度
theme: ThemeData(
brightness: Brightness.light,
),
darkTheme: ThemeData(
brightness: Brightness.dark,
),
然后获取主题
var brightness = Theme.of(context).brightness
bool darkModeOn = brightness == Brightness.dark;
答案 6 :(得分:0)
随着 Dart 中 Extension methods 的引入,我更喜欢将该功能直接附加到 BuildContext
。这提供了一个更干净的感觉界面和更好的阅读。
import 'dart:ui';
import 'package:flutter/widgets.dart';
extension DarkMode on BuildContext {
/// is dark mode currently enabled?
bool isDarkMode() {
final brightness = MediaQuery.of(this).platformBrightness;
return brightness == Brightness.dark;
}
}
然后在我的构建函数中我可以轻松使用它。
@override
Widget build(BuildContext context) {
final Widget logo = SvgPicture.asset(
context.isDarkMode() ? "assets/logo_dark.svg" : "assets/logo.svg",
semanticsLabel: 'my logo');
}
答案 7 :(得分:-1)
您可以在ThemeMode
内使用MaterialApp
。
MaterialApp(
themeMode: ThemeMode.system,
theme: ThemeData(
brightness: Brightness.light,
primaryColor: Colors.red,
),
darkTheme: ThemeData(
brightness: Brightness.dark,
),
);
ThemeMode.system
将在操作系统中处于活动状态,然后使用theme
或darkTheme
。另外,ThemeMode.dark
将始终使用darkTheme
,而ThemeMode.light
将始终使用theme
。