Flutter 在Flatter中制作唯一ID列表平铺

Flutter 在Flatter中制作唯一ID列表平铺,flutter,dart,Flutter,Dart,我的代码无法正常工作。我有一个食品类,我已经初始化了名称、价格和唯一ID字符串。我将唯一ID设置为Uuid().v4(),这将给每个食物项目一个随机字符串 食品类 class Food { String name; String price; String uniqueID = Uuid().v4(); Food({this.name, this.price, this.uniqueID})} 在另一个页面上,我有一个提供程序函数,可以在购物车中添加项目

我的代码无法正常工作。我有一个食品类,我已经初始化了名称、价格和唯一ID字符串。我将唯一ID设置为Uuid().v4(),这将给每个食物项目一个随机字符串

食品类

  class Food {
  String name;
  String price;
  String uniqueID = Uuid().v4();
  
  
  Food({this.name,
  this.price,
  this.uniqueID})}
在另一个页面上,我有一个提供程序函数,可以在购物车中添加项目,它是一个字符串项目列表(这可能不是最佳选项)。下面是它的代码:

class CartItemsModel extends ChangeNotifier {
  List<String> _cartItems = [];

  List<String> get cartItems => _cartItems;

  addCartItem(String item) {
    _cartItems.add(item);
    notifyListeners();
  }
现在,您可以看到我在那里有Uuid(没有我在食品类中的uniqueID,因为出于某种原因它不起作用)。我有Uuid,因此如果按钮被单击两次,则不会出现多个重复项的错误,下面是没有该按钮的错误:

问题是,这是可行的,并且是功能性的,但是我在最后的“购物车”窗口中显示了Uuid中的这个丑陋的ID。基本上我希望这个ID是不可见的。下面是它的外观:

下面是“购物车”屏幕的代码:

  class _CartState extends State<Cart> {
  @override
  Widget build(BuildContext context) {
    return Consumer<CartItemsModel>(
      builder: (c, model, _) => Scaffold(
      body: SingleChildScrollView(
            child: Column(
              //on trailing i should have icon with clear function that will delete that item from the list
              children: model
                  .cartItems //maybe below can return ListView.separated like on the food list user, we'll see
                  
                  .map((e) =>   
我得到一个错误:

The argument type 'Type' can't be assigned to the parameter type 'String

这是可以理解的,因为它是CartItemsModel中的一个列表。有什么办法可以解决这个问题,只是为了将项目添加到“购物车”中吗?

您可以将其保留为提供商模型。你把它当作食物模型,而不是绳子。在onPressed中,检查它是否在其中,如果不在,则将其设置为provider如果要将cartItems的数据作为字符串写入provider中,则可以将其合并。我意识到你想把它放在问题里

    class Food {
      String name;
      String price;
   
       Food({this.name,
       this.price})}



您将其保留为提供者模型。你把它当作食物模型,而不是绳子。在onPressed中,检查它是否在其中,如果不在,则将其设置为provider如果要将cartItems的数据作为字符串写入provider中,则可以将其合并。我意识到你想把它放在问题里

    class Food {
      String name;
      String price;
   
       Food({this.name,
       this.price})}



我如何将其保留为验证模型?你能给我多一点代码吗?他的意思是,在新列表中,你不以字符串的形式存储项,而是以对象的形式存储项。所以1个完整对象意味着它有一个“名称:”某物,和一个“价格:某物”".. 我知道你真的想让它工作。但我看到你提出的所有问题都意味着你可能还没有正确理解Dart。如果你有时间,我建议你多学点。因为现在添加项目对您来说可能很困难,但这可能不是您遇到的最后一个复杂问题。已用完字符。而且,你还没有告诉我们你在用这些物品做什么。它们是否将存储在正常列表中的某个位置?还是火炉店?还是数据库?因为如果你只是想让它们从一个列表转到另一个列表,那么你真的不需要一个键。除非你正在使用dismissable,然后你需要编辑你的食物模型…我如何将它保留为provder模型?你能给我多一点代码吗?他的意思是,在新列表中,你不以字符串的形式存储项,而是以对象的形式存储项。所以1个完整对象意味着它有一个“名称:”某物,和一个“价格:某物”".. 我知道你真的想让它工作。但我看到你提出的所有问题都意味着你可能还没有正确理解Dart。如果你有时间,我建议你多学点。因为现在添加项目对您来说可能很困难,但这可能不是您遇到的最后一个复杂问题。已用完字符。而且,你还没有告诉我们你在用这些物品做什么。它们是否将存储在正常列表中的某个位置?还是火炉店?还是数据库?因为如果你只是想让它们从一个列表转到另一个列表,那么你真的不需要一个键。除非你正在使用dismissable,然后你需要编辑你的食物模型。。。
    class Food {
      String name;
      String price;
   
       Food({this.name,
       this.price})}
   class CartItemsModel extends ChangeNotifier {
     List<Food> _cartItems = [];
     List<Food> get cartItems => _cartItems;

     addCartItem(Food item) {
     _cartItems.add(item);
     notifyListeners();
     }
  onPressed: (){
     if(!cartItems.constains(food))model.addCartItem(Food);
    }