我有一个“我的收藏”图像按钮,该图像按钮在单击时变为红色,但不存储,当我重新打开该图像时,它不受欢迎。所以我想知道我们是否可以在它上面设置共享的首选项来存储喜欢的按钮。有人知道该怎么做吗?
the complete code-
class FavoriteWidget extends StatefulWidget {
@override
_FavoriteWidgetState createState() => _FavoriteWidgetState();
}
class _FavoriteWidgetState extends State<FavoriteWidget> {
bool liked = false;
_pressed() {
setState(() {
liked = !liked;
});
}
@override
Widget build(BuildContext context) {
return Row(
mainAxisSize: MainAxisSize.min,
children: [
Container(
child: IconButton(
icon: Icon(liked ?Icons.favorite: Icons.favorite_border,
color: liked ? Colors.red :Colors.grey ),
onPressed: () => _pressed(),
),
),
],
);
}
}
答案 0 :(得分:1)
您可以使用shared_preferences插件来保留是否按下了“收藏夹”按钮,然后在Widget
初始化时恢复保留的值。
class FavoriteWidget extends StatefulWidget {
@override
_FavoriteWidgetState createState() => _FavoriteWidgetState();
}
class _FavoriteWidgetState extends State<FavoriteWidget> {
static const likedKey = 'liked_key';
bool liked;
@override
void initState() {
super.initState();
_restorePersistedPreference();
}
void _restorePersistedPreference() async {
var preferences = await SharedPreferences.getInstance();
var liked = preferences.getBool(likedKey) ?? false;
setState(() => this.liked = liked);
}
void _persistPreference() async {
setState(() => liked = !liked);
var preferences = await SharedPreferences.getInstance();
preferences.setBool(likedKey, liked);
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: liked == null
? Center(child: CircularProgressIndicator())
: Row(
mainAxisSize: MainAxisSize.min,
children: [
Container(
child: IconButton(
icon: Icon(
liked ? Icons.favorite : Icons.favorite_border,
color: liked ? Colors.red : Colors.grey,
),
onPressed: _persistPreference,
),
),
],
),
);
}
}