У меня есть любимая кнопка изображения для изображений, которая становится красной при нажатии, но не сохраняет ее, когда я снова открываю изображение, которое ему не нравится. Поэтому мне было интересно, можем ли мы предоставить общие предпочтения для хранения понравившейся кнопки. Кто-нибудь знает, как это можно сделать?
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(),
),
),
],
);
}
}
Вы можете использовать плагин общие_настройки, чтобы сохранить, была ли нажата избранная кнопка или нет, а затем восстановить постоянное значение при инициализации 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,
),
),
],
),
);
}
}
Все изображения получают лайки Если я попытаюсь понравиться одному изображению
Затем вы должны сохранить уникальный ключ, который есть у каждого изображения, например идентификатор.
Можете подробно объяснить как это сделать?
Для обмена изображением - onPressed: () => _shareImage(imgPath)), я даю imgPath в качестве ключа для обмена этим конкретным изображением. Должен ли я дать то же самое и для этого, и если да, то где именно?
Это может помочь. stackoverflow.com/questions/52831605/flutter-shared-preferences