flutter - 如何调试双问号“??”上的空安全默认值类型错误
问题描述
我最近在使用双问号时遇到了一些奇怪的行为。这是示例代码:
void main() {
String strA;
String strB;
print('start');
strB = strA ?? 5; // wrong use of default value type. It should be a String here.
print('end');
}
该程序永远不会运行到最后,甚至不会抛出任何错误消息。
行为是否符合预期?
解决方案
你是如何运行这段代码的?
当我运行它时,我得到这个输出:
▶ dart test.dart
start
Unhandled exception:
type 'int' is not a subtype of type 'String'
#0 main (file:///Users/renato/programming/projects/test.dart:6:3)
正如我所料。
你使用的是什么 Dart 版本(运行dart --version
)?确保您拥有最新版本,例如2.10
.
如果您仍然有问题,您可能有一个本地analysis_options.yaml
文件覆盖 Dart 编译器检查以更宽松,在这种情况下它可能不会检查类型(我不确定哪个选项可以启用此功能,但我想这是可能的)。
在此处查看分析选项的工作原理。
我建议您始终通过将其添加到您的分析选项文件来启用“强模式”:
analyzer:
strong-mode:
implicit-casts: false
implicit-dynamic: false
顺便说一句,如果你想尝试新的 Dart NNBD (Not-Null-By-Default) 实验功能,你需要使用 Dart 开发频道发布并使用dart --enable-experiment=non-nullable file.dart
.
要了解如何启用 NNBD,请查看关于它的null-safety tech preview 2博客文章。
推荐阅读
- android - 如何使用范围存储创建和删除公共文件,Android Q
- javascript - 在 React Router v6.+ 中渲染多个元素
- java - 我有一个关于求和问题的 Java 逻辑问题
- reactjs - React 多条件检查(JSX)
- javascript - 如何根据单击的按钮动态更改从 API 获取的数据?
- php - 将外部 /api/entity/1 URL 重写为内部 /api/entity.php/1(或 /api/entity.php?id=1)的通用方法
- nouislider - noUISlider - 在连接段内放置标签的任何方式
- python - 如何使用 CRONTAB 在启动时运行 python
- html - 使用 vscode 时,我无法在 linux ubuntu 中查看 iframe
- auth0 - 获取服务器驱动的 Auth0 `Resource Owner Password Flow` 的有效 ID 令牌