如何在Flutter中创建两个相同的实例小部件



大家好,我只是测试一下"const";以及";新的";关键字,我发现:如果我想创建完全相同的实例,我必须:

  1. 添加";const";构造函数声明之前的关键字
  2. 添加";const";关键字放在我想使用对象的任何位置之前

像这样:

class A {
final int x;
const A(this.x);
}
// when use
var a = const A(0);
var b = const A(0);
identical(a,b); // this is true, they are same instance

---------------------------好吧,到目前为止,这还可以,但是----------------------------当我也想创建两个相同的";小部件";,我失败了!!

像这样:

class A extends StatelessWidget {
final int x;
const A(this.x,{Key? key })
: super(key: key);
@override
Widget build(BuildContext context) {
return Container();
}
}
// when use
var a = const A(0);
var b = const A(0);
identical(a,b); // this is false!!!!!!  why?????????

所以。。。。有人可以告诉我如何创建两个相同的实例小部件吗??谢谢。:(

欢迎使用SOF。

这是因为Dart首先实例化一个A,然后使其为常数,请不要将常数与static混淆。

第一个样本给出相同=true的原因是因为两个对象具有相似的hashCode(https://api.dart.dev/stable/2.10.5/dart-core/Object/hashCode.html)

hashCode用于对象比较操作,如==

你应该这样写,这实际上是无用的!:

var z = const A(0);
var a = z;
var b = z
identical(a,b);

或者您应该覆盖==和hashCode

相关内容

  • 没有找到相关文章

最新更新