基本上就是标题.我将这些函数应用于CubinoSwitch值,但它没有切换.为了确保这一点,如果我将值硬编码为True,switch 将变为绿色,所以我猜这是onChanged中的某个东西.我在主题提供程序中切换它是错误的吗?
主题_提供者.dart
import 'package:chat_app/themes/dark_mode.dart';
import 'package:chat_app/themes/light_mode.dart';
import 'package:flutter/material.dart';
class ThemeProvider extends ChangeNotifier {
final ThemeData _themeData = lightMode;
ThemeData get getTheme => _themeData;
bool get isDarkMode => _themeData == darkMode;
set themeData(ThemeData themeData) {
themeData = themeData;
notifyListeners();
}
void toggleTheme() {
themeData = isDarkMode ? lightMode : darkMode;
}
}
设置.省道
import 'package:chat_app/themes/主题_提供者.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
class SettingsPage extends StatelessWidget {
const SettingsPage({super.key});
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Theme.of(context).colorScheme.background,
appBar: AppBar(
title: const Text("Settings"),
backgroundColor: Colors.transparent,
elevation: 0,
foregroundColor: Colors.grey,
),
body: Container(
decoration: BoxDecoration(
color: Theme.of(context).colorScheme.secondary,
borderRadius: BorderRadius.circular(12),
),
margin: const EdgeInsets.all(25),
padding: const EdgeInsets.all(16),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
const Text("Dark Mode"),
CupertinoSwitch(
value: Provider.of<ThemeProvider>(context).isDarkMode,
onChanged: (value) =>
Provider.of<ThemeProvider>(context, listen: false)
.toggleTheme(),
),
],
),
),
);
}
}