Отключаемый виджет с ChangeNotifierProxyProvider в качестве дочерней реализации - PullRequest
0 голосов
/ 18 февраля 2020

Я пытаюсь реализовать виджет 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(),
...