Запомните статус кнопки «Мне нравится» после повторного открытия в Flutter - PullRequest
0 голосов
/ 08 июня 2019

Я хочу, чтобы мое приложение запоминало статус кнопки «Мне нравится» после закрытия / повторного открытия.Я использую Firebase DB и флаттер.

Ответы [ 2 ]

1 голос
/ 08 июня 2019

Спасибо, Али Амин, сэр. Я следовал его указаниям. Я использовал этот код, чтобы обновить поле «likeby».

Firestore.instance.runTransaction((transaction) async {
        DocumentSnapshot freshSnap = await transaction.get(document.reference);
        await transaction.update(freshSnap.reference, {
          'vote': freshSnap['vote'] + 1,
        });
        List<String> users = ["4"]; //userId
        await transaction.update(freshSnap.reference, {
          'likedby': FieldValue.arrayUnion(users),
        });
      });
1 голос
/ 08 июня 2019

Я предполагаю, что вы используете Cloud Firestore, тогда вам может потребоваться правильно структурировать ваши данные в базе данных, но я дам вам пример, чтобы все заработало.

Предположим, что структура документов в Firestore аналогична "posts"/postId, где "posts" - это коллекция, а postId - общий документ в коллекции постов, где у каждого сообщения есть кнопка «Нравится».

Теперь мы можем структурировать пользовательский документ в Firestore следующим образом:

uid: //(here goes the postId, you should also name the document by the same postId)
likedBy: //(This is an array of userId's, where if the user likes this post his Id will be placed here)

Обратите внимание, что вам необходимо аутентифицировать пользователей и получать их идентификаторы. Если это не функция в вашем приложении, то, возможно, вам нужно использовать общие настройки, как кто-то заявил.

Затем во флаттере нужно проверить, понравился ли пост пользователю. Я не буду рассказывать вам, как структурировать архитектуру вашего приложения, но выяснить, нравится ли пользователю публикация с кнопкой «Мне нравится» или нет, с помощью следующего асинхронного кода Dart:

bool isPostLiked;
Future<DocumentSnapshot> docSnapshot = Firestore.instance.collection('posts').document(postId).get();
DocumentSnapshot doc = await docSnapshot;
if (doc['likedBy'].contains(userId)) {
    isPostLiked = true;
} else {
   isPostLiked = false;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...