【问题标题】:Are optional parameters in null-safe dart automatically nullable? If no, is there an easy way to make my code null-safe?空安全飞镖中的可选参数是否可以自动为空?如果不是,是否有一种简单的方法可以使我的代码为空安全?
【发布时间】:2020-11-05 14:39:31
【问题描述】:

我注意到有更多用户使用 Dart/Flutter 标签在较新的 Dart SDK 版本中尝试空安全,我开始阅读它,从 this Medium article 开始。

我注意到在他们的所有示例中,他们都使用了位置所需的参数。但是 null 安全性如何与可选参数(包括位置参数和命名参数)一起使用?

可选参数本质上是null,这是否意味着所有可选参数都必须使用可空变量声明语法声明并启用空安全?添加? 似乎只是一个小小的不便,但它可能会破坏大量使用可选参数的代码。 dart 是否能够对可选参数进行例外处理(知道它们总是可以为空的),从而避免如此大的变化?或者是否有更简单的替代方法来使我的代码与 null 安全兼容以避免这些更改?

【问题讨论】:

    标签: dart nullable dart-null-safety


    【解决方案1】:

    在 null 安全 Dart 中,实际的可选参数必须具有默认值,或者它们必须可以为空(在这种情况下,它们具有默认默认值 null)。

    也不例外。由于默认值,可选参数本质上不能为空。

    您不应期望现有代码按原样使用 null 安全性。您应该将代码迁移到 null 安全。

    使您的代码安全的最简单方法是在您的项目上运行dart migrate。它将为您插入大部分必要的?s。

    【讨论】:

    • 类 SectionListTileWidget 扩展 StatefulWidget { final BuildContext tileContext; final IconData tileLeadingIcon;最终颜色 tileLeadingIconColor;最终字符串 tileTitle;最终功能 tileOnTapAction; SectionListTileWidget({需要this.tileContext,需要this.tileLeadingIcon,this.tileLeadingIconColor = 'null',需要this.tileTitle,需要this.tileOnTapAction}); @override _SectionListTileWidgetState createState() => _SectionListTileWidgetState(); }
    • 我在上面的消息中添加了我的有状态类代码,您能否建议我如何使 tileLeadingIconColor 可选或可为空,以便我可以根据我的应用程序要求传递/不传递此参数?请建议我。谢谢
    • 您需要将tileLeadingIconColor 字段设为可为空(类型Color?)或对其进行初始化。要对其进行初始化,请给参数一个默认值,或者(如果默认值不能按照默认值的要求为常量)使用初始化表达式对其进行初始化:{ ..., Color? tileLeadingIconColor, ...} : tileLeadingIconColor = tileLeadingIconColor ?? Color(something);
    猜你喜欢
    • 1970-01-01
    • 2021-10-29
    • 1970-01-01
    • 2012-02-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多