Flutter Switch状态(列表)保存在共享首选项中

时间:2020-05-29 11:18:12

标签: flutter dart flutter-listview flutter-state

我正在学习Flutter的新知识; 我有一张卡片列表:使用img,txt还创建了一个有状态的小部件,在每张卡片中都包含一个开关,就像收藏夹按钮一样,使用将来的构建器和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;

  }
}

0 个答案:

没有答案