Я учу Flutter new; У меня был список карточек: с img, txt также создал виджет с отслеживанием состояния, включающий переключатели на каждой карточке, например, избранную кнопку, с использованием future builder и sharedPrefrences для хранения состояния переключателей. Проблема в том, что когда мы переключаем определенный переключатель, он работает, но когда я снова открываю страницу, состояние переключателя переходит на все переключатели, что делает их истинными. Похоже, что мы сохранили значение bool в ключе, который позже получает состояние для всех значений bool. Он много пробовал использовать любимые кнопки и флажки .....
class FavoriteWidget extends StatefulWidget {
const FavoriteWidget({Key key,this.speakers}):super (key:key);
@override
_FavoriteWidgetState createState() => _FavoriteWidgetState();
}
class _FavoriteWidgetState extends State<FavoriteWidget> {
Speakers speakers;
_FavoriteWidgetState(){this.speakers;}
String check;
@override
void initState() {
super.initState();
}
@override
Widget build(BuildContext contex) {
return Row(
mainAxisSize: MainAxisSize.min,
children: [
Container(
padding: EdgeInsets.all(0),
child:
FutureBuilder(
future: getShared(check),
initialData: false,
builder: (context, snapshot) {
return Switch(
value: snapshot.data,
onChanged: (value) {
setState(() {
putShared(check, value);
});
},
activeTrackColor: Colors.lightGreenAccent,
activeColor: Colors.green,
);
})
),
],
);
}
void toggleChanged(bool value) async {
setState(() {
putShared(check, value); });}
void putShared(String key, bool val) async {
SharedPreferences prefs = await SharedPreferences.getInstance();
prefs.setBool(key, val);
}
Future getShared(String key) async {
SharedPreferences prefs = await SharedPreferences.getInstance();
bool val = prefs.getBool(key) == null ? false : (prefs.getBool(key));
return val;
}
}