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(),
),
),
),
],