Flutter 为什么Dart中的const小部件不相同?
当我们对使用Flutter 为什么Dart中的const小部件不相同?,flutter,dart,widget,constants,Flutter,Dart,Widget,Constants,当我们对使用const构造函数创建的两个小部件调用idential()时,它返回false。而在为两个非小部件对象调用相同的函数时,它返回true 为什么呢 void main() { final a = const Center( child: const Padding(padding: const EdgeInsets.all(8),) ); final b = const Center( child: const Padding(padding: cons
const
构造函数创建的两个小部件调用idential()
时,它返回false。而在为两个非小部件对象调用相同的函数时,它返回true
为什么呢
void main() {
final a = const Center(
child: const Padding(padding: const EdgeInsets.all(8),)
);
final b = const Center(
child: const Padding(padding: const EdgeInsets.all(8),)
);
assert(identical(a, b)); // false
var a1 = const EdgeInsets.all(8);
var b1 = const EdgeInsets.all(8);
assert(identical(a1, b1)); // true
}
[错误:flatter/lib/ui/ui\u dart\u state.cc(199)]未处理的异常:“包:todo\u改进/main.dart”:失败的断言:第17行位置8:“相同(a,b)”:不正确
经过大量研究,我发现了这一点 现在,第一种情况和第二种情况之间的一个主要区别是,在第一种情况下,a和b是
Widget
s,而在第二种情况下,它们不是
现在,flatter有一个--track widget creation
标志,默认情况下在调试模式下启用该标志
这是使您的const
小部件看起来不相同的罪魁祸首
现在这意味着当你在发布模式下运行你的应用程序时,你的小部件将确实是编译时常量,因此相同的
函数将确实返回true
将代码更改为(更改原因是在发布模式下忽略断言调用)
然后尝试使用flatter run--release
在release
模式下运行代码,并检查控制台以查看是否会打印true
。如果使用flatterrun
在调试中运行,您将在控制台中看到false
有关更多信息,请参阅此部分。我无法重现您描述的行为。请创建一个。抱歉。你能再检查一下吗。禁用2行:var a=常量边集。全部(8);var b=常数边集全部(8);你的代码没有改变。我无法复制。请创建一个。以下是错误:。对不起。@Owo这是否澄清了您的问题?非常感谢。!!!我不知道有这样的事。很高兴能帮上忙。一定要考虑接受这个答案,以便它能帮助别人解决同样的问题。
final a = const Center(
child: const Padding(padding: const EdgeInsets.all(8),)
);
final b = const Center(
child: const Padding(padding: const EdgeInsets.all(8),)
);
print(identical(a, b));