0
votes

Rappelez-vous le statut du bouton J'aime après la ré-ouverture dans le flutter

Je veux que mon application se souvienne de l'état du "Button comme" après la fermeture / la ré-ouvrante. J'utilise Firebase DB et Flutter.


6 commentaires

Où stockez-vous le statut de bouton similaire?


Je vais utiliser des préférences partagées, mais je ne sais pas si cela convient ou non.


@Hasini Cela dépend de ce que le "comme bouton comme" est pour? Est-ce une partie clé de l'application? Si oui, je dirais que les préférences partagées sont acceptables pour quelque chose comme ça. Sinon, vous devez déterminer comment vous stockez / allez stocker d'autres données.


@Hasini SharedPrreferences sont stockées localement. Cela signifie que lorsque l'utilisateur désinstalle l'application ou efface les données, toutes les préférences partagées seront perdues. Cela dépend donc de ce que vous voulez. Si l'utilisateur interagit avec d'autres personnes, vous devez envisager d'utiliser un DB Cloud DB ou peut-être même un fichier JSON en ligne. Sinon, vous pourriez simplement utiliser SharedPreferences ou stockage local. Veuillez modifier votre question expliquant le type d'application que vous faites ou ce que vous essayez d'accomplir.


@AlexLushiku Je développe une application postale simple.


@Hasini Dans ce cas, je vous recommande d'utiliser FireStore, regardez la réponse d'Ali ci-dessous


3 Réponses :


7
votes

Je suppose que vous utilisez Cloud Firestore, vous devrez peut-être structurer correctement vos données sur la base de données, mais je vous donnerai un exemple pour que les choses se dérouleront.

suppose que la structure des documents sur Firestore est similaire. à "posts" / postide code> où "message" code> est la collection et postide code> représente un document générique dans la collection de messages où chaque poste a une bouton. p>

MAINTENANT, nous pouvons structurer le document de l'utilisateur sur FireStore comme suit: p> xxx pré>

Notez que vous devez authentifier les utilisateurs et obtenir leur identifiant, si Ce n'est pas une fonctionnalité de votre application alors vous devez peut-être utiliser des préférences partagées comme une personne a indiqué. P>

Puis, dans le flutter, vous devez vérifier si l'utilisateur est aimé par l'utilisateur. Je ne vous dirai pas comment structurer l'architecture de votre application, mais pour obtenir si le bouton "similaire" est aimé par l'utilisateur ou non peut être effectué à l'aide du code dard asynchrone suivant: P>

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;
}


2 commentaires

Ce n'est pas bien! Et s'il aime 10k j'aime, peut-être que son application est plus grande. Est-ce qu'il va faire cela sur 10k personnes? Que se passe-t-il s'il a sur 1 page 5 POSTES, TABRE DE 50K STRINGS? Cela déboucherait certainement. Il doit utiliser des fonctions de cloud pour créer un champ qui garde une piste sur la longueur du champ sur le serveur. Ensuite, faites une requête pour voir si l'utilisateur a aimé le poteau ou non.


@ALEXANDROUSROGESCU La taille d'un identifiant de document Firestore est de 29 octets (calculé en tant que numéro de nombre d'octets codés UTF-8 + 1 par la documentation), donc si vous obtenez des cordes 50k, vous obtiendriez moins de 1,5 Mo dans des tableaux de cordes, Donc débordant n'est pas le cas ici. Néanmoins, vous avez raison que cette approche n'est pas évolutive. Une approche plus évolutive consisterait à créer un likedby Sous-collection sous POSTES et remplacez-le avec des utilisateurs, mais cela sera beaucoup plus coûteux que l'évolutivité coûte plus cher. Cependant, la question posée n'a pas justifié le fardeau de la structuration de la structuration.



4
votes

Merci Ali Amin Amin Monsieur. J'ai suivi ses lignes directrices. J'ai utilisé ce code pour mettre à jour le champ "likedby". XXX


1 commentaires

Cela fonctionnerait, mais cela a des problèmes de sécurité. Il a besoin de fortes règles de sécurité.



4
votes

Ceci n'est pas lié à Firestore. Mais si quelqu'un est venu ici pour savoir comment faire cela avec SQL, MySQL Base de données, veuillez consulter l'exemple ci-dessous. Je vais expliquer cela aux débutants à flotter.

la variable: strong> Ce gars va gérer toutes les choses.` p> xxx pré>

widget InitiState: strong> Vous devriez vérifier l'état avec votre backend. Si l'utilisateur l'aime déjà, vous pouvez montrer qu'il l'a déjà aimé. P>

    Theme(
       data: ThemeData(splashColor: Colors.red[200]),
       child: Material(
          elevation: 0,
          shape: CircleBorder(),
          clipBehavior: Clip.hardEdge,
          color: Colors.transparent,
          child: InkWell(
             child: Padding(
                padding: const EdgeInsets.all(10),
                child: Icon(
                   Icons.favorite,
                   color: _isLiked ? Colors.red : Colors.black12,
                   size: 20,
                 ),
              ),
              onTap: () {
                 if(_isLiked){
                    setState(() {
                       _isLiked = false;
 //Here you need to update the backend status(if user dislike). This depends on your architecture.
                       _replyRateManager(widget.replyData.replyId,_currentUser,"DELETE_REPLY_RATE");
                       _rateCount -= 1;
                    });
                 }else{
                     setState(() {
                        _isLiked = true;
 //Here you need to update the backend status(if user like). This depends on your architecture.
                        _replyRateManager(widget.replyData.replyId,_currentUser,"ADD_REPLY_RATE");
                        _rateCount += 1;
                     });
                 }
              },
           ),
        ),
    )


0 commentaires