Flutter error : "A value of type 'Null' can't be assigned to a variable of type 'Product'."

Flutter error : "A value of type 'Null' can't be assigned to a variable of type 'Product'."

我有一段代码是为以前版本的 Flutter 编写的,当我尝试在新版本中 运行 时出现一些错误。以下是我不知道如何解决的错误之一?

  Future<void> deleteProduct(String id) async {
    final url = Uri.parse(
        'https://flutter-update.firebaseio.com/products/$id.json?auth=$authToken');
    final existingProductIndex = _items.indexWhere((prod) => prod.id == id);
    var existingProduct = _items[existingProductIndex];
    _items.removeAt(existingProductIndex);
    notifyListeners();
    final response = await http.delete(url);
    if (response.statusCode >= 400) {
      _items.insert(existingProductIndex, existingProduct);
      notifyListeners();
      throw HttpException('Could not delete product.');
    }
    existingProduct = null;
  }

代码最后一行出现的错误信息是:

A value of type 'Null' can't be assigned to a variable of type 'Product'. Try changing the type of the variable, or casting the right-hand type to 'Product'.

编辑:除了解决我问题的答案外,我注意到我还可以在以下代码行中编写 dynamic 而不是 Product?

var existingProduct = _items[existingProductIndex];

而且我很想知道哪种解决方案更好?为什么?

更改此行:

    var existingProduct = _items[existingProductIndex];

对此:

    Product? existingProduct = _items[existingProductIndex];

Product? 键入 existingProduct 变量意味着 existingProduct 可以为空,并且可以为其分配 null 值。

flutter 2.0(Null safety)之后,需要传入非空值或者指定参数为nullable,

在您的情况下,您需要将键指定为可为空

Product? existingProduct;

此外,您不需要传递 null 值,因为它默认为 null。

或使列表不可为空,因此您不需要在上面提及,但如果它可以为空,则向其添加 ?

final _items = <Product>[];