String 类型';字符串';不是类型为';项目';飘飘然
我使用提供包(状态管理)创建了一个购物车应用程序,用于在购物车页面中存储所选项目或产品,但问题是我收到了一个错误:“类型‘String’不是类型‘item’的子类型”。下面是dart代码和型号,如果我尝试单击主页中的任何项目,它会将所选项目存储在购物车页面中,如果我尝试存储第二页(数量页面)中的项目,则会出现错误 首页.dart 省道String 类型';字符串';不是类型为';项目';飘飘然,string,list,flutter,dart,String,List,Flutter,Dart,我使用提供包(状态管理)创建了一个购物车应用程序,用于在购物车页面中存储所选项目或产品,但问题是我收到了一个错误:“类型‘String’不是类型‘item’的子类型”。下面是dart代码和型号,如果我尝试单击主页中的任何项目,它会将所选项目存储在购物车页面中,如果我尝试存储第二页(数量页面)中的项目,则会出现错误 首页.dart 省道 类购物车扩展ChangeNotifier{ 列表_项=[]; 双倍_总价=0.0; 无效添加(项目){ _项目。添加(项目); _总价+=项目价格; notify
类购物车扩展ChangeNotifier{
列表_项=[];
双倍_总价=0.0;
无效添加(项目){
_项目。添加(项目);
_总价+=项目价格;
notifyListeners();}
作废删除(项目){
_总价-=项目价格;
_项目。移除(项目);
notifyListeners();}
整数得到计数{
返回_items.length;}
双倍获得总价格{
返回_totalPrice;}
列出你要买的篮子物品{
返回_items;}
之所以出现此错误,是因为您的add
方法表单Cart
类正在等待一个项目
对象,并且您传递了productname
,它是一个字符串
根据您的代码,您需要从数量
小部件构建一个新的项目
,如下所示:
cart.add(Item(title: productname, image: productimage, price : productprice));
但是,如果您想改进代码,可以用数量
类上的项
对象替换这3个属性。您可以首先将类转换为无状态小部件
:
class Quantities extends StatelessWidget {
final Item item;
Quantities(this.item);
@override
Widget build() {
...
通常,您应该在可能的情况下在方法/小部件上使用该
项
对象错误确切发生在哪里?@FPerroch In Quantities Pageon pressed:(){cart.add(productname);},
@F Perroch那么如何解决这个问题。@F Perroch你能给我提供改进的示例代码吗
class CartPage extends StatefulWidget {
@override
State<StatefulWidget> createState() {
return _CartPageState();}}
class _CartPageState extends State<CartPage> {
@override
Widget build(BuildContext context) {
return Consumer<Cart>(
builder: (context,cart,child){
return Scaffold(
appBar: AppBar(
backgroundColor: Colors.indigo,
title: Text("Cart"),),
body: cart.basketItems.length==0
?Text("no items"):ListView.builder(
itemCount: cart.basketItems.length,
itemBuilder: (context,index){
return Card(
child: ListTile(
title: Text(cart.basketItems[index].title),),);}),);},);}}
class Item {
String title;
String image;
double price;
Item({this.title, this.price,this.image});}
class Cart extends ChangeNotifier {
List<Item> _items = [];
double _totalPrice = 0.0;
void add(Item item) {
_items.add(item);
_totalPrice += item.price;
notifyListeners();}
void remove(Item item) {
_totalPrice -= item.price;
_items.remove(item);
notifyListeners();}
int get count {
return _items.length;}
double get totalPrice {
return _totalPrice;}
List<Item> get basketItems {
return _items;}}
cart.add(Item(title: productname, image: productimage, price : productprice));
class Quantities extends StatelessWidget {
final Item item;
Quantities(this.item);
@override
Widget build() {
...