Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 为什么';这个."obj[';a';]=2';对于setter不';我不在飞镖班工作_Flutter_Dart - Fatal编程技术网

Flutter 为什么';这个."obj[';a';]=2';对于setter不';我不在飞镖班工作

Flutter 为什么';这个."obj[';a';]=2';对于setter不';我不在飞镖班工作,flutter,dart,Flutter,Dart,他为什么不工作? 我猜Dart与使用类原型的Js不同。使用此代码时: this._obj={'a':1}; 您正在调用自定义设置程序: set\u obj(v){ 打印('active!$v'); obj=v; } 但在使用以下方法时: this._obj['a']=2; 您正在访问地图。它没有自定义的print('active!$v')line实现 您可以在dart pad中尝试以下代码,以查看值是如何更新的: 类点{ var obj={}; 获取_obj=>obj; 设置对象(v){

他为什么不工作? 我猜Dart与使用类原型的Js不同。

使用此代码时:

this._obj={'a':1};
您正在调用自定义设置程序:

set\u obj(v){
打印('active!$v');
obj=v;
}
但在使用以下方法时:

this._obj['a']=2;
您正在访问地图。它没有自定义的
print('active!$v')
line实现

您可以在dart pad中尝试以下代码,以查看值是如何更新的:

类点{
var obj={};
获取_obj=>obj;
设置对象(v){
打印('active!$v');
obj=v;
}
setObj(){
this._obj={'a':1};//它通过使用自定义setter替换整个映射来工作
打印(_obj);
this._obj['a']=2;//它通过访问映射值来工作
打印(_obj);
} 
}

此外,自定义setter将替换整个
obj
映射,而
\u obj['a']
仅更新映射中分配给
a
键的值。

能否添加有关此的更多说明谢谢!我已经详细描述过了,谢谢!如何使用“this._obj['a']=2'active”set._obj(v){print('active!$v');obj=v;}”?我想要“this._obj['a']=2'print print('active!$v');您不能覆盖映射中的
[]
运算符。但是您可以创建一个在内部使用运算符的方法,并使用该方法来设置值,而不是
[]
。像这样的
void setValue(key,value){print('$key:$value');_obj[key]=value;}
class Point {
 var obj ={};
 get _obj => obj;
 set _obj(v){
   print('active!$v');
   obj=v;
 }
 setObj(){
   this._obj={'a':1};   // it's work print  active!{a: 1};
   this._obj['a']=2;    // it does't work  no print ;  why>?
  } 
}



void main() {
  Point().setObj();
}