String 类型';字符串';不是类型为';项目';飘飘然

String 类型';字符串';不是类型为';项目';飘飘然,string,list,flutter,dart,String,List,Flutter,Dart,我使用提供包(状态管理)创建了一个购物车应用程序,用于在购物车页面中存储所选项目或产品,但问题是我收到了一个错误:“类型‘String’不是类型‘item’的子类型”。下面是dart代码和型号,如果我尝试单击主页中的任何项目,它会将所选项目存储在购物车页面中,如果我尝试存储第二页(数量页面)中的项目,则会出现错误 首页.dart 省道 类购物车扩展ChangeNotifier{ 列表_项=[]; 双倍_总价=0.0; 无效添加(项目){ _项目。添加(项目); _总价+=项目价格; notify

我使用提供包(状态管理)创建了一个购物车应用程序,用于在购物车页面中存储所选项目或产品,但问题是我收到了一个错误:“类型‘String’不是类型‘item’的子类型”。下面是dart代码和型号,如果我尝试单击主页中的任何项目,它会将所选项目存储在购物车页面中,如果我尝试存储第二页(数量页面)中的项目,则会出现错误

首页.dart

省道

类购物车扩展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 Page
on 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() {
    ...