Моему приложению необходимо запомнить статус кнопки «Нравится»

#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),
                                          },
                                        );
                                      }
                                    },
                                  ),
                                ),