我正在将值从一个页面传递到另一个页面,正如官方文档中提到的那样。https://flutter.dev/docs/cookbook/navigation/returning-data
我实现了两个不同的按钮。
-
提交按钮,返回String列表。
-
关闭返回null的按钮。
ElevatedButton( onPressed: () async { _formKey.currentState?.save(); if (_formKey.currentState!.validate()) { _formKey.currentState?.fields.forEach((key, value) { // return a list with the names widget._names.add(value.value); print(widget._names); }); Navigator.pop(context, widget._names); } }, child: Text('Speichern & Zurück')), OutlinedButton( onPressed: () { Navigator.pop(context, null); }, child: Text('Verwerfen & Zurück'))
该值是Navigator.push() -方法的返回值。
result = Navigator.push(
context,
MaterialPageRoute(
builder: (context) => PlayerNames(
_currentBoySliderValue,
_currentGirlSliderValue)));
我捕获空的未来通过简单地检查:
if (result != null) {
// does not catch Future<dynamic> with null content
}
不幸的是,Future(结果)只有在Page PlayerNames()从未被调用时才为空,因为按下返回null的按钮不会使Future变为空,而是使其内容变为空。这导致了一种意想不到的行为,即如果用户在页面中没有插入数据并使用按钮,这将导致返回null,我的方法将在将来使用null值调用。
是否有机会将Future设置为null,如果存储此信息的值是目标?我不想添加代码来检查future的值是否为空,因为它并不总是允许有空数据。
您应该在等待PlayerNames
的响应时添加await
。
要在Flutter中从另一个屏幕返回数据,必须等待屏幕完成并返回数据。await
关键字等待屏幕结束
如需进一步说明,请点击此链接
也许,而是返回null,只是返回一个空数组'[]',然后验证结果是否为空。
Navigator.pop(context, []);
if (result.isEmpty()) {
// do some stuff
}
如何将返回数据类型更改为Map?
ElevatedButton(
onPressed: () async {
_formKey.currentState?.save();
if (_formKey.currentState!.validate()) {
_formKey.currentState?.fields.forEach((key, value) {
// return a list with the names
widget._names.add(value.value);
print(widget._names);
});
Navigator.pop(context, { 'isExistData': true, 'data': widget._names });
}
},
child: Text('Speichern & Zurück')),
OutlinedButton(
onPressed: () {
Navigator.pop(context, { 'isExistData': false });
},
child: Text('Verwerfen & Zurück'))
if (result['isExistData']) {
// Do something
var data = result['data']
}