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
Dart 使用流进行属性更改_Dart_Dart Async - Fatal编程技术网

Dart 使用流进行属性更改

Dart 使用流进行属性更改,dart,dart-async,Dart,Dart Async,试图理解流是如何工作的,所以我写了这个 类ViewModelBase{ 最终列表_changeRecords=新列表(); 流的变化; 流获取更改{ //延迟初始化 如果(_changes==null) _changes=新的Stream.fromIterable(\u changeredges); 返回更改; } _raisePropertyChanged(旧值、新值、属性符号){ 如果(旧值!=新值){ _添加(新的PropertyChangedRecord(this,propertySym

试图理解流是如何工作的,所以我写了这个

类ViewModelBase{
最终列表_changeRecords=新列表();
流的变化;
流获取更改{
//延迟初始化
如果(_changes==null)
_changes=新的Stream.fromIterable(\u changeredges);
返回更改;
}
_raisePropertyChanged(旧值、新值、属性符号){
如果(旧值!=新值){
_添加(新的PropertyChangedRecord(this,propertySymbol,oldValue,newValue));
}
返回新值;
}
}
类属性更改记录{
最终视图模型基础视图模型;
最终符号属性Symbol;
最终目标值;
最终目标价值;
PropertyChangedRecord(this.viewModel、this.propertySymbol、this.oldValue、this.newValue);
}
并将其用作

void main(){
var p=新员工('waa',13);
p、 年龄=33334岁;
p、 名称='dfa';
p、 改变。听((p)=>打印(p));
p、 年龄=333834岁;
p、 名称='dfia';
}
类Person扩展了ViewModelBase{
字符串\u名称;
字符串get name=>\u name;
集合名称(字符串值)=>_name=_raisePropertyChanged(_name,value,#name);
国际年龄;
int get age=>\u age;
设置年龄(int值)=>_年龄=_raisePropertyChanged(_年龄,值,#年龄);
人(这个名字,这个年龄);
}
得到了以下异常

Uncaught错误:迭代期间并发修改:“\u GrowtableList”的实例(长度:4)

我认为这是因为流在添加新的PropertyChangedRecords时正在从列表中删除项,我该如何处理这一问题?

错误可能是由于流在迭代列表时添加了项造成的

您可以使用
StreamController
来创建流(参见示例)

类ViewModelBase{
//最终列表_changeRecords=新列表();
//流的变化;
最终StreamController _changeRecords=新StreamController();
Stream get changes=>\u changecords.Stream;
_raisePropertyChanged(旧值、新值、属性符号){
如果(旧值!=新值){
_添加(新的PropertyChangedRecord(this,propertySymbol,oldValue,newValue));
}
返回新值;
}
}

如果不是为了了解流,您可以使用软件包获得有关模型更改的通知。这是为了学习,我希望避免脏检查和调用deliverchanges();)