Flutter 来自颤振提供程序包的使用者未更新

Flutter 来自颤振提供程序包的使用者未更新,flutter,updates,consumer,flutter-provider,Flutter,Updates,Consumer,Flutter Provider,我有一个产品列表,其中有一个心形图标按钮,将其标记为收藏夹。使用提供者,我能够更新数据,但对于以下情况,它不能直接工作 Consumer<ProductProvider>( builder: (ctx, product, child) => IconButton( icon: Icon( widget.product.isFavourite ? Icons.favorite : Ic

我有一个产品列表,其中有一个
心形图标按钮
,将其标记为收藏夹。使用提供者,我能够更新数据,但对于以下情况,它不能直接工作

Consumer<ProductProvider>(
              builder: (ctx, product, child) => IconButton(
                icon: Icon(
                  widget.product.isFavourite ? Icons.favorite : Icons.favorite_border,
                  color:
                      widget.product.isFavourite ? Colors.orange : iconColor,
                ),
                onPressed: () => setState((){
                  widget.product.isFavourite = !widget.product.isFavourite;
                }) ,
              ),
            ),
//产品详细信息页面心脏按钮代码

actions: <Widget>[
          Padding(
            padding: const EdgeInsets.only(right: 10.0),
            child: IconButton(
              icon : Icon(
                product.isFavourite ? Icons.favorite : Icons.favorite_border,
                color:
                    product.isFavourite ? red : iconColor,
              ),
              onPressed: () => setState((){
                product.toggleIsFavourite();
              }),
            ),
          ),
        ],

操作:[
填充物(
填充:仅限常量边集(右:10.0),
孩子:我的钮扣(
图标:图标(
product.isFavorite?Icons.favorite:Icons.favorite\u边框,
颜色:
product.IsFavorite?红色:iconColor,
),
按下时:()=>设置状态(){
product.toggleisfavorite();
}),
),
),
],
测试用例 1) 我单击产品卡中的
心脏图标
,而不是产品详细信息页面中的
心脏图标


结果:一切正常


2) 我单击产品详细信息页面中的
心脏图标
,而不是主页上产品卡小部件上的
心脏图标


结果:主页上产品卡的心形图标不会更新,除非列表视图的数据被刷新或主页被重建,即使我正在使用
消费者
仅更新产品卡中该
心形图标
的值



如果您在这些屏幕上方设置了正确的通知程序,请重试

Consumer<ProductProvider>(
          builder: (ctx, product, child) => IconButton(
            icon: Icon(
              product.isFavourite ? Icons.favorite : Icons.favorite_border,
              color:
                  product.isFavourite ? Colors.orange : iconColor,
            ),
            onPressed: () => 
              product.toggleIsFavourite(),
          ),
        ),
并且您可以完全避免更改小部件的状态


这可能不是100%正确,但它对我有效

如果您在这些屏幕上设置了正确的通知程序,请尝试

Consumer<ProductProvider>(
          builder: (ctx, product, child) => IconButton(
            icon: Icon(
              product.isFavourite ? Icons.favorite : Icons.favorite_border,
              color:
                  product.isFavourite ? Colors.orange : iconColor,
            ),
            onPressed: () => 
              product.toggleIsFavourite(),
          ),
        ),
并且您可以完全避免更改小部件的状态


这可能不是100%正确,但它对我有效

您正在调用
setState
并手动修改调用
toggleisfavorite
中的值。所以notifyListeners永远不会被称为抱歉让它变得混乱。上述代码来自产品卡,而非产品详细信息页面。上面添加的产品详细信息页面代码@RémiRousselet@RémiRousselet请检查您正在调用的更新
setState
,并手动修改调用
toggleisfavorite
中的值。所以notifyListeners永远不会被称为抱歉让它变得混乱。上述代码来自产品卡,而非产品详细信息页面。上面添加的产品详细信息页面代码@RémiRousselet@R请检查更新
actions: <Widget>[
      Consumer<ProductProvider>(
          builder: (ctx, product, child) => Padding(
            padding: const EdgeInsets.only(right: 10.0),
            child: IconButton(
              icon : Icon(
                product.isFavourite ? Icons.favorite : Icons.favorite_border,
                color: product.isFavourite ? red : iconColor,
              ),
            onPressed: () => product.toggleIsFavourite(),
          ),
        ),
      ),
    ],