Свойство «количество» не может быть доступно безоговорочно, потому что получатель может быть «нулевым». Попробуйте сделать доступ условным (используя»?»).

#flutter #dart #dart-null-safety

Вопрос:

Соответствующий код

 import 'package:flutter/foundation.dart';

class CartItem {
  final String id;
  final String title;
  final int quantity;
  final double price;

  CartItem({
    required this.id,
    required this.title,
    required this.quantity,
    required this.price,
  });
}

class Cart with ChangeNotifier {
  Map<String, CartItem> _items = {}; // see that I have initialized the items
 

Код, в котором я получаю нулевую ошибку безопасности «Свойство » количество», не может быть безоговорочно доступен, потому что получатель может быть «нулевым».
Попробуйте сделать доступ условным (используя»?.») или добавить нулевую проверку к цели («!»).’ Ошибка, которую я получаю, связана с приведенной ниже переменной количества. Я не знаю, как это исправить. Я смотрел видео, в которых говорилось о int?, ! и ?: операторы, но этот конкретный сценарий не был рассмотрен.

 if (_items[productID].quantity == 1) _items.remove(productID);
 

Дополнительные вопросы, что здесь является получателем, на который указывает ошибка, которая может быть нулевой?

Ответ №1:

Это происходит потому, что вы пытаетесь получить доступ к действительному на карте, передав ему ключ. Если идентификатор существует в качестве ключа на карте, то у вас действительно будет объект cartitem. Но если идентификатор не существует, результат будет равен нулю, и ваша операция станет null.quantity .

Получатель здесь-ваш объект cartitem.

Попробуй:

 _items[productID]!.quantity
 

Таким образом, вы обещаете дарту, что невозможно быть нулевым. Ваша ошибка исчезнет, но это рискованная операция. Правильный способ исправить это-убедиться, что он не равен нулю, прежде чем вызывать количество на нем.

Перед вашим заявлением «если» сделайте это:

 if (_items[productID] != null) if(_items[productID]!.quantity == 1) _items.remove(productID);
 

Таким образом, вы наверняка не попадете в свой второй оператор if, если только cartitem не будет равен нулю на 100%.

Комментарии:

1. Как вы можете видеть в приведенном выше коде, я сделал их required , кроме того, если я попробую quanity = 0 в конструкторе, я получу ошибку. Не знаю, что делать

2. Моя вина, я отредактировал свой ответ.