Flutter:为什么没有捕获到异常?
Flutter : Why is the exception not caught?
我想在发生错误时显示一个 snackbar。
异常有效但未在 main.dart 中捕获。
你能看出问题是什么吗?我是 Flutter 的新手,所以我可能不太擅长。谢谢。
main.dart
Future<void> _signInWithPhoneNumber() async {
try {
postPhoneInfo(
tokenValue,
_packageInfo.appName,
_packageInfo.version,
Theme.of(context).platform.toString().substring(15),
"phone number");
print("debug : try");
} catch (e) {
print("debug : catch");
// print(e);
ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text("${e.toString()}")));
}
}
这是 postPhoneInfo()
Future<phoneInfo> postPhoneInfo(String token, String appName, String appVersion,
String platform, String phone) async {
var queryParameters = {
'param1': token,
'param2': appName,
'param3': appVersion,
'param4': platform,
'param5': phone
};
var uri =
Uri.http('~~', '~~', queryParameters);
final response = await http.post(uri, headers: <String, String>{
'Content-Type': 'application/json; charset=UTF-8',
});
if (response.statusCode == 200) {
final parsedJson = jsonDecode(response.body);
if (parsedJson["Res"] == "1") {
print("user is registered");
return phoneInfo.fromJson(jsonDecode(response.body));
} else {
print("user is not registered");
throw Exception("user is not registered");
}
} else {
print(response.statusCode);
throw Exception('not connected');
}
}
ScaffoldMessenger.of(context) 必须在脚手架小部件中调用。检查它来自的上下文。
您需要 await
在 _signInWithPhoneNumber
中调用 postPhoneInfo
函数。否则,将在 async
上下文中抛出异常。
您必须使用 runZoned
才能捕捉到它们。
文档:https://api.flutter.dev/flutter/dart-async/runZoned.html
我想在发生错误时显示一个 snackbar。 异常有效但未在 main.dart 中捕获。 你能看出问题是什么吗?我是 Flutter 的新手,所以我可能不太擅长。谢谢。
main.dart
Future<void> _signInWithPhoneNumber() async {
try {
postPhoneInfo(
tokenValue,
_packageInfo.appName,
_packageInfo.version,
Theme.of(context).platform.toString().substring(15),
"phone number");
print("debug : try");
} catch (e) {
print("debug : catch");
// print(e);
ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text("${e.toString()}")));
}
}
这是 postPhoneInfo()
Future<phoneInfo> postPhoneInfo(String token, String appName, String appVersion,
String platform, String phone) async {
var queryParameters = {
'param1': token,
'param2': appName,
'param3': appVersion,
'param4': platform,
'param5': phone
};
var uri =
Uri.http('~~', '~~', queryParameters);
final response = await http.post(uri, headers: <String, String>{
'Content-Type': 'application/json; charset=UTF-8',
});
if (response.statusCode == 200) {
final parsedJson = jsonDecode(response.body);
if (parsedJson["Res"] == "1") {
print("user is registered");
return phoneInfo.fromJson(jsonDecode(response.body));
} else {
print("user is not registered");
throw Exception("user is not registered");
}
} else {
print(response.statusCode);
throw Exception('not connected');
}
}
ScaffoldMessenger.of(context) 必须在脚手架小部件中调用。检查它来自的上下文。
您需要 await
在 _signInWithPhoneNumber
中调用 postPhoneInfo
函数。否则,将在 async
上下文中抛出异常。
您必须使用 runZoned
才能捕捉到它们。
文档:https://api.flutter.dev/flutter/dart-async/runZoned.html