#firebase #flutter #google-cloud-firestore
#firebase #трепетание #google-облако-firestore
Вопрос:
Как вы можете видеть, я загрузил свой код, связанный с кнопкой «Нравится», где, если мы нажмем на кнопку «Нравится», он будет увеличивать и уменьшать количество, но после закрытия и повторного открытия моего приложения он снова попросит лайкнуть сообщение. моя проблема в том, что статус кнопки «Нравится» не остается верным после повторного открытия приложения.
где я сохраняю количество лайков и «понравилось» по идентификатору пользователя также в Firestore, но я не знаю, где я ошибаюсь
Может ли кто-нибудь помочь мне с этой проблемой
bool isLiked = false;
onTap: () async {
FirebaseUser user =
await FirebaseAuth.instance.currentUser();
List<String> userId = [user.uid];
if (!isLiked) {
setState(() {
isLiked = true;
});
await Firestore.instance
.collection('posts')
.document(postidentifer.postList[index].id)
.updateData(
{
"likes": FieldValue.increment(1),
"likedbyuser": FieldValue.arrayUnion(userId),
},
);
} else {
setState(() {
isLiked = false;
});
await Firestore.instance
.collection('posts')
.document(postidentifier.postList[index].id)
.updateData(
{
"likes": FieldValue.increment(-1),
"likedbyuser": FieldValue.arrayRemove(userId),
},
);
}
Ответ №1:
Вы должны использовать что-то для сохранения своих данных, это может быть онлайн, например firestore, или локально, например, общие настройки или sqlite
В этом случае (небольшие данные) попробуйте:https://pub.dev/packages/shared_preferences
Комментарии:
1. Спасибо за ваш ответ, можете ли вы подробно объяснить, как это сделать? потому что я новичок в flutter
2. В вашем случае, просто посмотрите на это, он создаст приложение, подобное тому, которое вы хотите pub.dev/packages/shared_preferences/example
3. сэр, можете ли вы помочь мне с приведенной ниже проблемой
Ответ №2:
Спасибо за ваш ответ, теперь я закончил со статусом кнопки «Нравится», но я сталкиваюсь с другой проблемой, что статус кнопки «Нравится» меняется для всех пользователей, которые прошли проверку подлинности, как я могу сделать это для конкретного пользователя.
а также
Я сталкиваюсь с проблемой при нажатии на кнопку «Нравится» во всех сообщениях, в которых кнопка «Нравится» переходит к любимой анимации.
Есть ли какое-либо решение для преодоления этого
Вот мой обновленный код
Container(
child: IconButton(
icon: Icon(
liked
? Icons.favorite_border
: Icons.favorite,
color:
liked ? Colors.grey : Colors.red,
),
onPressed: () async {
setState(() => liked = !liked);
var preferences =
await SharedPreferences
.getInstance();
preferences.setBool(likedKey, liked);
FirebaseUser user = await FirebaseAuth
.instance
.currentUser();
List<String> userId = [user.uid];
if (!liked) {
setState(() {
isLiked = false;
});
await Firestore.instance
.collection('posts')
.document(postidentifier
.postList[index].id)
.updateData(
{
"likes":
FieldValue.increment(1),
"likedbyuser":
FieldValue.arrayUnion(
userId),
},
);
} else {
setState(() {
isLiked = true;
});
await Firestore.instance
.collection('posts')
.document(postidentifier
.postList[index].id)
.updateData(
{
"likes":
FieldValue.increment(-1),
"likedbyuser":
FieldValue.arrayRemove(
userId),
},
);
}
},
),
),