【问题标题】:Flutter. The getter ' ' was called on null. Receiver: null Tried calling: product扑。在 null 上调用了 getter ''。接收方:null 尝试调用:产品
【发布时间】:2021-03-06 00:06:17
【问题描述】:

当小部件向cartData 询问产品时出现错误。

The getter 'product' was called on null.
Receiver: null
Tried calling: product

我不知道如何解决它。我不应该在Cart 类中使用Product 类吗?

class Body extends StatefulWidget {
  @override
  _BodyState createState() => _BodyState();
}

class _BodyState extends State<Body> {
  @override
  Widget build(BuildContext context){

    final cartData = Provider.of<CartDataProvider>(context);

    return Padding(
      padding: const EdgeInsets.symmetric(horizontal: 20),
      child: ListView.builder(
        itemCount: cartData.cartItems.length,
        itemBuilder: (context, index) => Padding(
          padding: const EdgeInsets.symmetric(vertical: 10),
          child: Dismissible(
            key: Key(cartData.cartItems[index].product.id.toString()),
            direction: DismissDirection.endToStart,
            background: Container(
              padding: EdgeInsets.symmetric(horizontal: 20),
              decoration: BoxDecoration(
                borderRadius: BorderRadius.circular(15),
                color: Color(0xFFFFE6E6),
              ),
              child: Row(
                children: [
                  Spacer(),
                  Icon(Icons.delete_sweep_outlined),
                ],
              ),
            ),
            onDismissed: (direction) {
              setState(() {
                cartData.deleteItem(index);
              });
            },
            child: CartItemCard(cart: cartData.cartItems[index])
          ),
        )
      ),
    );
  }
}

这是我的Cart 模型。我使用Products 就像来自另一个文件的列表

class Cart {
  final Product product;
  final int numOfitems;

  Cart({@required this.product, @required this.numOfitems});

}

class CartDataProvider with ChangeNotifier{
  Map<int, Cart> _cartItems = {
    1 : Cart(product: products[0], numOfitems: 2),
    2 : Cart(product: products[1], numOfitems: 1),
    3 : Cart(product: products[2], numOfitems: 3),
    4 : Cart(product: products[3], numOfitems: 2),
    5 : Cart(product: products[4], numOfitems: 1),
    6 : Cart(product: products[5], numOfitems: 4),
  };

  UnmodifiableMapView<int, Cart> get cartItems => 
    UnmodifiableMapView<int, Cart>(_cartItems);

 //Some methods

}

【问题讨论】:

标签: flutter dart


【解决方案1】:

请删除下面的行,看看它是否有效:

key: Key(cartData.cartItems[index].product.id.toString()),

您可以将 itembuilder 中的索引作为键传递:

key: Key(index.toString()),

【讨论】:

  • 是的,当然,谢谢你。但是有child: CartItemCard(cart: cartData.cartItems[index])我不能这样做
  • 不客气。键可以是每个元素唯一的任何值。更改键的值不会影响:child: CartItemCard(cart: cartData.cartItems[index])
猜你喜欢
  • 2021-09-07
  • 2023-03-20
  • 1970-01-01
  • 2021-09-13
  • 2021-06-25
  • 1970-01-01
  • 2020-11-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多