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 通过putifAbsent方法添加新项目后,我的地图不会更新_Flutter_Dart_Flutter Test - Fatal编程技术网

Flutter 通过putifAbsent方法添加新项目后,我的地图不会更新

Flutter 通过putifAbsent方法添加新项目后,我的地图不会更新,flutter,dart,flutter-test,Flutter,Dart,Flutter Test,我的地图不接受我添加的任何新值。 这是我的提供商: 进口“包装:颤振/材料.省道”; 导入“../classes/transaction.dart”; 使用ChangeNotifier类事务{ 映射_userTransactions={ 'ju':TransactionMount:45,date:DateTime.now,标题:'socks',帐户类型:'timr',注释:'joa',图标:IconIcons.today,,id:'kololdcd',重复:'always' } ; 映射获取用

我的地图不接受我添加的任何新值。 这是我的提供商:

进口“包装:颤振/材料.省道”; 导入“../classes/transaction.dart”; 使用ChangeNotifier类事务{ 映射_userTransactions={ 'ju':TransactionMount:45,date:DateTime.now,标题:'socks',帐户类型:'timr',注释:'joa',图标:IconIcons.today,,id:'kololdcd',重复:'always' } ; 映射获取用户事务{ 打印用户事务; 返回{…\u userTransactions}; } void addNewTransaction{String txTitle,double txAmount,DateTime chosenDate, 字符串txAccountType、字符串txNotes、字符串txRepeat、图标txIcon、字符串txId}{ 如果txRepeat!=“Einmalig”&&\u userTransactions.containsKeytxId{ _userTransactions.updatetxId,existingItem=>Transaction 标题:existingItem.title, 金额:existingItem.amount, 日期:DateTime.now, id:DateTime.now.toString, accountType:existingItem.accountType, 备注:existingItem.notes, 重复:existingItem.repeat, 图标:existingItem.icon, ; }否则{ _userTransactions.putIfAbsenttxId,=>Transaction 标题:txTitle, 金额:txAmount, 日期:chosenDate, id:DateTime.now.toString, accountType:txAccountType, 注:txNotes, 重复:txRepeat, 图标:txIcon, ; } //最终结果不能再改变了 打印用户事务; 通知听众; }
} 问题是您的类小部件是一个无状态小部件。您不能更新无状态小部件,因为能够更新它意味着它具有可更新的状态。对于您的方法,您必须将小部件更改为有状态:

类TransactionList扩展了StatefulWidget{ TransactionList{Key}:超级键; @凌驾 State get createState=>\u TransactionListState; } 类_TransactionListState扩展状态{ @凌驾 小部件构建上下文上下文{ ... } } 另一种允许您将小部件保留为无状态小部件的替代解决方案是,您不直接调用Provider.of,而是使用自动将提供程序数据拉到生成器方法。消费者还将在事务对象更新时处理小部件的重建

类TransactionList扩展了无状态小部件{ @凌驾 小部件构建上下文上下文{ 退货消费者 生成器:上下文、事务数据、\u{ ... }, ; } }
谢谢,但我没有工作。问题不在于听众。映射在提供程序文件中没有更新,这很奇怪。您可以在第二个print语句中看到它id没有更新。My\u userTransaction映射在提供程序类中没有更新。您知道provider类中是否有错误吗?监听器应该没有问题,因为我添加了消费者小部件,它运行build方法,但是映射在那里不是updatet,因为它在提供者映射中不是updatet。问题应该是提供程序。@georg您还没有显示创建提供程序或调用addNewTransactions的代码,因此在这一点上,我提出的任何建议都是瞎猜。但另一方面,你为什么要叫putIfAbsent?为什么不使用_userTransactions[txId]=…?感谢您的贡献。我解决了这个问题。我在调用addTransaction方法的类中添加了一个侦听器。我认为我只需要监听器,我需要提供者信息,而没有考虑提供者的功能。谢谢你问我从哪里调用这个方法。