我正在学习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;
}
}