如何监听 Flutter 中 platformBrightness 的变化?

2024-03-27

我正在设置一个系统,当用户将系统主题更改为深色模式时,它会更改主题,并且使用 Flutter,它运行得很好!但是,当用户更改系统主题时,系统导航和状态栏不会改变其颜色。我在构建方法内的主页上运行了代码,但这似乎没有做到这一点。这是主页构建方法中的代码:

class HomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    Brightness sysBrightness = MediaQuery.of(context).platformBrightness;
    if (sysBrightness == Brightness.dark)
      Themes.setDarkSystemColors();
    else
      Themes.setLightSystemColors();

    return Scaffold(
      appBar: CustomAppBar(title: "Home"),
      drawer: CustomDrawer(),
      body: SizedBox(),
    );
  }
}

这是主应用程序中的代码theme: and darkTheme::

    return MaterialApp(
      initialRoute: '/',
      routes: routes,
      navigatorObservers: [_routeObserver],
      theme: Themes.lightTheme,
      darkTheme: Themes.darkTheme,
      debugShowCheckedModeBanner: false,
      title: 'School Life',
    );

您可以通过多种方式做到这一点:

  • Using didChangeDependencies

    // This callback will be invoked every time the platform brightness changes.
    @override
    void didChangeDependencies() {
      super.didChangeDependencies();
    
      // Get the brightness. 
      var brightness = MediaQuery.of(context).platformBrightness;
    }
    
  • Using WidgetsBindingObserver

    class _MyPageState extends State<MyPage> with WidgetsBindingObserver {
      @override
      void initState() {
        super.initState();
        WidgetsBinding.instance.addObserver(this);
      }
    
      // This callback is invoked every time the platform brightness changes. 
      @override
      void didChangePlatformBrightness() {
        super.didChangePlatformBrightness();
    
        // Get the brightness.
        var brightness = View.of(context).platformDispatcher.platformBrightness;
      }
    
      @override
      void dispose() {
        WidgetsBinding.instance.removeObserver(this);
        super.dispose();
      }
    
      @override
      Widget build(BuildContext context) => Container();
    }
    
  • 设置监听器initState

    @override
    void initState() {
      super.initState();
    
      var dispatcher = SchedulerBinding.instance.platformDispatcher;
    
      // This callback is called every time the brightness changes. 
      dispatcher.onPlatformBrightnessChanged = () {
        var brightness = dispatcher.platformBrightness;
      };
    }
    
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何监听 Flutter 中 platformBrightness 的变化? 的相关文章

随机推荐

  • 将用户重定向到不同 ASP.NET Core Razor 网站中的页面

    我有一个 ASP NET Core 2 1 Razor 应用程序 其中有两个在登录前处于活动状态的菜单项 我想在单击任一菜单项时转移 重定向 到其他网站 我尝试过重定向 如下所示 但当前 url 添加到我指定的字符串中 public IAc
  • 根据水年创建日索引

    我正在处理水文数据 我需要水年 我已经根据之前在此论坛上发布的功能成功创建了一个水年专栏 我想要的是有一个陪伴water day范围从 1 365 闰年为 366 以匹配水年序列 请注意 水年是由其结束的日历年指定的 例如 2010水年从2
  • Linux IPC:共享内存回收

    我有两个进程 生产者和消费者 通过使用生成的共享内存段进行通信 old https stackoverflow com questions 21311080 linux shared memory shmget vs mmap接口而不是 m
  • 将 ENGINE 上下文附加到 SSL_CTX

    我想知道是否有可能附加一个ENGINE 实施到SSL CTX and or SSL 结构 我想要实现的是拥有一个SSL CTX 将使用 OpenSSL 中内置的默认加密操作和另一个设置SSL CTX 将使用专用 HSM 作为加密层 我可以通
  • Ext.data.Store getTotalCount() 加载后不计算

    我的商店在调用时并不总是返回正确数量的记录getTotalCount 这个问题出现在我之后load 商店 我知道在检查时商店里有记录 我正在使用 ExtJs 4 1 3 this grid reference to my grid var
  • Swift:使用未声明的类型

    我正在实现一个类 但出现此错误 使用未声明的类型 myProtocol 这是我的代码 class LocalContactService myProtocol 你们中有人知道为什么我会收到此错误吗 我遇到了同样的错误 在我的情况下 我意外地
  • shinyapps setAccountInfo 错误

    当我尝试配置我的shinyapps根据以下指南在 my shinyapps io 上注册帐户信息https github com rstudio shinyapps blob master guide guide md https gith
  • Excel VBA - 将图表保存为 GIF 文件

    编程不是我的主要工作职能 但似乎是我所认为的瑞士军刀 我的任务是在 Excel 中制作一个 VBA 宏 将图形导出到 gif 文件 以便自动更新我们制造工厂的信息屏幕 我有一个可以工作的宏 但是 它有时会失败并创建一个具有正确文件名但 空
  • 实体框架中实体之间的复杂关系

    也许它是重复的 但我找不到任何这样的主题 我正在使用实体框架 数据库中有两个表 public class A public virtual B B1 get set public virtual B B2 get set public cl
  • ORA-01722: 实体框架上的编号无效

    我正在从 Oracle DB 执行一个存储过程 即 PROCEDURE GET TIM USER CUSTO P ANOMES IN VARCHAR USER CUSTO OUT SYS REFCURSOR IS BEGIN OPEN US
  • 如何从特定的目标文件生成特定的二进制文件?

    这是我的 makefile 我在 obj 目录中有目标文件 我需要将它们编译成 bin 文件夹中的二进制文件 但不知何故它无法按我希望的方式工作 有什么想法吗 SOURCES wildcard c OBJECTS patsubst c o
  • 安卓用C++还是Java?

    我正在考虑在空闲时间学习 Android 开发 我发现 Java 和 C 都可以进行开发 但后者是有限的 我对 C 更加满意 所以我的问题是 Android 上的 C 存在哪些限制 我能够用它开发完整的应用程序吗 还是我最终必须学习 Jav
  • C 中数组的理想数据类型

    我想存储键和可变大小数组之间的静态关联 foo gt bar awe foo2 gt bar2 awe2 gruh 该数组在程序执行期间永远不会改变 它只是将字符串变量数组与字符串键静态关联的一种方法 子阵列的数量非常少 我怎样才能纯粹地做
  • 等待 .forEach() 完成的最佳方法

    有时我需要等待 forEach 方法来完成 主要是 加载器 功能 这就是我这样做的方式 q when array forEach function item iterate on something then function contin
  • Google 地图 v3 折线工具提示

    谷歌地图标记对象 google maps Marker 有一个 title 属性 因此当用户将鼠标移到标记上时 会显示一个简单的工具提示 折线 google maps Polyline 上没有标题属性 有没有办法可以在 V3 中做到这一点
  • 如何使用谷歌脚本打开位于谷歌驱动器文件夹中的Excel文件?

    我需要打开给定的谷歌驱动器文件夹中的 Excel 文件并读取其数据 为此 我使用了以下代码 var folders DriveApp getFoldersByName Test Folder var foldersnext folders
  • 结构或联合中的“unsigned temp:3”是什么意思? [复制]

    这个问题在这里已经有答案了 可能的重复 这段C 代码是什么意思 https stackoverflow com questions 1604968 what does this c code mean 我正在尝试使用 JNA 将 C 结构映
  • 根据两者的坐标选择某个位置的设备并对其进行计数

    通过使用 SQL 地理的 STContains 函数 可以计算一组坐标是否在一个区域内 https stackoverflow com questions 64453530 match location between coordinate
  • str.split() 返回的 Pandas 排序列表

    给定 str 类型的 Pandas Series 我想对 str split 返回的结果进行排序 例如 给定系列 s pd Series abc def ghi ghi abc 我想得到 s2 pd Series abc def ghi a
  • 如何监听 Flutter 中 platformBrightness 的变化?

    我正在设置一个系统 当用户将系统主题更改为深色模式时 它会更改主题 并且使用 Flutter 它运行得很好 但是 当用户更改系统主题时 系统导航和状态栏不会改变其颜色 我在构建方法内的主页上运行了代码 但这似乎没有做到这一点 这是主页构建方