问题标签 [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 投票
3 回答
2845 浏览

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

我已添加// @dart=2.9到我的所有文件中,但build_runner不会抛出此错误:

0 投票
1 回答
3097 浏览

flutter - Dart null 安全性 - 如何禁用某些文件的 null 安全性分析?

问题:

一些 pub 包还不支持 null 安全性。

例如,intl_translation无法解析具有空安全运算符的文件,如果找到任何符号(如?、!等),则抛出如下错误。

然后它生成的 dart 文件也没有使用 null 安全性,并且在$ flutter run.

那么有没有办法为至少成功编译禁用警告或空安全?因为 $ flutter run --no-sound-null-safety没有帮助:(

感谢您的任何帮助!

0 投票
1 回答
128 浏览

flutter - 依赖冲突

我有点困惑。当我添加easy_localization依赖项并运行 flutter pub get 时,我会给出以下消息:

我切换到 Flutter 的稳定频道,我有以下 Dart 版本:

这是我的完整 pubspec 文件:

我不明白为什么我有依赖冲突。我也尝试删除 .lock 文件。你有什么想法哪里有问题吗?谢谢。

0 投票
1 回答
2733 浏览

flutter - 颤振国际化,国际代码生成不起作用

我用Android Studio创建了一个新的Flutter 项目。我正在使用null-safety,我在物理设备上运行应用程序,但代码生成不起作用,.dart_tool 文件夹中没有flutter_gen文件,只有flutter_build文件夹。

我按照Flutter 的官方国际化文档中的步骤进行操作

我没有使用Flutter Intl插件,因为它不支持null-safety(我知道您可以制作一个脚本以在每个生成的文件的顶部添加旧的 dart 版本作为解决方法)

颤振医生命令输出:

/pubscpec.yaml:

/lib/main.dart:

/lib/l10n.yaml:

lib/l10n/app_en.arb

lib/l10n/app_es.arb

0 投票
1 回答
420 浏览

dart - 飞镖 | Flutter:如何在 null 安全下从 Map 传递函数?为什么需要 bang 运算符?

背景:

我一直在研究如何使用 dart 代码使用 Map 传递函数。然而,我现在很难过。在使用空安全时使用 DartPad 时,我从以下代码中得到了一个意外的空值:

DartPad 控制台如下图所示:

代码运行后 DartPad 截图

问题:

我认为答案很容易,但我已经为此苦苦挣扎了一段时间。我的问题是:

  1. 我只希望,“这种水果尝起来像紫色!” 已在控制台中打印,所以我必须在这里遗漏一些东西。我是从地图中正确传递这个函数,还是有一种更安全的传递方式?

  2. 我想知道为什么在调用 exec() 函数时必须使用 bang 运算符。由于我已经定义了 fruits 映射包含 <String, Function>,编译器会理解它必须存在。我错过了什么?

再次,提前感谢您的任何建议,我们非常感谢社区接受。

更新:

我使用以下代码删除了 bang 运算符,并在下面的答案中给出了更正:

0 投票
3 回答
847 浏览

flutter - 如何使用 dart null-safety 对可能包含空值的列表进行排序

我有一个可能包含空值的字符串列表,如何对该列表进行排序?

我正在使用Flutter beta 通道,因此检查了null 安全性。这是我到目前为止所拥有的:

我如何得到这个结果:

0 投票
0 回答
66 浏览

flutter - 尽管遵循官方说明,但无法在 Flutter beta 中运行混合版本程序

我有一个想要开发成 Web 应用程序的现有项目,所以我切换到了 Flutter beta 通道。由于我还打算稍后重构我的代码以实现 null 安全性,因此我开始升级尽可能多的包依赖项,这些依赖项与 null 安全修订版可用。现在我的项目必须是一个混合版本的程序。

我遵循了官方的Migrating incrementally 和 Testing or running mixed-version programs说明,但我的 IDE (IntelliJ) 仍然充满了 Dart Analysis 空安全错误,并且我的项目由于相同的错误而无法构建。(我已经使缓存无效并重新启动了 IntelliJ,但没有效果。)

我已将 pubspec.yaml 中的最小 SDK 约束设置为2.12.0-0;在迁移的这一点上,我已添加// @dart=2.9到所有我不想考虑进行 null 安全分析的 Dart 文件的顶部,包括 main.dart;我正在使用该flutter run --no-sound-null-safety命令。

有人可以推荐如何将我的项目作为混合版本程序运行吗?

0 投票
0 回答
85 浏览

flutter - 实现启用空安全的类会导致编译错误

我实现的一堆没有空安全性的类(用于模拟目的)现在有编译错误。举个例子:

这会引发错误:

模拟 Firestore 做了类似的事情:

这会产生以下错误:

我怎样才能解决这个问题?

0 投票
1 回答
659 浏览

flutter - 如何将 Null 断言运算符与实例字段一起使用

如果对象的字段可以为空,我无法理解如何键入提升对象的字段。假设我有以下 Comment 类并尝试访问其一个可为空的字段:

Dart 编译器会给我一个错误,因为我试图将一个可为空的变量分配给一个不可为空的变量。根据我从研究这个主题中收集到的信息,不可能使用实例变量进行类型提升,因为可以修改实例变量,这会破坏声音的空安全性。我已经看到在这些情况下使用了 Null 断言运算符 (!.),但它似乎不适用于字段,只能用于方法。

使用 dart null-safety,我应该如何分配一个可为空的字段,例如 String?到一个不可为空的变量(字符串)。为了同样的效果,我应该如何将一个可为空的字段传递给一个需要非空参数的函数。

0 投票
1 回答
409 浏览

flutter - 失败的`assert`不会在具有空安全性的飞镖中抛出`AssertionError`,有什么解决方法吗?

一旦我开始过渡到null-safety
我就遇到了这个问题:
运行下面的测试

输出以下日志

请注意,尝试使用会_AssertionError输出错误

名称“_AssertionError”未定义,因此不能在“is”表达式中使用。尝试将名称更改为现有类型的名称,或创建名称为“_AssertionError”的类型。


请避免回答you are not supposed to catch errors
下面的代码纯粹是示范性
的,我在编写测试时遇到了问题,而 expect(fun(), throwsA(AssertionError)); 已包含在代码示例中,它不适合我的用例


这不是错误,而是预期的行为,请参阅问题 45191

你不应该期望assert(false)抛出一个运行时类型为 的对象AssertionError,它只能保证抛出一个可类型化的对象(即运行时类型为 的子类型的对象AssertionError),这可能是测试expect(type, AssertionError);失败的原因。


下面是我的医生和我的 pubspec