我一直收到错误参数类型 'List <CartModel>' can't be assigned to the parameter type 'List <CartItem>'

I keep getting the error argument type 'List <CartModel>' can't be assigned to the parameter type 'List <CartItem>'

我是 flutter 的新手,参加了 Maximillians flutter 课程,但我一直坚持将 list 的参数传递给 list 类型的参数。到目前为止,我看不出代码有什么问题。 代码

import 'package:flutter/foundation.dart';

import '/providers/cart_provider.dart';
import 'package:project_2/widgets/cart_item.dart';

class OrderItem {
  final String id;
  final double amount;
  final List<CartItem> products;
  final DateTime dateTime;

  OrderItem({
    required this.id,
    required this.amount,
    required this.products,
    required this.dateTime,
  });
}

class Orders with ChangeNotifier {
  final List<OrderItem> _orders = [];

  List<OrderItem> get orders {
    return [..._orders];
  }

  void addOrder(List<CartItem> cartProducts, double total) {
    _orders.insert(
      0,
      OrderItem(
        id: DateTime.now().toString(),
        amount: total,
        dateTime: DateTime.now(),
        products: cartProducts,
      ),
    );
    notifyListeners();
  }
}

上面的提供程序 class 用于出现错误的屏幕。如下所示

import 'package:flutter/material.dart';
import 'package:provider/provider.dart';

import '/providers/cart_provider.dart';
import 'package:project_2/providers/order_provider.dart';

import '/widgets/cart_item.dart';

class CartScreen extends StatelessWidget {
  const CartScreen({Key? key}) : super(key: key);

  static const cartRoute = '/Cart Screen';

  @override
  Widget build(BuildContext context) {
    final cartvalues = Provider.of<CartProvider>(context);
    return Scaffold(
      appBar: AppBar(
        title: const Text('Cart Screen'),
        elevation: 0.5,
      ),
      body: Column(
        children: <Widget>[
          Card(
            margin: const EdgeInsets.symmetric(vertical: 10, horizontal: 10),
            child: Row(
              mainAxisAlignment: MainAxisAlignment.spaceBetween,
              children: <Widget>[
                Container(
                  child: const Padding(
                    padding: EdgeInsets.all(20.0),
                    child: Text(
                      'Total',
                      style: TextStyle(fontSize: 20),
                    ),
                  ),
                ),
                Spacer(),
                Padding(
                  padding: const EdgeInsets.all(20.0),
                  child: Chip(
                    label: Text(
                        '$${cartvalues.totalAmount.toStringAsFixed(2)}',
                        style: TextStyle(fontSize: 13)),
                  ),
                ),
                Padding(
                  padding: const EdgeInsets.all(20.0),
                  child: ElevatedButton(
                    onPressed: () {
                      Provider.of<Orders>(context, listen: false).addOrder(
                        cartvalues.items.values.toList(),
                        cartvalues.totalAmount,
                      );
                      cartvalues.clear();
                    },
                    child: Text('Order'),
                  ),
                )
              ],
            ),
          ),
          SizedBox(),
          Expanded(
            child: ListView.builder(
              itemCount: cartvalues.itemCount,
              itemBuilder: (ctx, index) => CartItem(
                cartvalues.items.keys.toList()[index],
                cartvalues.items.values.toList()[index].id,
                cartvalues.items.values.toList()[index].price,
                cartvalues.items.values.toList()[index].quantity,
                cartvalues.items.values.toList()[index].title,
              ),
            ),
          )
        ],
      ),
    );
  }
}

购物车项目小部件代码也如下所示

import 'package:flutter/material.dart';
import 'package:provider/provider.dart';

import 'package:project_2/providers/cart_provider.dart';

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

  CartItem(
    this.productId,
    this.id,
    this.price,
    this.quantity,
    this.title,
  );
  @override
  Widget build(BuildContext context) {
    return Dismissible(
      key: ValueKey(id),
      background: Container(
        child: Icon(Icons.delete),  
        decoration: BoxDecoration(
          color: Colors.redAccent,
          borderRadius: BorderRadius.circular(4)),
        alignment: Alignment.centerRight,
        padding: EdgeInsets.only(right: 10),
        margin: EdgeInsets.symmetric(horizontal: 15, vertical: 4,)
      ),
      direction: DismissDirection.endToStart,
      onDismissed: (direction) {
        Provider.of<CartProvider>(context, listen: false).removeItem(productId);
      },
      child: Card(
        margin: EdgeInsets.symmetric(horizontal: 15, vertical: 4,),
        child: ListTile(
          leading: CircleAvatar(
            child: FittedBox(child: Padding(
              padding: const EdgeInsets.all(8.0),
              child: Text('$$price'),
            ))
          ),
          title: Text(title),
          subtitle: Text('${(price * quantity).toStringAsFixed(2)}'),
          trailing: Text('${quantity}x'),
        ),
      ),
    );
  }
}

兄弟,你应该避免使用多个提供商。如果您的应用程序太大并且您可以将其拆分为两个或更多模块(部分),那么您可以使用多个提供程序。否则只需为整个应用声明一个 class 提供程序并使用它。此外,我们不对模型使用 ChangeNotifier。我在你的问题中看不到 cartProvider class,请让我们更深入地了解你的问题。