如何检查Flutter中是否启用了Android Q暗模式?

时间:2019-05-25 11:03:51

标签: android flutter dart androidq

如何使用 Flutter 检查 Android Q 中是否启用了暗模式?
我知道如何设置暗模式,但是我没有找到一种检查背景主题的方法。
这是设置黑暗主题的代码。

darkTheme: ThemeData.dark(),

8 个答案:

答案 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,
  ),
);

根据this medium article

  

现在,当您在系统抽屉中切换“黑暗主题”时,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将在操作系统中处于活动状态,然后使用themedarkTheme。另外,ThemeMode.dark将始终使用darkTheme,而ThemeMode.light将始终使用theme