问题标签 [dart-null-safety]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
11832 浏览

flutter - 错误:当使用健全的空安全性时,默认情况下库不能选择退出空安全性

在升级 Flutter 包以实现 null 安全性时,运行时出现此错误flutter test

答案就在那里,但我仍然困惑了一段时间,所以我在下面添加我的答案。

0 投票
3 回答
19975 浏览

flutter - 迁移到 Dart 空安全后出现“无法无条件调用运算符,因为接收器可以为空”错误

我正在升级一个基于 Flutter 框架的个人包。我在 Flutter Text 小部件源代码中注意到这里有一个空检查:

但是,textSpan!仍在使用!运算符。不应该textSpan在不使用!运算符的情况下提升为不可为空的类型吗?但是,尝试删除运算符会出现以下错误:

这是一个独立的示例:

我得到一个编译时错误:

错误:“字符串?”类型的值 无法从函数“myString”返回,因为它的返回类型为“String”。

或者,如果我尝试_mySting.length获取以下错误:

不能无条件访问属性“长度”,因为接收者可以为“空”。

我认为进行 null 检查会提升_myString为不可为 null 的类型。为什么不呢?

我的问题在 GitHub 上得到了解决,所以我在下面发布了一个答案。

0 投票
1 回答
1794 浏览

kotlin - Dart“健全的零安全性”与 Kotlin 零安全性有何不同?

这个 Dart 官方视频指出,Dart 所谓的“健全的 null 安全”比 Kotlin 的 null 安全设计要好,因为它可以根据变量是否声明为 null 来优化代码,以及其他语言(我假设这是指包括 Kotlin 在内的语言) ) 必须进行运行时检查以确保空值安全。

那么,Dart 做了哪些额外的优化呢?

它如何与不支持 null 安全的遗留代码库互操作,同时确保 null 安全?

0 投票
2 回答
643 浏览

flutter - 如何使用 Flutter null 安全性处理生成的代码?

我正在使用颤振改造包(https://pub.dev/packages/retrofit),但他们还没有空安全版本。当我运行构建并且生成的代码没有空检查时。如果没有手动将“// @dart=2.9”添加到每个生成的文件,我怎么能解决这个问题?

0 投票
1 回答
321 浏览

flutter - 颤振零安全

我有一个在引入空安全性之前做过的项目,现在我的代码有很多错误,我想将我的颤振和飞镖降级到空安全性之前。我怎样才能做到这一点?

0 投票
4 回答
3295 浏览

dart - Dart 空安全 - 以空安全的方式从地图中检索值

我有类似于这个示例代码的代码(别介意它没有意义):

飞镖分析器通过以下警告向我String s = myMap[1];发出警告:

“字符串?”类型的值 不能分配给“字符串”类型的变量。尝试更改变量的类型,或将右侧类型转换为“字符串”。

我看到这种情况正在发生,因为从地图中检索值可能会导致null. 为什么以下代码段会给我同样的警告?

0 投票
1 回答
78 浏览

flutter - Null 安全性和检查“Null”

这段代码

以前工作过,但现在测试因抛出而失败,

访问时抛出错误j['DialCode']('DialCode' 属性可能不存在),AFAIK 访问 DialCode 属性j['DialCode']给了我Null对象,但我如何摆脱使用j['DialCode']??""

0 投票
3 回答
6839 浏览

flutter - 在具有空安全性的颤动中将函数作为参数传递

升级到 Flutter 1.25.0-8.1.pre 后默认启用 null 安全,我开始修改我的项目的代码。一切正常,除了作为参数传递的函数,如下例所示:

onPressed是必需的参数,因此它不能为空,但是在尝试将函数传递给CupertinoButton时出现错误:

The argument type 'Function' can't be assigned to the parameter type 'void Function()?'.

我已经在寻找答案和可能的解决方案很长时间了,但我还没有找到。任何帮助将非常感激。

0 投票
4 回答
27618 浏览

dart - Dart null 安全性不适用于类字段

我已将我的 Dart 代码迁移到 NNBD / Null Safety。其中一些看起来像这样:

这会导致两个分析错误。对于_a += 'a';

值可以为 'null' 的表达式必须先进行 null 检查,然后才能取消引用。在取消引用之前尝试检查该值是否为“null”。

对于Bar() {

必须初始化不可为空的实例字段“_a”。尝试添加初始化表达式,或在此构造函数中添加字段初始化程序,或将其标记为“迟到”。

在这两种情况下,我已经完全按照错误提示进行了操作!那是怎么回事?

我正在使用 Dart 2.12.0-133.2.beta(12 月 15 日星期二)。

编辑:我发现这个页面说:

分析器无法对整个应用程序的流程进行建模,因此它无法预测全局变量或类字段的值。

但这对我来说没有意义——在这种情况下只有一个可能的流控制路径if (_a != null)——没有异步代码,而且 Dart 是单线程的——所以不是本地的_a += 'a';也没关系。_a

并且错误消息Bar()明确说明了在构造函数中初始化字段的可能性。

0 投票
0 回答
127 浏览

flutter - 我可以发布我的颤振应用程序并在生产中启用飞镖空安全功能吗

我已经阅读了多篇这样的文章或官方 dart 文档,flutter 开发人员应该尝试 dart 中的 null 安全功能。

然而,我们不应该发布具有空安全功能的生产应用程序。上面链接的第一篇文章(强调我的):

技术预览 2 的 Flutter 实验:今天。因为我们已经成功地将核心 Flutter 框架迁移到 null 安全性,您可以尝试 null 安全性来学习新的语言功能并使用一个小的 Flutter 示例进行试验。如果您是包作者,如果您有一个已由我们迁移的小型依赖项集,您也可以进行试用迁移。您需要传递一个实验标志,不应该在生产中使用它,也不应该发布任何迁移的包。

因此我的问题如下:

  1. 我们是否能够发布启用了 null 安全功能的 Flutter 应用程序?
  2. 如果他/她想发布具有 null 安全功能的 Flutter 应用程序(除了 null 安全性不是 100% 错误证明的问题),是否有任何人应该意识到的巨大缺点?