Состояние переключателя флаттера (список) сохраняется в общих настройках - PullRequest
0 голосов
/ 29 мая 2020

Я учу 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;

  }
}
...