follow system theme at startup and changing
Signed-off-by: 21pages <pages21@163.com>
This commit is contained in:
parent
a3c1e5ddb4
commit
17a7cbf7bb
@ -25,6 +25,6 @@ void main(List<String> args) async {
|
|||||||
.add(Client(3, false, false, "UserD", "441123123", true, false, false));
|
.add(Client(3, false, false, "UserD", "441123123", true, false, false));
|
||||||
runApp(GetMaterialApp(
|
runApp(GetMaterialApp(
|
||||||
debugShowCheckedModeBanner: false,
|
debugShowCheckedModeBanner: false,
|
||||||
theme: getCurrentTheme(),
|
theme: MyTheme.initialTheme(),
|
||||||
home: DesktopServerPage()));
|
home: DesktopServerPage()));
|
||||||
}
|
}
|
||||||
|
@ -192,6 +192,28 @@ class MyTheme {
|
|||||||
],
|
],
|
||||||
);
|
);
|
||||||
|
|
||||||
|
static changeTo(bool dark) {
|
||||||
|
Get.find<SharedPreferences>().setString("darkTheme", dark ? "Y" : "");
|
||||||
|
Get.changeTheme(dark ? MyTheme.darkTheme : MyTheme.lightTheme);
|
||||||
|
Get.forceAppUpdate();
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool _themeInitialed = false;
|
||||||
|
|
||||||
|
static ThemeData initialTheme({bool mainPage = false}) {
|
||||||
|
bool dark;
|
||||||
|
// Brightnesss is always light on windows, Flutter 3.0.5
|
||||||
|
if (_themeInitialed || !mainPage || Platform.isWindows) {
|
||||||
|
dark = isDarkTheme();
|
||||||
|
} else {
|
||||||
|
dark = WidgetsBinding.instance.platformDispatcher.platformBrightness ==
|
||||||
|
Brightness.dark;
|
||||||
|
Get.find<SharedPreferences>().setString("darkTheme", dark ? "Y" : "");
|
||||||
|
}
|
||||||
|
_themeInitialed = true;
|
||||||
|
return dark ? MyTheme.darkTheme : MyTheme.lightTheme;
|
||||||
|
}
|
||||||
|
|
||||||
static ColorThemeExtension color(BuildContext context) {
|
static ColorThemeExtension color(BuildContext context) {
|
||||||
return Theme.of(context).extension<ColorThemeExtension>()!;
|
return Theme.of(context).extension<ColorThemeExtension>()!;
|
||||||
}
|
}
|
||||||
@ -201,6 +223,14 @@ class MyTheme {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class ThemeModeNotifier {
|
||||||
|
final ValueNotifier<Brightness> brightness;
|
||||||
|
ThemeModeNotifier(this.brightness);
|
||||||
|
changeThemeBrightness({required Brightness brightness}) {
|
||||||
|
this.brightness.value = brightness;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
bool isDarkTheme() {
|
bool isDarkTheme() {
|
||||||
final isDark = "Y" == Get.find<SharedPreferences>().getString("darkTheme");
|
final isDark = "Y" == Get.find<SharedPreferences>().getString("darkTheme");
|
||||||
return isDark;
|
return isDark;
|
||||||
|
@ -224,21 +224,18 @@ class _UserInterfaceState extends State<_UserInterface>
|
|||||||
}
|
}
|
||||||
|
|
||||||
Widget theme() {
|
Widget theme() {
|
||||||
var change = () {
|
change() {
|
||||||
bool dark = !isDarkTheme();
|
MyTheme.changeTo(!isDarkTheme());
|
||||||
Get.changeTheme(dark ? MyTheme.darkTheme : MyTheme.lightTheme);
|
}
|
||||||
Get.find<SharedPreferences>().setString("darkTheme", dark ? "Y" : "");
|
|
||||||
Get.forceAppUpdate();
|
|
||||||
};
|
|
||||||
|
|
||||||
return GestureDetector(
|
return GestureDetector(
|
||||||
|
onTap: change,
|
||||||
child: Row(
|
child: Row(
|
||||||
children: [
|
children: [
|
||||||
Checkbox(value: isDarkTheme(), onChanged: (_) => change()),
|
Checkbox(value: isDarkTheme(), onChanged: (_) => change()),
|
||||||
Expanded(child: Text(translate('Dark Theme'))),
|
Expanded(child: Text(translate('Dark Theme'))),
|
||||||
],
|
],
|
||||||
).marginOnly(left: _kCheckBoxLeftMargin),
|
).marginOnly(left: _kCheckBoxLeftMargin),
|
||||||
onTap: change,
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -33,7 +33,6 @@ class _DesktopTabPageState extends State<DesktopTabPage> {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
final dark = isDarkTheme();
|
|
||||||
RxBool fullscreen = false.obs;
|
RxBool fullscreen = false.obs;
|
||||||
Get.put(fullscreen, tag: 'fullscreen');
|
Get.put(fullscreen, tag: 'fullscreen');
|
||||||
return Obx(() => DragToResizeArea(
|
return Obx(() => DragToResizeArea(
|
||||||
|
@ -71,10 +71,6 @@ Future<Null> main(List<String> args) async {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ThemeData getCurrentTheme() {
|
|
||||||
return isDarkTheme() ? MyTheme.darkTheme : MyTheme.lightTheme;
|
|
||||||
}
|
|
||||||
|
|
||||||
Future<void> initEnv(String appType) async {
|
Future<void> initEnv(String appType) async {
|
||||||
await platformFFI.init(appType);
|
await platformFFI.init(appType);
|
||||||
// global FFI, use this **ONLY** for global configuration
|
// global FFI, use this **ONLY** for global configuration
|
||||||
@ -117,7 +113,7 @@ void runRemoteScreen(Map<String, dynamic> argument) async {
|
|||||||
navigatorKey: globalKey,
|
navigatorKey: globalKey,
|
||||||
debugShowCheckedModeBanner: false,
|
debugShowCheckedModeBanner: false,
|
||||||
title: 'RustDesk - Remote Desktop',
|
title: 'RustDesk - Remote Desktop',
|
||||||
theme: getCurrentTheme(),
|
theme: MyTheme.initialTheme(),
|
||||||
home: DesktopRemoteScreen(
|
home: DesktopRemoteScreen(
|
||||||
params: argument,
|
params: argument,
|
||||||
),
|
),
|
||||||
@ -135,7 +131,7 @@ void runFileTransferScreen(Map<String, dynamic> argument) async {
|
|||||||
navigatorKey: globalKey,
|
navigatorKey: globalKey,
|
||||||
debugShowCheckedModeBanner: false,
|
debugShowCheckedModeBanner: false,
|
||||||
title: 'RustDesk - File Transfer',
|
title: 'RustDesk - File Transfer',
|
||||||
theme: getCurrentTheme(),
|
theme: MyTheme.initialTheme(),
|
||||||
home: DesktopFileTransferScreen(params: argument),
|
home: DesktopFileTransferScreen(params: argument),
|
||||||
navigatorObservers: [
|
navigatorObservers: [
|
||||||
// FirebaseAnalyticsObserver(analytics: analytics),
|
// FirebaseAnalyticsObserver(analytics: analytics),
|
||||||
@ -152,7 +148,7 @@ void runPortForwardScreen(Map<String, dynamic> argument) async {
|
|||||||
navigatorKey: globalKey,
|
navigatorKey: globalKey,
|
||||||
debugShowCheckedModeBanner: false,
|
debugShowCheckedModeBanner: false,
|
||||||
title: 'RustDesk - Port Forward',
|
title: 'RustDesk - Port Forward',
|
||||||
theme: getCurrentTheme(),
|
theme: MyTheme.initialTheme(),
|
||||||
home: DesktopPortForwardScreen(params: argument),
|
home: DesktopPortForwardScreen(params: argument),
|
||||||
navigatorObservers: [
|
navigatorObservers: [
|
||||||
// FirebaseAnalyticsObserver(analytics: analytics),
|
// FirebaseAnalyticsObserver(analytics: analytics),
|
||||||
@ -176,7 +172,7 @@ void runConnectionManagerScreen() async {
|
|||||||
]);
|
]);
|
||||||
runApp(GetMaterialApp(
|
runApp(GetMaterialApp(
|
||||||
debugShowCheckedModeBanner: false,
|
debugShowCheckedModeBanner: false,
|
||||||
theme: getCurrentTheme(),
|
theme: MyTheme.initialTheme(),
|
||||||
home: DesktopServerPage(),
|
home: DesktopServerPage(),
|
||||||
builder: _keepScaleBuilder()));
|
builder: _keepScaleBuilder()));
|
||||||
}
|
}
|
||||||
@ -191,7 +187,26 @@ WindowOptions getHiddenTitleBarWindowOptions(Size size) {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
class App extends StatelessWidget {
|
class App extends StatefulWidget {
|
||||||
|
@override
|
||||||
|
State<App> createState() => _AppState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _AppState extends State<App> {
|
||||||
|
@override
|
||||||
|
void initState() {
|
||||||
|
super.initState();
|
||||||
|
WidgetsBinding.instance.window.onPlatformBrightnessChanged = () {
|
||||||
|
WidgetsBinding.instance.handlePlatformBrightnessChanged();
|
||||||
|
var system =
|
||||||
|
WidgetsBinding.instance.platformDispatcher.platformBrightness;
|
||||||
|
var current = isDarkTheme() ? Brightness.dark : Brightness.light;
|
||||||
|
if (current != system) {
|
||||||
|
MyTheme.changeTo(system == Brightness.dark);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
// final analytics = FirebaseAnalytics.instance;
|
// final analytics = FirebaseAnalytics.instance;
|
||||||
@ -210,7 +225,7 @@ class App extends StatelessWidget {
|
|||||||
navigatorKey: globalKey,
|
navigatorKey: globalKey,
|
||||||
debugShowCheckedModeBanner: false,
|
debugShowCheckedModeBanner: false,
|
||||||
title: 'RustDesk',
|
title: 'RustDesk',
|
||||||
theme: getCurrentTheme(),
|
theme: MyTheme.initialTheme(mainPage: true),
|
||||||
home: isDesktop
|
home: isDesktop
|
||||||
? const DesktopTabPage()
|
? const DesktopTabPage()
|
||||||
: !isAndroid
|
: !isAndroid
|
||||||
|
Loading…
x
Reference in New Issue
Block a user