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

flutter - 空安全 AppLocalization 字符串的最佳方法

问题

我正在使用AppLocalizations.of(context).myString我的 null 安全颤振应用程序中的字符串国际化。

我的 IDE 告诉我AppLocalizations.of(context)可以返回 null。处理这个问题的最佳方法是什么?有没有办法确保AppLocalizations.of(context)永远不会返回 null?

目前,我正在采用以下方法:

完整的项目代码

发布规范.yaml

l10n.yaml

l10n/app_en_US.arb

l10n/app_en.arb

主要.dart

0 投票
2 回答
403 浏览

flutter - Flutter 空安全迁移

当我使用 dart 迁移工具时,它建议对 AnimatedBuilder 的构建器进行强制转换:

向表达式添加强制转换(非向下转换)

这真的有必要吗?

在此处输入图像描述

0 投票
3 回答
371 浏览

flutter - 继承 Dart Null 安全性以实现可测试性

我有一个与 Dart Null Safety 概念相关的问题。

想象一下,我有一个名为Bird的课程

鸽子

现在,由于 Dart 上的 Null Safety,必须实例化角色对象。我想在构造函数中实例化它,因为我希望鸟类可以使用 Mockito 进行测试。

但是,当我写这篇

Pigeon 类显示错误,因为Bird 类没有任何零参数构造函数。

我的解决方法是使用这样的不需要的参数。

但是,我不喜欢 GetIt 部分作为我的默认值。此外,另一个程序员可能认为这是一个可选参数,因为我没有将它标记为必需,这可能会导致错误。

那么,解决这种情况的最佳实践是什么?

0 投票
0 回答
783 浏览

flutter - 如何在 Flutter 中使用 nullsafety 测试 DropdownButton?与

当使用 flutter_test 库在 Flutter 中对 DropdownButton 进行烟雾测试时,出现以下错误:

随后是一个堆栈跟踪,其中发生了一些递归,重复 visitChildren 和 _unmount 数百次:

该错误仅在测试时发生,并且应用程序在物理设备上运行而没有任何错误。

主要.dart

widget_test.dart

DropdownButton<String?>可以通过将main.dart 设置为来“修复”该错误DropdownButton<String>。我明白 null 不能是 DropDownButton 的值,因此不能是“?” 可以直接删除,否则无论如何它都会在 null 上崩溃。但是我不明白为什么当数据足够时它会崩溃。

此处的最小代码示例。

0 投票
2 回答
2290 浏览

firebase - 如何在简单的flutter-dart代码中使用对象snapshot.data实现空安全?

我是颤振/飞镖编码的新手,请帮我解决以下问题:

这是我试图从 FireStore 集合“DinnerNames”中获取数据的代码,但我在该行的snapshot.data对象上得到一个分析错误:

itemCount:snapshot.data.documents.length

问题:

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

这是生成错误的代码示例:

这是颤振版本:

0 投票
0 回答
247 浏览

flutter-dependencies - Dart 2.10 和 `required` 关键字

我对 Dart 和 Flutter 都是新手,所以如果这离题了,请多多包涵。但是我已经用尽了我的 Googlefu 并且无法找到答案。

语境

我正在运行 Dart 2.10.4 和 Flutter 1.22.5。在这一点上,我只是从 Github 克隆了一堆示例应用程序并在本地运行它们

  • 跑步flutter pub get
  • 然后在 Android Studio 中点击 Run

我熟悉其他语言的包管理,并阅读过有关与 Dart 的潜在差异的文档,特别是

pub get 尽可能使用锁定在其中的依赖项的版本(pubspec.lock)

“如果可能”告诉我pubspec.lock文件并不总是得到尊重。我熟悉的行为是“如果不可能”引发错误。

我应该提一下,我克隆的所有存储库都不是非常新的。它们都有一年多的历史,但都有最近的更新。

发生了什么

所有的项目中,做一个flutter pub get 改变 pubspec.lock。这些更改都是将依赖项升级到一个nullsafety版本。例如boolean_selector1.0.52.1.0-nullsafety.1。起初这让我很困惑。深入pubspec.yaml研究受影响包的文件后发现,我的 Dart 版本确实可以满足 SDK 约束,例如boolean_selector。由于required关键字,这些版本更改破坏了所有代码库。

问题 1

据我了解,Null-Safety 更改的一部分是@required注释变为required. 据我了解,这些变化要到 Dart 2.12 才会出现。那么这里发生了什么?为什么包要发布nullsafetyDart 2.10 的版本?

问题2

pubspec.lock我当前的 Dart 版本可以满足该文件。再次使用该boolean_selector示例。有问题的 repo 将其锁定为 1.0.5,其 SDK 约束为sdk: '>=2.0.0 <3.0.0'. 我正在运行 Dart 2.10。一切都应该没问题。为什么要pub get强制升级到最新的兼容版本?

问题 3

我认为好的也许required是我们可以为 Dart 2.10 启用的实验性功能。我阅读了有关 NNBD 并dart migrate尝试过的信息。它似乎没有做任何事情required并且总是会出错。我读到dependency_overrides要使用更新版本的analyzer. 我会得到同样的错误。我显然错过了一些东西。如果 Dart 2.10 兼容required(而不是@required),我该如何做到这一点?

0 投票
2 回答
828 浏览

dart - 带有命名参数的回调函数中的 Dart Null 安全性

以下代码在使用 Null Safety 编译时失败,出现以下错误:

参数namedParam不能有值,null因为它的类型,并且没有提供非空默认值

在没有 Null Safety 的情况下编译时,代码编译得非常好。

编译失败的具有Null Safety 的DartPad

没有 Null Safety 的DartPad编译良好

有没有办法解决它:

  1. 无需切换到位置参数
    AND
  2. 不制作命名参数nullable
0 投票
4 回答
4425 浏览

flutter - 相当于 Dart 中 Swift 的 if let 和 guard let

刚开始使用原生 iOS 背景的 Flutter,所以我有一个关于 Dart beta 空安全性的快速问题。

所以在 Swift 中,因为他们和 Kotlin 一样从一开始就有 null 安全的想法,所以我非常喜欢该语言的两个特性是if letguard let. 这两个使使用可选值变得更加容易。我不确定 Dart 的 beta 版本是否有类似的东西。

谢谢

0 投票
7 回答
37445 浏览

flutter - 库 'package:flutter/material.dart' 是遗留的,不应导入到 null 安全库中

我有一个空安全库,在示例文件夹中我使用以下导入:

但是,linter 给了我以下警告:

库 'package:flutter/material.dart' 是遗留的,不应导入到 null 安全库中。尝试迁移导入的库。import_of_legacy_library_into_null_safe

示例项目的 pubspec.yaml 文件指定了 Dart SDK 的 beta 版本:

material.dart 现在不是已经转换了吗?我需要在 pubspec.yaml 中添加其他内容还是等待稳定版本发布?

0 投票
1 回答
58 浏览

dart - 值可以为“空”的表达式必须先进行空检查,然后才能取消引用

我正在使用具有空安全模式的 Dart。我在下一个代码中有问题。

我收到下一个错误:

在此处输入图像描述

但为什么?我正在检查job.cmd_args != null