Я читаю вводимые пользователем данные (в данном случае почтовый индекс) из TextField
, которые мне нужно проверить на предмет достоверности в базе данных.Однако мне нужно сделать асинхронный запрос к базе данных внутри кнопки отправки (RaisedButton
в данном случае) onPressed: () {}
лямбда-функции.В большинстве языков программирования это довольно простая и простая задача.Однако проблема, с которой я сталкиваюсь во Flutter, заключается в том, что Future
объекты, возвращаемые из асинхронных запросов к базе данных, могут потребляться только FutureBuilder
объектами, которые, в свою очередь, возвращают только Widget
объекты.Мне просто нужно вернуть String
, который я могу затем использовать для перехода к новому маршруту через объект MaterialPageRoute
или для отображения ошибки пользователю без изменения маршрутов.Есть ли способ сделать это с Flutter?Возвращение виджета для меня бесполезно, так как я не хочу создавать новый виджет для отображения.Я использую Flutter 0.3.2 и Dart 2.0.0
В качестве упрощенного примера, когда мне нужно вызвать запрос к базе данных:
@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
}
}
}
),
],
);
}
Возможно, я не следую "мантре"Флаттера?Я ценю ваше внимание и вклад в это.