J'ai une navigation et la méthode tiroir code> et les entrées à l'intérieur, il ressemble à ceci: 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();
}
3 Réponses :
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),
);
}
}
J'ai compris! Le problème est que je retourne toujours le même tiroir pour chaque page
J'ai résolu, sans variable d'instance:
Définissez vos itinéraires: puis, dans votre fonction Listitem Tiroir ONTAP, vous pouvez obtenir le nom de l'itinéraire en cours: p> vous devez utiliser la même chaîne dans vos itinéraires comme dans votre titre de la liste de liste. I.e: p> J'espère que cela aide. p> p>
J'ai résolu ce problème en modifiant les états des variables.
Définir une variable globale dans onPressed: () {
if (clickableSettings == false) {
print("clickableSettings is false");
} else if (clickableSettings == true) {
clickableSettings = false;
Navigator.of(context).pushNamedAndRemoveUntil(
'/setting', (Route<dynamic> route) => false);
}
},
Avez-vous essayé d'imprimer les deux
_Currentroit code> etroutename code>?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 code> itinéraire?