Flutter:在 null 上调用了方法 'add'
Flutter : The method 'add' was called on null
我有一个应用程序尝试使用提供商将产品添加到卡中,首先我有这个产品型号:
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();
}
}
我按下按钮时出现此错误:
The method 'add' was called on null.
Receiver: null
Tried calling: add(Instance of 'MyProducts')
我该如何解决?
您还没有真正创建列表。
改变
List<MyProducts> product;
至此
List<MyProducts> product = [];
您需要先 'create' 列表,然后才能向其中添加内容。
您可以通过更改
List<MyProducts> product;
至
List<MyProducts> product = List<MyProducts>();
这里的问题是行
List<MyProducts> product;
当你只是声明一个变量(任何数据类型)时,它只是将 null 存储在其中。
而null
没有add
插入元素到list
.
所以不要像
那样用空列表声明初始化它
List<MyProducts> product = [];
或
List<MyProducts> product = List<MyProducts>();
我有一个应用程序尝试使用提供商将产品添加到卡中,首先我有这个产品型号:
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();
}
}
我按下按钮时出现此错误:
The method 'add' was called on null.
Receiver: null
Tried calling: add(Instance of 'MyProducts')
我该如何解决?
您还没有真正创建列表。
改变
List<MyProducts> product;
至此
List<MyProducts> product = [];
您需要先 'create' 列表,然后才能向其中添加内容。 您可以通过更改
List<MyProducts> product;
至
List<MyProducts> product = List<MyProducts>();
这里的问题是行
List<MyProducts> product;
当你只是声明一个变量(任何数据类型)时,它只是将 null 存储在其中。
而null
没有add
插入元素到list
.
所以不要像
那样用空列表声明初始化它List<MyProducts> product = [];
或
List<MyProducts> product = List<MyProducts>();