【发布时间】:2022-01-23 06:04:54
【问题描述】:
我进行了 dart 迁移以将我的项目更新为空安全。我有几个问题要分类,因为它是一个旧项目。 然而,有一件事让我很困惑,无法想出办法。
我正在使用top_snackbar_flutter 包并将其更新为 nullsafe 版本(最新 v1.0.2)。
我有以下代码:
Widget showTopBarErrorWidget({required context, String? messageArg}) {
showTopSnackBar(
context,
CustomSnackBar.error(
message: messageArg ??
"Error while starting the session Plans. Please try again",
),
displayDuration: Duration(seconds: 5));
}
Widget showTopBarSuccessWidget({required context, String? messageArg}) {
showTopSnackBar(
context,
CustomSnackBar.success(
message: messageArg ?? "Success",
),
);
}
此代码在不同的地方被引用以获取错误和成功。所以希望能解决这个问题并看到我所有与此小吃店相关的错误都消失了。
参考的例子之一:
Future verifyIapPurchase({BuildContext? context, Map? body}) async {
var _data = {"valid": false};
try {
final _res = await sl<ISubscriptionService>().verifyPurchase(body: body);
return (_res != null && _res.data != null) ? _res.data : _data;
} catch (err) {
showTopBarErrorWidget(
context: context,
messageArg: err.message ?? "Failed to verify the subscription");
return _data;
}
}
我意识到这个函数实际上是无效的, 但我需要返回一个小部件。我尝试添加 try 和 catch 块,但什么也没做。
Widget showTopBarErrorWidget({required context, String? messageArg}) {
try {
showTopSnackBar(
context,
CustomSnackBar.error(
message: messageArg ??
"Error while starting the session Plans. Please try again",
),
displayDuration: Duration(seconds: 5));
} on Exception catch (e) {
print(e);
rethrow;
}
}
【问题讨论】:
-
为什么你需要返回一个小部件?只需将返回类型更改为 null
-
void showTopBarErrorWidget({required context, String? messageArg}) { -
感谢@h8moss 的工作就像一个魅力。还有很多错误,只是想知道迁移是否值得。
标签: flutter dart dart-pub dart-null-safety snackbar