Flutter 更改一个提供程序中的属性会将另一个提供程序中的属性更改为列表 更新-我实际上发现它是一个。

Flutter 更改一个提供程序中的属性会将另一个提供程序中的属性更改为列表 更新-我实际上发现它是一个。,flutter,flutter-provider,Flutter,Flutter Provider,我有两个提供者,一个是EntriesProvider,另一个是EntryProvider。我在创建条目时使用EntryProvider和EntriesProvider加载保存到数据库中的所有条目。我有一个问题,我相信这可能是我对如何使用提供者的理解。一旦我将数据库数据加载到EntriesProvider中,我就会将该数据加载到ListView中。单击某个项目后,我将该列表中的条目传递到视图中以进行填充和编辑 我的问题是,当我编辑条目而不保存它时,我可以看到ListView中发生的更改,这不是我想

我有两个提供者,一个是EntriesProvider,另一个是EntryProvider。我在创建条目时使用EntryProvider和EntriesProvider加载保存到数据库中的所有条目。我有一个问题,我相信这可能是我对如何使用提供者的理解。一旦我将数据库数据加载到EntriesProvider中,我就会将该数据加载到ListView中。单击某个项目后,我将该列表中的条目传递到视图中以进行填充和编辑

我的问题是,当我编辑条目而不保存它时,我可以看到ListView中发生的更改,这不是我想要的。我试图清除EntryProvider,因为我认为属于它的数据与EntriesProvider是分开的。但现在我尝试了很多东西,却不知道该怎么办。当我只要求EntryProvider更新其侦听器时,为什么要更新列表

class EntryProvider扩展了ChangeNotifier{
进入(u)进入;;
构建语境;
EntryProvider();
进入获取进入{
返回(u)条目;;
}
void setEntryContext(条目EntryToBase,BuildContext){
此._entry=entryToBeSet;
this.context=上下文;
notifyListeners();
}
void clearEntryContext(){
此项。_entry=null;
this.context=null;
notifyListeners();
}
void addImageToEntry(字符串图像路径){
getEntry.images.add(imagePath);
notifyListeners();
}
void removeImageAt(int索引){
getEntry.images.removeAt(索引);
notifyListeners();
}
void addTagToEntry(字符串tagText){
getEntry.tags.add(tagText);
notifyListeners();
}
void removeTagAt(整数索引){
getEntry.tags.removeAt(索引);
notifyListeners();
}
Future saveEntry()异步{
如果(getEntry.id!=null){
wait Provider.of(上下文,侦听:false)
.updateEntry(getEntry);
}否则{
wait Provider.of(上下文,侦听:false)
.补遗(获取条目);
}
}
}
class EntriesProvider扩展了ChangeNotifier{
列表项=[];
EntriesProvider(此._条目);
UnmodifiableListView获取条目=>UnmodifiableListView(\u条目);
int get length=>_entries.length;
列表获取getEntriesSortedByDateReversed{
列表条目复制=条目;
entriesCopy.sort((a,b)=>a.entryDate.compareTo(b.entryDate));
返回entriesCopy.reversed.toList();
}
列出getEntries(日期时间日期时间){
列表entriesToBeSorted=条目
.在哪里(
(entry)=>DateFormat.yMMMd().format(entry.entryDate)。包含(
DateFormat.yMMMd().format(dateTime),
),
)
.toList();
entriesToBeSorted.sort((a,b){
返回a.entryDate.compareTo(b.entryDate);
});
回程离心;
}
}
class JournalListView扩展StatefulWidget{
布尔·伊斯德拉韦罗彭;
最终转换数据转换数据;
JournalListView(this.isDrawerOpen、this.transformData);
@凌驾
_JournalListScreenState createState()=>\u JournalListScreenState();
}
类_JournalListScreenState扩展状态{
列表条目=[];
列表筛选项=[];
日期时间日期时间集;
AppDataModel AppDataModel;
@凌驾
void initState(){
super.initState();
dateTimeSet=DateTime.now();
}
Widget\u buildEntryList(BuildContext上下文){
返回使用者(生成器:(上下文、入口模型、子项){
打印(entryModel.entries);
列表条目=entryModel.getEntries(dateTimeSet);
返回容器(
约束:BoxConstraints(
最大高度:650,
maxWidth:double.infinity,
),
子:容器(
子项:entries.length>0
?ListView.builder(
itemCount:entries.length,
填充:所有边缘设置(2.0),
itemBuilder:(上下文,索引){
回墨槽(
onTap:(){
if(widget.isDrawerOpen){
抽屉();
}否则{
导航器.of(上下文).push(
PageRouteBuilder(
转换持续时间:持续时间(毫秒:650),
页面生成器:
(上下文、动画、第二动画){
最终条目copiedEntry=条目[索引]
.抄袭(
id:entries[index].id,
标题:条目[索引]。标题,
说明:
条目[索引]。说明,
entryDate:条目[索引]。entryDate,
感受一次尝试:
条目[索引]。feelingOnEntry,
图像:条目[索引]。图像,
位置:条目[索引]。位置,
标记:条目[索引]。标记,
时间:条目[索引]。时间,
天气:条目[索引]。天气);
Provider.of(上下文,侦听:false)
.setEntryContext(条目,上下文);
返回日志视图(copiedEntry);
}),
);
}
},
孩子:英雄(
标记:“${entries[index].entryDate}${entries[index].id}”,
子项:_buildEntryLayout(上下文,条目[索引]),
),
);
},
)
Entry(
 images: images ?? List.from(this.images),
);