当前位置:网站首页>[flutter problem Series Chapter 67] the Solution to the problem of Routing cannot be jumped again in in dialog popup Using get plug - in in flutter

[flutter problem Series Chapter 67] the Solution to the problem of Routing cannot be jumped again in in dialog popup Using get plug - in in flutter

2022-06-13 04:25:00 Allen SU

C'est【Flutter Série de questions 67 Articles】,Si ça marche.,Bienvenue dans la rubrique.

Pour les blogs Flutter SDK:2.2.3,Dart SDK:2.13.4,get: 4.3.8.

Un.:Description du problème

Un problème que j'ai découvert par hasard,Il est noté que:.

Quand je suis monté sur les étagères du magasin de millet,Fenêtre contextuelle avec Protocole de confidentialité lorsque l'utilisateur entre dans l'application pour la première fois,Et puis on a ajouté,Cliquez sur《Protocole utilisateur》Peut également sauter normalement à la Web (En milliers de dollars des États - Unis),Je pensais que c'était fini,Comme le montre la figure ci - dessous

Par hasard, quand je teste , Quand j'ai eu mon premier pop - up , Le premier clic sur le lien permet un saut normal ,Sortie Web .Page cliquée à nouveau sans réponse ,Pourquoi??

Point d'arrêt débogué , J'ai trouvé la racine du problème .

2.:Solutions

Paramètres Get.toNamed() Propriétés de la méthode preventDuplicates Pour false C'est tout.,Le code ci - dessous

  /// Passer à《Protocole utilisateur》Page Web
  void _toAgreementPage() {
    
    Get.toNamed(
      AppRoutes.WEB,
      arguments: WebModel(title: "《Protocole utilisateur》", url: agreementUrl, isLocal: false),
      preventDuplicates: false, // “Prévention des doubles emplois”Set to false
    );
  }

Et le problème est résolu. , Ce n'est pas seulement pour Dialog,C'est parfait. Snackbar、BottomSheet Attends..

Trois:Analyse des sources《Comment résoudre Dialog Problème de routage de rebond secondaire anormal》

Certains camarades de classe aiment casser la casserole à sable et demander à la fin , Le problème est résolu ,Mais pourquoi?? Alors nous allons commencer l'analyse du code source .

D'abord, à travers le débogage du point d'arrêt Get.toNamed() Source de la méthode,Comme le montre la figure ci - dessous

Insérer la description de l'image ici

Comme le montre la figure,toNamed() La note au - dessus de la méthode signifie

  • Par défaut,GetX Empêche le saut vers une route déjà entrée .
  • Si vous voulez lever cette restriction ,Définir les propriétés preventDuplicates Pour false C'est tout..

La position du point d'arrêt indique ,En ce moment preventDuplicates Pour true, Pour revenir à ce jugement ,Description page == currentRoute Les conditions sont également réunies, C'est - à - dire que ce qui saute actuellement, c'est la route déjà entrée .

Méthode retournée null ,Donc, dans Dialog Cliquez à nouveau sur le lien pour sauter Web Il n'y a pas eu de réaction à la page .

Tout ce qu'il nous faut, c'est mettre en place preventDuplicates Pour false, La condition n'est plus valable , La nature est entrée dans le jugement .

Quatre:Analyse des sources《Pourquoi n'y a - t - il pas cette question dans la page Dialog Mais il y avait》

Un.: Quand la route entre dans la pile

Commençons par une classe GetObserver ,Cette classe hérite de NavigatorObserver Catégorie, Le but est d'écouter les sauts de page . Comme d'habitude Toast Et plus tard héritera de cette classe , GetObserver Le code source de la classe est montré dans la figure suivante

Insérer la description de l'image ici

Quand je clique《Protocole utilisateur》 Lien vers Web Page, La section sélectionnée dans la case Rouge indique ,Seulement PageRoute Le type permet de modifier la route actuelle current Valeur du champ, Donc, la mise à jour est maintenant .

Et c'est pourquoi Dialog Il n'y a pas de problème avec le pop - up entrant dans la nouvelle page .

2.: Quand le routage sort de la pile

Comme le montre la figure ci - dessous

Insérer la description de l'image ici

Quand je clique Web Lorsque le bouton retour de la page quitte la page courante , La section sélectionnée dans la case Rouge indique ,Seulement PageRoute Le type permet de modifier la route actuelle current Valeur du champ, Et nous venons de Dialog Le pop - up est entré , Le type de page précédente est GetDialogRoute, Mise à jour non satisfaite current Conditions.

Donc, bien que nous ayons vraiment abandonné Web (En milliers de dollars des États - Unis),Mais en ce moment, current La valeur de n'a pas été mise à jour ,Toujours /web, C'est - à - dire que ce que les yeux voient est une fenêtre , Mais le programme pense que vous êtes Web (En milliers de dollars des États - Unis), Cela crée un problème que la même page ne peut pas sauter .

Jusqu'ici.,À propos de Flutter Utilisé dans Get Le plug - in est Dialog Le problème de ne pas pouvoir sauter deux fois dans la fenêtre contextuelle , Je l'ai présenté ici .

Pour finir get Classe qui juge du type de routage actuel ,Comme le montre la figure ci - dessous

Insérer la description de l'image ici

Comme le montre la figure

  • Dialog Le type est GetDialogRoute,De PopupRoute.
  • Snackbar Le type est SnackRoute,De OverlayRoute.
  • BottomSheet Le type est GetModalBottomSheetRoute,De PopupRoute.
  • Page Le type estGetPageRoute,De PageRoute.

Votre problème a - t - il été résolu??Bienvenue dans la section commentaires.

Rose donatrice,Il y a du parfum dans les mains.,Si vous trouvez l'article bon,J'espère qu'il y a un lien.,Merci beaucoup..


Conclusion

Google De Flutter De plus en plus de feu,Fin 2022Année6Mois10Jour GitHub L'étoile a atteint 142K,Flutter La détermination est une tendance,Donc en tant que développeur frontal,Il n'y a aucune raison de ne pas étudier avant.

Que vous soyez Flutter Le novice est encore en train de commencer,Peut - être qu'un peu d'attention,Ensuite, je vais Flutter Composants communs dans(Contient l'analyse du code source、Utilisation et précautions des composants)Et les problèmes que vous pourriez rencontrer CSDN Sur le blog,J'espère que tout en étudiant,Peut également aider plus de gens.
原网站

版权声明
本文为[Allen SU]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/164/202206130420156163.html