项目需要跟随系统主题变化,修改一些自定义组件的样式,但百度一直没找到可以监听系统主题变化的方法,而 MaterialApp 是有一个设置ThemeMode.system,使得app可以跟随系统主题变化而切换使用传入的theme和darkTheme,因此我就去看了看里面的源码,找到了监听系统主题变化的函数绑定方法。
解决
- 首先需要import标准库,flutter自带的,不需要pub等方式下载:
import 'dart:ui' as ui;
- 系统主题变化函数绑定:
- 直接把下面代码中的onPlatformBrightnessChanged 赋值一个我们想执行的函数即可
ui.PlatformDispatcher.instance.onPlatformBrightnessChanged = () {
// 设置跟随系统主题变化
followingSystem();
};
- -
- 如果想取消监听,则同样把它赋值为null
ui.PlatformDispatcher.instance.onPlatformBrightnessChanged = null;
- -
- 如果想判断现在是否有在监听,则判断它是否不为null
if(null == ui.PlatformDispatcher.instance.onPlatformBrightnessChanged) {
// 当前没有在监听
} else {
// 有在监听
}
- -
- 注意 onPlatformBrightnessChanged 其实就是一个变量而已,你如果给它赋值好几次,那显然它的值就是最后一次赋值的结果
- 因此重复赋值并不会让它能执行多个函数
- 如果需要执行多个函数,应当把这些函数放进一个函数里,然后把它赋值给 onPlatformBrightnessChanged :
ui.PlatformDispatcher.instance.onPlatformBrightnessChanged = () {
fun1();
fun2();
fun3();
fun4();
......
};
- 系统主题变化时会执行 onPlatformBrightnessChanged 绑定的函数,那么我怎么知道现在系统的主题是什么类型呢?
- 可以使用如下代码判断:
if(ui.PlatformDispatcher.instance.platformBrightness == Brightness.dark) {
// 系统已经转变为夜间模式
// app跟随修改主题为夜间
} else {
// 系统已经转变为白天模式
// app跟随修改主题为白天
}
- 还有一个问题需要注意,启动app时,并不会触发上面绑定的函数
- 假设我们给app的默认主题是白天模式,此时系统已经是夜间模式,然后用户启动app,此时并不会触发 onPlatformBrightnessChanged ,因此app呈现的还是白天模式
- 解决方法:显然就是进入app时,我们手动执行一次判断系统主题,跟随变化,然后绑定监听函数即可:
// 进入app时手动调用一次 followingSystem(), 然后调用 setFollowingSystem() 绑定监听函数
void followingSystem() {
if (ui.PlatformDispatcher.instance.platformBrightness == Brightness.dark) {
// app跟随修改主题为夜间
} else {
// app跟随修改主题为白天
}
}
// 设置跟随系统主题变化
void setFollowingSystem() {
ui.PlatformDispatcher.instance.onPlatformBrightnessChanged = () {
followingSystem();
};
}
акустическое оборудование для актового зала http://www.oborudovanija-dlja-aktovyh-zalov.ru .
оборудование для актового зала оборудование для актового зала .
I’m impressed, I must say. Seldom do I encounter a blog that’s both equally educative and entertaining, and without a doubt, you’ve hit the nail on the head. The problem is something not enough people are speaking intelligently about. Now i’m very happy I stumbled across this during my search for something concerning this.
This page definitely has all of the info I needed about this subject and didn’t know who to ask.
световое оборудование для актового зала световое оборудование для актового зала .
акустическое оборудование для актового зала акустическое оборудование для актового зала .
lcd видеостена москва https://www.videosteny-dlja-sozdanija-jekranov.ru .
видеостены москва видеостены москва .
Good day! I could have sworn I’ve visited this blog before but after going through many of the articles I realized it’s new to me. Anyhow, I’m certainly happy I discovered it and I’ll be bookmarking it and checking back regularly.
Останні новини світу https://uamc.com.ua про Україну від порталу новин Ukraine Today
Останні новини https://thingshistory.com зовнішньої та внутрішньої політики в країні та світі.
Головні новини https://status.net.ua сьогодні, найсвіжіші та останні новини України онлайн
Корисні та цікаві статті https://sevsovet.com.ua про здоров’я, дозвілля, кар’єру.
Having read this I thought it was very informative. I appreciate you finding the time and effort to put this article together. I once again find myself personally spending a significant amount of time both reading and leaving comments. But so what, it was still worthwhile.
Новини, останні події https://prp.org.ua в Україні та світі, новини політики, бізнесу та економіки, законодавства
Новини України https://sensus.org.ua та світу сьогодні. Головні та останні новини дня
Новини та аналітика https://newsportal.kyiv.ua ситуація в Україні.
Головні новини https://mediashare.com.ua про регіон України. Будьте в курсі останніх новин
Головні новини https://pto-kyiv.com.ua України та світу
This website was… how do you say it? Relevant!! Finally I’ve found something that helped me. Cheers!
You ought to take part in a contest for one of the highest quality blogs on the net. I am going to recommend this website!
Україна останні новини https://lentanews.kyiv.ua головні новини та останні події
Свіжі новини України https://lenta.kyiv.ua останні новини з-за кордону, новини політики, економіки, спорту, культури.
Україна свіжі новини https://kiev-pravda.kiev.ua останні події на сьогодні
Популярные репортажи https://infotolium.com в больших фотографиях, новости, события в мире
Новини України https://kiev-online.com.ua останні події в Україні та світі сьогодні, новини України за минулий день онлайн
Новини сьогодні https://gau.org.ua останні новини України та світу онлайн
Новинний ресурс https://actualnews.kyiv.ua про всі важливі події в Україні та світі.
Останні новини України https://gromrady.org.ua сьогодні онлайн – головні події світу
продвижение сайта в топ 10 цена казань https://seo-optimizatsia.ru
продвижение сайтов казань недорого https://seooptimizatsia.ru
оснащение переговорных комнат оснащение переговорных комнат .
оборудование переговорных комнат оборудование переговорных комнат .
современное оборудование для конференц зала современное оборудование для конференц зала .
оборудование для совещаний и конференций https://www.oborudovanie-konferenc-zalov.ru .
маленькая переговорная маленькая переговорная .
I want to to thank you for this great read!! I certainly loved every bit of it. I have you book-marked to check out new things you post…
сео компания раскрутка сайта цена казань
стоимость seo продвижения сайта в казани https://seoraskrutka43.ru
Помощь студентам в выполнении рефератов https://referatkupit-oline.ru. Низкие цены и быстрое написание рефератов!
Aw, this was an exceptionally nice post. Finding the time and actual effort to produce a really good article… but what can I say… I put things off a lot and never manage to get nearly anything done.
Красивая музыка https://melodia.space для души слушать онлайн.
Accessibility Team Meeting Notes https://make.wordpress.org/accessibility/2021/06/11/accessibility-team-meeting-notes-june-11-2021
Заказать курсовую работу https://kursovye-napishem.ru в Москве: цены на написание и выполнение, недорого
I’m impressed, I have to admit. Rarely do I encounter a blog that’s equally educative and engaging, and without a doubt, you’ve hit the nail on the head. The problem is something that not enough men and women are speaking intelligently about. Now i’m very happy I stumbled across this in my search for something concerning this.
Заказать дипломную работу https://diplomzakazat-oline.ru недорого. Дипломные работы на заказ с гарантией.
Заказать контрольную работу https://kontrolnye-reshim.ru, недорого, цены. Решение контрольных работ на заказ срочно.