【发布时间】:2021-10-21 16:09:13
【问题描述】:
我正在尝试从开关小部件更改主题。
但没有任何效果我没有错误,但没有预期的结果
.
在进行热重载时,它可以正常工作
当开关打开并进行热重载时,它会切换到深色主题
当开关关闭并进行热重载时,它会切换到浅色主题
这是要查看的代码
import 'package:flutter/material.dart';
mixin Th {
static ThemeMode themeMode = ThemeMode.dark;
static ThemeData themeData = ThemeData.dark();
static bool isDark = false;
}
void main() => runApp(MyApp());
class MyApp extends StatefulWidget {
static String title = 'Hello Flutter';
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
home: MyHomePage(),
title: MyApp.title,
themeMode: Th.themeMode,
darkTheme: Th.themeData,
);
}
}
class MyHomePage extends StatefulWidget {
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(MyApp.title),
actions: [
Switch(
value: Th.isDark,
onChanged: (newValue) {
return setState(
() {
if (!newValue) {
Th.themeMode = ThemeMode.light;
Th.themeData = ThemeData.light();
Th.isDark = newValue;
print('Is Dark = ${Th.isDark}');
} else if (newValue) {
Th.themeMode = ThemeMode.dark;
Th.themeData = ThemeData.dark();
Th.isDark = newValue;
print('Is Dark = ${Th.isDark}');
}
},
);
},
),
],
),
);
}
}
在控制台中运行打印并获得预期结果
这里有什么问题?并感谢您的阅读。
在桌面“Windows 应用”的颤振和移动“Android 应用”的颤振上进行了测试
【问题讨论】:
-
可以使用InhertedWidget。见链接stackoverflow.com/questions/54757480/flutter-dynamic-theming
标签: flutter