【问题标题】:Flutter null-safety migration - top_snackbar_flutterFlutter 空安全迁移 - top_snackbar_flutter
【发布时间】: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


【解决方案1】:

正如h8moss 所说 你没有任何东西可以从 showTopBarErrorWidget 返回,所以删除 Widget 返回类型并使其无效

void showTopBarErrorWidget({required context, String? messageArg}) {

showTopSnackBar 无论如何都会执行,不需要返回它什么的。

【讨论】:

    猜你喜欢
    • 2021-04-17
    • 1970-01-01
    • 2021-07-14
    • 1970-01-01
    • 2021-06-28
    • 1970-01-01
    • 2021-12-10
    • 2021-07-21
    • 2021-09-11
    相关资源
    最近更新 更多