Flutter 如何调试双问号';上的空安全默认值类型错误';
我最近在使用双问号时遇到了一些奇怪的行为。 下面是示例代码:Flutter 如何调试双问号';上的空安全默认值类型错误';,flutter,dart,dart-null-safety,Flutter,Dart,Dart Null Safety,我最近在使用双问号时遇到了一些奇怪的行为。 下面是示例代码: 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'); } 程序永远不会运行到最后,甚至不会抛出任何错误消息 是否预期该行为?如何运行此代码 当我运行它时,我得到以下
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\u options.yaml
文件,该文件会覆盖Dart编译器检查,以便更宽松,在这种情况下,它可能不会检查类型(我不确定哪个选项会启用此功能,但我认为这是可能的)
检查分析选项的工作方式
我建议您始终通过将以下内容添加到分析选项文件来启用“强模式”:
analyzer:
strong-mode:
implicit-casts: false
implicit-dynamic: false
顺便说一句,如果您想尝试新的Dart NNBD(默认情况下不为空)实验功能,您需要使用Dart dev频道版本,并使用Dart--enable experiment=non-nullable file.Dart运行您的程序
要了解如何启用NNBD,请查看有关它的博客文章。首先,您应该使用String使您的strA
为空?strA
。无论如何,不能将“Object”类型的值分配给“String”类型的变量。
。该程序甚至不会编译。实际上,它可以在我的计算机上编译而没有任何错误(在Android Studio和DartPad上试用过),直到运行时才会抛出错误消息。主要问题发生在我试图从它的示例(Todo)学习riverpod包时,而我犯了一个非常大的转储错误,写id=id_uuid.v4()代码>到id=id_uuid.v4代码>。调试花了我一段时间,因为它只通过这一行,没有抛出任何错误消息。所以我在这里制作了一个小的可复制代码。感谢神秘的力量,这个简单的例子现在可以正常工作了。奇怪的是,今天早上在我的Android工作室(Dart 2.11.0-213.1.beta(beta))和DartPad online(基于Flatter 1.23.0-18.1.pre-Dart SDK 2.10.3)中发生了这样的事情。它现在全部打印出错误消息。非常感谢。