Flattern - Übergeben Sie Werte zwischen Routen mit pushReplacementNamed


rafaelcb21

Ich versuche, Werte zwischen Routen mit zu übergeben Navigator.pushReplacementNamed(), aber ich verstehe es nicht.

Ich kann nicht herausfinden, in welcher Syntax und Logik die Daten korrekt sind pushReplacementNamedund den routesSchlüssel erhalten.

Können Sie mir helfen?

Geben Sie den folgenden Code ein, um das Verständnis zu erleichtern:

import 'package:flutter/material.dart';

void main() => runApp(new MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return new MaterialApp(
      theme: new ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: new MyHomePage(),
      routes: <String, WidgetBuilder> {
        '/form': (BuildContext context) => new FormPage(email: ???, header: {'auth': ???}),
      },
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => new _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  @override
  Widget build(BuildContext context) {
    return new Scaffold(
      floatingActionButton: new FloatingActionButton(
        onPressed: () {
          Navigator.pushReplacementNamed(context, '/form', {email: '[email protected]', header: {'auth': '1234'}});
        },
        child: new Icon(Icons.navigate_next),
      ),
    );
  }
}

class FormPage extends StatefulWidget {
  FormPage({Key key, this.email, this.header}) : super(key: key);
  String email;
  Map header;
  @override
  FormPageState createState() => new FormPageState();
}

class FormPageState extends State<FormPage> {
  @override
  Widget build(BuildContext context) {
    return new Container(
      child: new Column(
        children: <Widget>[
          new Text(widget.email),
          new Text(widget.header['auth'])
        ],
      ),
    );
  }
}

Nach der Korrektur:

Der Zweck des Versuchs pushReplacementNamedbestand darin, den Routenverlauf zu entfernen. Wenn der Benutzer also die Zurück-Taste des Geräts drückt, um zur früheren Route zurückzukehren, ist die Route nicht mehr vorhanden. Referenz

Der Grund für diese Implementierung ist die Verwendung auf einer Anmeldeseite, wenn der Benutzer bereits authentifiziert wurde, indem google signer mit den Anmeldeparametern zur nächsten Seite weitergeleitet wird und nicht über die Zurück-Schaltfläche des Geräts zur Anmeldeseite zurückkehren konnte.

import 'package:flutter/material.dart';

void main() => runApp(new MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return new MaterialApp(
      theme: new ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: new MyHomePage(),
      routes: <String, WidgetBuilder> {
        '/form': (BuildContext context) => new FormPage(), //new
      },
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => new _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  @override
  Widget build(BuildContext context) {
    return new Scaffold(
      floatingActionButton: new FloatingActionButton(
        onPressed: () {
          Navigator.of(context).pushReplacement(                                                         //new
            new MaterialPageRoute(                                                                       //new
              settings: const RouteSettings(name: '/form'),                                              //new
              builder: (context) => new FormPage(email: '[email protected]', header: {'auth': '1234'}) //new
            )                                                                                            //new
          );                                                                                             //new
        },
        child: new Icon(Icons.navigate_next),
      ),
    );
  }
}

class FormPage extends StatefulWidget {
  FormPage({Key key, this.email, this.header}) : super(key: key);
  String email;
  Map header;
  @override
  FormPageState createState() => new FormPageState();
}

class FormPageState extends State<FormPage> {
  @override
  Widget build(BuildContext context) {
    return new Container(
      child: new Column(
        children: <Widget>[
          new Text(widget.email),
          new Text(widget.header['auth'])
        ],
      ),
    );
  }
}
Simon

Ich denke, Sie werden möglicherweise nicht verstehen, wie das Ergebnis funktioniert. Das Ergebnis geht auf das vorherige Widget zurück, das die letzte Route verschoben hat, und wird awaitfür das Ergebnis des Futurevom vorherigen Aufruf an zurückgesendeten verwendet push. Möchten Sie einfach eine Route mit Parametern starten? Dann können Sie dies tun.

Navigator.of(context).pushReplacement(new MaterialPageRoute(settings: const RouteSettings(name: '/form'), builder: (context) => new FormPage(email: '[email protected]', header: {'auth': '1234'})));

Verwandte Artikel


Übergeben Sie Requisiten mit React-Router zwischen Routen

Ruben Martinez Jr. Ist die einzige Möglichkeit, Daten zwischen Routen in den URL-Parametern von React-Router (1.0.0-rc) zu übertragen? Ich habe eine Komponente, A, die das Verlaufsmixin verwendet, und einen Ereignishandler, der eine Serveranforderung stellt un

Übergeben mehrerer Argumente an benannte Routen mit Flattern

Omar Abdelaziem Ich versuche, benannte Routen mit mehreren benannten Argumenten wie im folgenden Beispiel zu verwenden, und das Problem besteht darin, wenn ich mehr als ein Argument an einen Bildschirm übergeben möchte, sodass ich eine benutzerdefinierte Klass

Flattern Sie anfängliche Routen mit Parametern

Chris Ich muss ein Argument für meine übergeben initialRoute. Ich habe dieses Problem gefunden und es so versucht: initialRoute: AuthService.isLoggedIn() ? Views.home : Views.firstStart, onGenerateInitialRoutes: (String initialRouteName) { return

So übergeben Sie Werte zwischen Fragmenten

Vamsi Challa Ich bin ziemlich neu in der Verwendung von Fragmenten. Ich versuche nur, eine einfache Beispielanwendung zu erstellen, die Fragmente verwendet. Mein Szenario ist, ich habe zwei Aktivitäten mit einem Fragment in jeder Aktivität. Das erste Fragment

So übergeben Sie Werte zwischen Funktionen

Bruno Andrade Ich weiß, es wäre einfach, Methoden und Attribute zu verwenden, aber ich kann es nicht nur mit Funktionen tun. Es ist für ein WordPress-Plugin, daher kann ich auch keine globalen Variablen verwenden. Ich würde gerne wissen, wie man den GET-Wert d

So verwenden Sie Werte zwischen verschiedenen Express-Routen

Ashish Ich bin neu bei Express und schreibe eine Anwendung in Knoten js. Ich habe ein Problem bei der Verwendung der gleichen Parameter. Mein Code ist: app.get('/signin', function (req, res) { renderView(req, res, 'signin.jade'); }); app.get('/config', func

Flattern - Push and Get-Wert zwischen Routen

rafaelcb21 Wie sende ich die grüne Zeichenfolge von der HomePage-Seite an die ContaPage-Seite? Ich denke, es ist so, Navigator.of(context).pushNamed('/conta/green');aber ich weiß nicht, wie ich auf der Seite contadie greenZeichenfolge bekommen soll Wenn ich al