Flutter: метод ‘add’ был вызван при null

#list #flutter #model #provider

#Список #flutter #Модель #поставщик

Вопрос:

У меня есть приложение, которое пытается использовать поставщика для добавления продукта на карту, сначала у меня есть эта модель продукта :

 class Products {
  final String item;
  final int price;    
  Products({this.item, this.price});
}
 

затем у меня есть этот виджет для просмотра списка продуктов, и он успешно отображается :

 import './service/provider.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';    
import 'models/products.dart';    
class ProductList extends StatelessWidget {
  @override
  List<Products> myProducList;
  Widget build(BuildContext context) {
    myProducList = [
      Products(item: 'Car', price: 20000),
      Products(item: 'PC', price: 500),
      Products(item: 'LapTop', price: 750),
      Products(item: 'House', price: 25000),
    ];
    return Scaffold(
      body: ListView.builder(
          shrinkWrap: true,
          itemCount: myProducList.length,
          itemBuilder: (context, index) {
            return Card(
              child: ListTile(
                title: Text(myProducList[index].item),
                subtitle: Text(myProducList[index].price.toString()),
                trailing: IconButton(
                  icon: Icon(Icons.add),
                  onPressed: () {
                    Provider.of<MyProv>(context, listen: false).add_item(
                    myItem: myProducList[index].item,
                    myPrice: myProducList[index].price);
                  },
                ),
              ),
            );
          }),
    );
  }
}
 

также у меня есть этот проверяющий :

 class MyProducts {
  final String item;
  final int price;

  MyProducts({this.item, this.price});
}

class MyProv with ChangeNotifier {
  List<MyProducts> product;

  void add_item({String myItem, int myPrice}) {
    product.add(MyProducts(
      item: myItem,
      price: myPrice,
    ));
    notifyListeners();
  }
    }
 

Я получаю эту ошибку, когда нажимаю кнопку on :

 The method 'add' was called on null.
Receiver: null
Tried calling: add(Instance of 'MyProducts')
 

Как я могу это исправить?

Ответ №1:

На самом деле вы еще не создали список.

Изменить

 List<MyProducts> product;
 

для этого

 List<MyProducts> product = [];
 

Ответ №2:

Проблема здесь заключается в строке

List<MyProducts> product;

когда вы просто объявляете переменную (любого типа данных), внутри нее просто сохраняется значение null. И null не должен add вставлять элементы в list .

Поэтому вместо объявления инициализируйте его пустым списком, например

List<MyProducts> product = [];

или

List<MyProducts> product = List<MyProducts>();

Ответ №3:

Вам нужно «создать» список, прежде чем вы сможете что-то добавить в него. Вы можете сделать это, изменив

  List<MyProducts> product; 
 

Для

  List<MyProducts> product = List<MyProducts>();