我正在尝试使用ChangeNotifierProxyProvider作为子项来实现Dismissible小部件。
我的代码如下:
class _ProductsGridState extends State<ProductsGrid> {
@override
Widget build(BuildContext context) {
final productsData = Provider.of<Products>(context, listen: true);
final products =
productsData.items; //items is a getter thats gets list of products
return GridView.builder(
padding: const EdgeInsets.all(10.0),
itemCount: products.length,
itemBuilder: (ctx, index) {
return Dismissible(
key: UniqueKey(),
direction: DismissDirection.endToStart,
onDismissed: (direction) {
setState(() {
productsData.removeItem(products[index].uniqueValue);
});
},
child: ChangeNotifierProxyProvider< Not sure, Not sure>(
create: (_) => products[index], //not sure
update: (ctx, products[index], _) //not sure
child: ProductItem(), //sure
),
),
);
},
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 2,
childAspectRatio: 0.75,
crossAxisSpacing: 10, //spacing between the columns
mainAxisSpacing: 10, // spacing between the rows
),
);
}
}
在没有任何ChangeNotifierProvider / ChangeNotifierProxyProvider的情况下,Dismissible小部件的效果很好。但是ProductItem()
具有从Web上获取的属性,因此需要引用这些属性,这就是每个products[i]
需要自己的ChangeNotifierProxyProvider
的原因。但是,当我关闭某些内容时,“可禁用”小部件会更改我的项目列表。我想这样做。但是,ChangeNotifierProvider不支持提供变化的变量。这就是为什么我被迫使用ChangeNotifierProxyProvider
。
我只是对如何实现它的语法感到困惑。
这是先前的ChangeNotifierProvider
,只要我不放弃任何东西(没用),它就可以工作:(注意:当我退出产品时,这会中断,因为它无法处理变化的值)。
ChangeNotifierProvider(
create: (_) => products[i],
child: ProfileItem(),