Flutter 空安全迁移 - top_snackbar_flutter

Posted

技术标签:

【中文标题】Flutter 空安全迁移 - top_snackbar_flutter【英文标题】:Flutter null-safety migration - 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 的工作就像一个魅力。还有很多错误,只是想知道迁移是否值得。 【参考方案1】:

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

void showTopBarErrorWidget(required context, String? messageArg) 

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

【讨论】:

以上是关于Flutter 空安全迁移 - top_snackbar_flutter的主要内容,如果未能解决你的问题,请参考以下文章

手把手教你将项目迁移到Flutter2.0 空安全

我迁移到空安全,我无法运行“flutter pub run build_runner build”而不抛出错误

将颤振代码迁移到空安全后,模拟对象不接受“任何”

社区说 |Flutter 2 迁移实践

尝试在 Flutter 中获取地点的自动完成位置并在点击的地点上显示详细信息时出现空安全错误

Flutter 空安全