Я пытаюсь реализовать виджет Dismissible с ChangeNotifierProxyProvider в качестве дочернего.
Мой код выглядит следующим образом:
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
),
);
}
}
Виджет Dismissible прекрасно работает без какого-либо ChangeNotifierProvider / ChangeNotifierProxyProvider. Но у ProductItem()
есть свойства, которые он извлекает из Интернета, и поэтому ему необходимо ссылаться на эти свойства, поэтому каждому products[i]
нужен свой ChangeNotifierProxyProvider
. Однако виджет «Отклоняемый» изменяет мой список элементов, когда я что-то отклоняю. Именно это я и хочу сделать. Но ChangeNotifierProvider не поддерживает предоставление переменных, которые изменяются. Вот почему я вынужден использовать ChangeNotifierProxyProvider
.
Я просто запутался с синтаксисом того, как его реализовать.
Вот предыдущий ChangeNotifierProvider
, который работал до тех пор, пока я ничего не уволил (бесполезно): (Примечание: это ломается, когда я отклоняю продукт, потому что он не может обрабатывать значения, которые меняются).
ChangeNotifierProvider(
create: (_) => products[i],
child: ProfileItem(),