Отклоняемый виджет с ChangeNotifierProxyProvider в качестве дочерней реализации

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

0 ответов

Другие вопросы по тегам