Flattern - Ist es möglich, Daten zu extrahieren, aus einer Zukunft ohne die Verwendung eines FutureBuilder?

Bin ich beim Lesen im user-provided input (in diesem Fall ein zip-code) aus einem TextField dass ich brauchen, um zu überprüfen, anhand einer Datenbank auf Gültigkeit. Allerdings brauche ich, um eine asynchrone Datenbank-Abfrage in der submit-button (ein RaisedButton in diesem Fall) onPressed: () {} lambda-Funktion. In den meisten Programmiersprachen, dies ist eine ziemlich einfache und einfache Aufgabe. Das problem ich bin in ein Flattern, jedoch, ist die Tatsache, dass Future zurückgegebenen Objekte aus asynchrone Datenbank-Abfragen können nur verwendet werden FutureBuilder Objekte, die wiederum nur zurück Widget Objekte. Ich brauche einfach ein String zurückgegeben, die ich dann nutzen kann, um entweder pass, um eine neue route über einen MaterialPageRoute Objekt, oder das display einen Fehler an den Benutzer ohne änderung der Routen. Gibt es eine Möglichkeit, dies zu tun mit Flattern? Rückkehr ein Widget ist für mich nutzlos, da ich nicht wollen, erstellen Sie ein neues Widget für die Anzeige. Ich bin mit Flattern 0.3.2 und Dart 2.0.0

Als ein Vereinfachtes Beispiel, wo muss ich anrufen die Datenbank-Abfrage:

@override
Widget build(Buildcontext context) {
    return new Column(
        mainAxisAlignment: MainAxisAlignment.center,
        children: <Widget>[
            new Container(
                padding: const EdgeInsets.all(16.0),
                child: new TextField(
                    keyboardType: TextInputType.number,
                    controller: _controller,
                    decoration: new InputDecoration(
                    hintText: 'Zip Code',
                ),
                onSubmitted: (string) {
                  return string;
                },
              ),
            ),
            new RaisedButton(
                onPressed: () {
                        //use regex to test against user input
                        if (_controller.text != null && _controller.text.isNotEmpty) {
                            RegExp zipCodeRegExp = new RegExp(r"^(\d{5})$");

                            //if the user input validates...
                            if (zipCodeRegExp.hasMatch(_controller.text)) {
                            zipCode = _controller.text;

                           //need to perform database query here and return a string, not a Widget

                            } else {
                               //an else condition here
                            }
                        } else {
                           //an else condition here
                        }
                    }
                }
            ),
        ],
    );
}

Vielleicht bin ich nicht nach dem "mantra" Flattern? Ich Schätze Ihre Aufmerksamkeit und Eingabe auf diesem.

InformationsquelleAutor Ad Astra | 2018-05-11
Schreibe einen Kommentar