我的应用程序当前在 Drawer 中有一个 SwitchTile 来设置主题,但我还想使用 IconButton 在详细信息页面中更改它。
我是 Flutter 和编程的新手,所以我不是专家,我认为我以错误的方式使用 onPressed 事件。
我在 IconButton 旁边放了一个开关,通过它我可以在两个主题之间切换。当我按下 IconButton 时,奇怪的部分出现了,只有 Switch 改变了它的状态,但应用程序没有改变主题(即使 IconButton 的图标也改变了,但就是这样)。
您能告诉我如何修复我的代码以使其适用于抽屉中的 SwitchTile 和详细信息页面中的图标按钮吗?
谢谢!这是我的代码:
主要.dart
class Innario extends StatelessWidget {
@override
Widget build(BuildContext context) => ChangeNotifierProvider(
create: (context) => ThemeProvider(),
builder: (context, _) {
final themeProvider = Provider.of<ThemeProvider>(context);
return MaterialApp(
debugShowCheckedModeBanner: false,
themeMode: themeProvider.themeMode,
theme: MyTheme.lightTheme,
darkTheme: MyTheme.darkTheme,
title: 'Inni di Lode',
home: SafeArea(
child: Home(),
),
);
},
);
}
提供者.dart
class ThemeProvider extends ChangeNotifier {
ThemeMode themeMode = ThemeMode.light;
bool get isDarkMode => themeMode == ThemeMode.dark;
void toggleTheme(bool isOn) {
themeMode = isOn ? ThemeMode.dark : ThemeMode.light;
notifyListeners();
}
}
抽屉.dart
SwitchListTile(
secondary: Icon(
themeProvider.isDarkMode ? Icons.dark_mode : Icons.light_mode,
),
title: const Text('Tema'),
value: themeProvider.isDarkMode,
onChanged: (value) {
final provider =
Provider.of<ThemeProvider>(context, listen: false);
provider.toggleTheme(value);
},
),
细节.dart
IconButton(
icon: Icon(
themeProvider.isDarkMode
? Icons.dark_mode
: Icons.light_mode,
),
tooltip: 'Cambia Tema',
onPressed: () {
setState(() {
Provider.of<ThemeProvider>(context, listen: false)
.themeMode =
themeProvider.isDarkMode
? ThemeMode.light
: ThemeMode.dark;
});
},
),
Switch(
value: themeProvider.isDarkMode,
onChanged: (value) {
final provider =
Provider.of<ThemeProvider>(context, listen: false);
provider.toggleTheme(value);
},
),