【发布时间】:2019-10-10 08:29:21
【问题描述】:
我想在 http 获取失败时显示 AlertDialog。函数 showDialog (https://api.flutter.dev/flutter/material/showDialog.html) 具有参数“@required BuildContext context”,但我想从我的异步函数 getNews() 调用 AlertDialog,它没有上下文值。
与 Java 类比,我在没有所有者的对话框中使用 null,我尝试将上下文值设置为 null,但不被接受。
这是我的代码:
Future<dynamic> getNews() async {
dynamic retVal;
try {
var response = await http.get(url));
if (response.statusCode == HttpStatus.ok) {
retVal = jsonDecode(response.body);
}
} catch (e) {
alertDlg(?????????, 'Error', e.toString());
}
return
retVal;
}
static Future<void> alertDlg(context, String titolo, String messaggio) async {
return showDialog<void>(
context: context,
barrierDismissible: false, // user must tap button!
builder: (BuildContext context) {
return AlertDialog(
title: Text(titolo),
...
);
}
【问题讨论】:
-
从
StatefulWidget传递您的Build上下文,您将在其中显示对您的getNews()函数的http 响应。 -
你能举个例子吗?我尝试将上下文传递给我的新小部件。它没有给出任何错误,但也没有显示任何警报
-
绕过 null 没有得到任何编译时错误但得到相同的 Failed assertion: line 'context != null': is not true.