可更改的小部件,其中ChangeNotifierProxyProvider作为子实现

时间:2020-02-17 22:31:41

标签: flutter dart provider flutter-change-notifier

我正在尝试使用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(),

0 个答案:

没有答案