0
votes

Flutter éviter la page de tiroir de réouverture

J'ai une navigation tiroir code> et les entrées à l'intérieur, il ressemble à ceci: xxx pré>

et la méthode doroute code> est la suivante: P>

String _currentRoute = '/';

void doRoute(BuildContext context, String routename) {
    if (_currentRoute != routename) {
      Navigator.of(context).popAndPushNamed(routename);
      _currentRoute = routename;
    }
    else
      Navigator.of(context).pop();
}


4 commentaires

Avez-vous essayé d'imprimer les deux _Currentroit et routename ?


Oui mais je ne comprends pas quoi faire


Pouvez-vous partager le résultat? Quelles sont les valeurs lorsque vous êtes sur votre page de paramètres?


Ajoutez-vous le même tiroir à deuxième itinéraire?


3 Réponses :


2
votes

 Entrez la description de l'image ici


Voici comment je l'ai fait (Code complet) P>

void main() {
  runApp(
    MaterialApp(
      routes: {
        "/": (context) => HomePage(),
        "/settings": (context) => SettingsPage(),
      },
    ),
  );
}
String _currentRoute = "/";

Widget buildDrawer(context) {
  return Drawer(
    child: SafeArea(
      child: Column(
        children: <Widget>[
          ListTile(
            title: Text("Home"),
            onTap: () => doRoute(context, '/'),
          ),
          ListTile(
            title: Text("Settings"),
            onTap: () => doRoute(context, '/settings'),
          ),
        ],
      ),
    ),
  );
}

void doRoute(BuildContext context, String name) {
  if (_currentRoute != name)
    Navigator.pushReplacementNamed(context, name);
  else
    Navigator.pop(context);

  _currentRoute = name;
}

// Page 1 (HomePage)
class HomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text("Home")),
      body: Container(color: Colors.blue.withOpacity(0.5)),
      drawer: buildDrawer(context),
    );
  }
}

// Page 2 (SettingsPage)
class SettingsPage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text("Settings")),
      body: Container(color: Colors.orange.withOpacity(0.5)),
      drawer: buildDrawer(context),
    );
  }
}


1 commentaires

J'ai compris! Le problème est que je retourne toujours le même tiroir pour chaque page



0
votes

J'ai résolu, sans variable d'instance: Définissez vos itinéraires: xxx

puis, dans votre fonction Listitem Tiroir ONTAP, vous pouvez obtenir le nom de l'itinéraire en cours: xxx

vous devez utiliser la même chaîne dans vos itinéraires comme dans votre titre de la liste de liste. I.e: xxx

J'espère que cela aide.


0 commentaires

0
votes

J'ai résolu ce problème en modifiant les états des variables.

Définir une variable globale dans CONFORTPAGE.DART FORT> P>

onPressed: () {
      if (clickableSettings == false) {
        print("clickableSettings is false");
      } else if (clickableSettings == true) {
        clickableSettings = false;
        Navigator.of(context).pushNamedAndRemoveUntil(
            '/setting', (Route<dynamic> route) => false);
      }
    },


0 commentaires