【发布时间】:2021-04-12 12:57:57
【问题描述】:
我需要另一个文件中的开关值信息(真或假)来计算一些东西。 当 Switch 为 false 并且我重新启动应用程序时,Switch 仍为 false,如果我单击它,该值将变为 true,并使用它执行计算。
现在我的问题: 如果我将开关打开为 true 并关闭应用程序并重新启动,则该值将保持为 true(这很好),但如果我现在单击 Switch,则第二个文件中的值应该变为 false,但它不会,因此计算是不使用这个假的。再点击开关2次后就完美了。
您有任何想法如何改变以及改变什么?非常感谢!
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:ncrechner/Allgemein/state_widget.dart';
import 'package:provider/provider.dart';
import 'package:shared_preferences/shared_preferences.dart';
class Test extends StatefulWidget {
@override
DienstState createState() => DienstState();
}
@override
class DienstState extends State<Test> {
Widget build(BuildContext context) {
return DienstSwitch();
}
}
class SwitchHelper with ChangeNotifier{
bool _switchValue;
final SharedPreferences prefs = SharedPreferences.getInstance();
updataValue() async{
_switchValue = await prefs.getBool("isSwitchedDienst1");
_switchValue = !_switchValue;
prefs.setBool("isSwitchedDienst1", _switchValue);
notifyListeners();
}
}
class DienstSwitch extends StatefulWidget {
@override
DienstSwitchState createState() => new DienstSwitchState();
}
bool isSwitchedDienst1 = false;
class DienstSwitchState extends State<DienstSwitch> {
@override
void initState() {
super.initState();
loadisSwitchedDienst();
}
loadisSwitchedDienst() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
isSwitchedDienst1 =
(prefs.getBool("isSwitchedDienst1") ?? isSwitchedDienst1);
}
incrementisSwitchedDienst() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
setState(() {
isSwitchedDienst1 =
(prefs.getBool('isSwitchedDienst1') ?? isSwitchedDienst1);
prefs.setBool(("isSwitchedDienst1"), isSwitchedDienst1);
});
}
removeisSwitchedDienst() async {
final prefs = await SharedPreferences.getInstance();
prefs.remove('isSwitchedDienst1');
}
@override
Widget build(BuildContext context) {
return CupertinoSwitch(
value: isSwitchedDienst1,
onChanged: (bool value) {
Provider.of<SwitchHelper>(context).updataValue();
//removeisSwitchedDienst();
//incrementisSwitchedDienst();
/*setState(
() {
isSwitchedDienst1 = value;
//final provider = StateInheritedWidget.of(context);
//provider.changeSwitchDienst(isSwitchedDienst1);
},
);*/
},
activeColor: Colors.green,
);
}
}
我的主要看起来像:
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:ncrechner/DreamOn/Angaben/test.dart';
import 'package:ncrechner/nav.dart';
import 'package:provider/provider.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'Allgemein/state_widget.dart';
import 'onboarding.dart';
int initScreen;
Future main() async {
WidgetsFlutterBinding.ensureInitialized();
SharedPreferences prefs = await SharedPreferences.getInstance();
initScreen = prefs.getInt("initScreen");
await prefs.setInt("initScreen", 1);
await SystemChrome.setPreferredOrientations(
[
DeviceOrientation.portraitUp,
DeviceOrientation.portraitDown,
],
);
runApp(MyApp());
}
/*class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) => StateWidget(
child: Builder(
builder: (context) {
return
*/
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MultiProvider(
providers: [ChangeNotifierProvider(create: (context) => SwitchHelper())],
child: MaterialApp(
initialRoute: initScreen == 0 || initScreen == null ? "first" : "/",
routes: {
"/": (context) => Navigation(),
"first": (context) => OnBoardingPage(),
},
theme: ThemeData(
primaryColor: Colors.white,
scaffoldBackgroundColor: Colors.white.withAlpha(150),
accentColor: Colors.blue,
backgroundColor: Colors.red,
elevatedButtonTheme: ElevatedButtonThemeData(
style: ElevatedButton.styleFrom(
onPrimary: Colors.black,
primary: Colors.white,
),
),
toggleButtonsTheme: ToggleButtonsThemeData(
color: Colors.black,
selectedColor: Colors.black,
fillColor: Colors.blue.withOpacity(0.4)),
),
darkTheme: ThemeData(
brightness: Brightness.dark,
primarySwatch: Colors.blue,
primaryColor: Colors.grey[900],
buttonColor: Colors.grey[900],
scaffoldBackgroundColor: Colors.black,
accentColor: Colors.blue,
),
themeMode: ThemeMode.system,
/* ThemeMode.system to follow system theme,
ThemeMode.light for light theme,
ThemeMode.dark for dark theme
*/
debugShowCheckedModeBanner: false,
),
);
}
}
【问题讨论】:
标签: flutter switch-statement sharedpreferences persistence