Я попытался создать приложение, которое должно сохранять две переменные с sharedPreferences
без написания кода sharedPreferences
два раза. Поэтому я написал приведенный ниже код и использовал переменную nameKey
для места, где значение должно быть сохранено, и я использовал safeVariable
для значения, которое должно быть сохранено. У меня есть две разные переменные, которые нужно сохранить: counter1
(значение + 1 при нажатии кнопки) и counter2
(значение - 1 при нажатии кнопки). У меня проблема в том, что обе переменные становятся меньше на единицу, но только одна переменная counter2
должна делать это. Кто-нибудь находит ошибку в моем коде? Это код:
class _MyHomePageState extends State<MyHomePage> {
int counter1 = 0;
int counter2 = 20;
String nameKey = "eins";
int safeVariable;
void _incrementCounter() {
setState(
() {
counter1++;
counter2--;
nameKey = "eins";
safeVariable = counter1;
save();
nameKey = "zwei";
safeVariable = counter2;
save();
},
);
}
@override
void initState() {
super.initState();
}
Future<bool> save() async {
SharedPreferences preferences = await SharedPreferences.getInstance();
return await preferences.setInt(nameKey, safeVariable);
}
Future<int> load() async {
SharedPreferences preferences = await SharedPreferences.getInstance();
return preferences.getInt(nameKey);
}
set() {
load().then((value) {
setState(() {
safeVariable = value;
});
});
}
@override
Widget build(BuildContext context) {
nameKey = "eins";
set();
counter1 = safeVariable;
nameKey = "zwei";
set();
counter2 = safeVariable;
return Scaffold(
appBar: AppBar(
title: Text("Test"),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
'You have pushed the button this many times:',
),
Text(counter1.toString(),
style: Theme.of(context).textTheme.headline4),
Text(counter2.toString(),
style: Theme.of(context).textTheme.headline4),
FloatingActionButton(
onPressed: _incrementCounter,
child: Icon(Icons.add),
),
]),
),
);
}
}