flutter - 未处理的异常:输入“未来”' 不是类型 'Future 的子类型'
问题描述
我正在尝试AlertDialog
在 Dart 中制作一个可重用的并且能够制作一个。UI 显示并且运行良好。这段代码中唯一的问题是,当我按下保存按钮时,会出现以下错误:未处理的异常:类型“未来”不是“未来”类型的子类型。下面是我的AlertDialog
课:
enum alertDialogAction { cancel, save }
class Dialogs {
static Future<alertDialogAction> alertDialog(
BuildContext context,
String title,
String body,
) {
final action = showDialog(
context: context,
barrierDismissible: true,
builder: (BuildContext context) {
return AlertDialog(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(10),
),
title: Text(title),
content: Text(body),
actions: <Widget>[
FlatButton(
onPressed: () =>
Navigator.pop(context,alertDialogAction.cancel),
child: Text("cancel")),
RaisedButton(
color: Colors.blueAccent,
onPressed: () =>
Navigator.of(context).pop(alertDialogAction.save),
child: Text(
"save",
style: TextStyle(color: Colors.white),
)),
],
);
});
return (action != null) ? action : alertDialogAction.cancel;
}
}
这是我在 index.dart 中的称呼:
final action=await Dialogs.alertDialog(context,"title", "body");
if (action == alertDialogAction.save){
//code runs
}
解决方案
这是因为您Future<dynamic>
通过声明同时将函数final action
的返回类型指定为a来返回 a 。static
alertDialog
Future<alertDialogAction>
为避免将来出现此类问题,请始终为您声明的所有变量指定特定类型。
Future<alertDialogAction> action = showDialog(
context: context,
barrierDismissible: true,
builder: (BuildContext context) {
return AlertDialog(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(10),
),
title: Text(title),
content: Text(body),
actions: <Widget>[
FlatButton(
onPressed: () =>
Navigator.pop(context,alertDialogAction.cancel),
child: Text("cancel")),
RaisedButton(
color: Colors.blueAccent,
onPressed: () =>
Navigator.of(context).pop(alertDialogAction.save),
child: Text(
"save",
style: TextStyle(color: Colors.white),
)),
],
);
});
并这样称呼
alertDialogAction action=await Dialogs.alertDialog(context,"title", "body");
推荐阅读
- swift - Using SwiftNIO and SwiftNIOHTTP2 as an HTTP2 client
- javascript - Connect express with react application
- python - GCP:在哪里安排写入 BigQuery 的 PubSub 订阅者
- ruby-on-rails - 具有货币字段类型的 Searchkick 和 PostgreSQL
- android - MongoDB Mobile 是否构建在 SQLite 之上?
- r - 在 R 中使用聚合函数过滤特定值
- python - PyTorch - 将张量与标量相乘得到零向量
- azure - 订阅 Azure IoT 中心设备事件
- javascript - TypeError t.apply 不是函数
- amazon-web-services - .NET 核心 | 身份服务器 | 亚马逊AWS | 无服务器 | 拉姆达