如何在函数flutter之外访问函数集提供器中的变量

qnzebej0  于 2023-01-14  发布在  Flutter
关注(0)|答案(1)|浏览(121)

有一个项目列表,我想将它们添加到收藏夹中,并在另一个页面中显示收藏夹项目。

项目列表.dart

onPressed: () {
 Provider.of<MyAppProvider>(context, listen: false).addItems(items);},

我的供应商.dart

class MyAppProvider extends ChangeNotifier {
      List<items> selectedItems = [];

   void addItems(Items items) {
     selectedItems.add(items);
     notifyListeners();
   }

   List<Items> getSelectedItems() {
     return selectedItems;
   }
  }

收藏夹.dart

Class favorites extends StatelessWidget {
 const favorites({super.key});

 @override
 Widget build(BuildContext context) {
    List<Items> favoriteList = Provider.of<MyAppProvider>(context, listen:false).getSelectedItems();
   print(favoriteList);
}}

当我尝试打印favoriteList时,它返回[] null。当我刷新并转到Favorites页面时会发生这种情况

plicqrtu

plicqrtu1#

您希望在提供程序中更改数据时重新构建侦听器,正如@Ivo指出的,您在文件中使用了两个不同的提供程序。

收藏夹。dart应如下所示:

Class favorites extends StatelessWidget {
 const favorites({super.key});

 @override
 Widget build(BuildContext context) {
    List<Items> favoriteList = Provider.of<FitnessAppProvider>(context).getSelectedItems();
   print(favoriteList);
}}

通过写入listen: false,您向小部件指示它不应该在更改时重建或订阅提供程序,回调函数中经常出现这种情况,但显示该数据并希望保持最新的小部件中则不是这样。

相关问题