当前位置: 首页 > 知识库问答 >
问题:

如何在flatter中访问restapi的JSON数组的复杂内部元素

狄冥夜
2023-03-14

我想访问JSON数组的内部元素,并在listview生成器中显示其值。我的Model类有3个类GetMenuListModel,Menu和MenuItem。在getMenuListModel里面有List Menu和List MenuItem。我试图通过. map({e)=访问它

REST API RESPONSE的模型类

import 'dart:convert';

GetMenuListModel getMenuListModelFromJson(String str) => GetMenuListModel.fromJson(json.decode(str));

String getMenuListModelToJson(GetMenuListModel data) => json.encode(data.toJson());

class GetMenuListModel {
  GetMenuListModel({
    this.methodCode,
    this.menu,
  });

  String methodCode;
  List<Menu> menu;
  GetMenuListModel menuList;
  factory GetMenuListModel.fromJson(Map<String, dynamic> json) => GetMenuListModel(
    methodCode: json["method_code"],
    menu: List<Menu>.from(json["menu"].map((x) => Menu.fromJson(x))),
  );

  Map<String, dynamic> toJson() => {
    "method_code": methodCode,
    "menu": List<dynamic>.from(menu.map((x) => x.toJson())),
  };
}

class Menu {
  Menu({
    this.id,
    this.name,
    this.menuItem,
  });

  int id;
  String name;
  List<MenuItem> menuItem;

  factory Menu.fromJson(Map<String, dynamic> json) => Menu(
    id: json["id"],
    name: json["name"],
    menuItem: List<MenuItem>.from(json["menu_item"].map((x) => MenuItem.fromJson(x))),
  );

  Map<String, dynamic> toJson() => {
    "id": id,
    "name": name,
    "menu_item": List<dynamic>.from(menuItem.map((x) => x.toJson())),
  };
}

class MenuItem {
  MenuItem({
    this.vendorId,
    this.vendorName,
    this.code,
    this.name,
    this.price,
    this.type,
    this.in_stock,
    this.in_currentslot,
    this.qty,
  });

  int vendorId;
  VendorName vendorName;
  String code;
  String name;
  double price;
  int qty=0;
  String type, in_stock, in_currentslot;

  set setQty(int data){
    qty=data;
  }

  set addPrice(double amount){
    price += amount;
  }

  set minusPrice(double amount){
    price -= amount;
  }

  get getPrice{
    return price;
  }


  get getQty{
    return qty;
  }

  factory MenuItem.fromJson(Map<String, dynamic> json) => MenuItem(
    vendorId: json["vendor_id"],
    vendorName: vendorNameValues.map[json["vendor_name"]],
    code: json["code"],
    name: json["name"],
    price: json["price"],
    type: json["type"],
    in_stock: json["in_stock"],
    in_currentslot: json["in_currentslot"],
    qty: 0,

  );

  Map<String, dynamic> toJson() => {
    "vendor_id": vendorId,
    "vendor_name": vendorNameValues.reverse[vendorName],
    "code": code,
    "name": name,
    "price": price,
    "type": type,
    "in_stock": in_stock,
    "in_currentslot": in_currentslot,
  };
}

enum VendorName { UBER_HOSPITALITY }

final vendorNameValues = EnumValues({
  "Uber Hospitality": VendorName.UBER_HOSPITALITY
});

class EnumValues<T> {
  Map<String, T> map;
  Map<T, String> reverseMap;

  EnumValues(this.map);

  Map<T, String> get reverse {
    if (reverseMap == null) {
      reverseMap = map.map((k, v) => new MapEntry(v, k));
    }
    return reverseMap;
  }
}

我的listview构建器代码

 Flexible(
                child:  Card(
                  child: ListView.builder(
                      itemCount: Utility.list.length,
                      itemBuilder: (context,i) {

                    return
                      // Utility.allMenu[i].menuItem.map<Widget>((e) => //getting error here<-------
                      Row(
                      mainAxisAlignment: MainAxisAlignment.spaceBetween,
                      children: [

                         Text('${Utility.list[i]}'),

                         Row(

                           children: [
                             IconButton( onPressed: () {  }, icon: Icon(Icons.add),),

                             Container(
                                 height: 18, width: 18,


                                 child: Text('qty')
                             ),
                             IconButton( onPressed: () {  }, icon: Icon(Icons.remove),),
                           ],
                        )
                      ],
                    )/*).toList(),*/;
                  })
                  // child: ListView.builder(itemBuilder: null),
                ),
              ),

共有1个答案

齐典
2023-03-14

使用ListView.builder您只声明一个小部件元素,而不是列表。如果我正确理解您的代码(我没有看到(e)使用任何地方),您可以简单地删除Utility.allMenu[i]. menuItem.map((e)=

如果要返回列表,请删除。建筑商

 类似资料:
  • 本文向大家介绍MongoDB中如何访问JSON数组的内部元素,包括了MongoDB中如何访问JSON数组的内部元素的使用技巧和注意事项,需要的朋友参考一下 要在MongoDB中访问JSON数组的内部元素,请使用点表示法。让我们创建一个包含文档的集合- 在find()方法的帮助下显示集合中的所有文档- 这将产生以下输出- 以下是访问JSON数组内部元素的查询- 这将产生以下输出-

  • 我有一个简单的内部类变量,如何在scala中访问它?

  • 问题内容: 我是python的新手,我想了解如何处理数组的元素。例如,如果我有: 我已经在python中定义了它们,例如: 我看到我无法参考,但是给了我一个结果。所以,我不明白如何访问这些数组的第二行?那会是吗?为了将它们乘以等,我将如何做? 问题答案: 如果你有 然后 将正常工作。就像您想要的那样,它指向第二列,第二行。 我不确定您做错了什么。 要乘以第三列中的单元格,您可以执行以下操作 它将适

  • 通过触发这个Webhook,我收到一个订单对象,当我在电子邮件中输出它时,它如下所示: 数组{“id”:1154,“parent_id”:0,“status”:“pending”,“currency”:“eur”,“version”:“3.2.3”,“prices_include_tax”:true,“date_created”:{“date”:“2017-12-15 15:58:42.00000

  • 问题内容: 我有以下JSON对象: 这是来自一个请求,我有成功。 问题是,即使dataJS在控制台中正确显示,我也无法访问JSON对象中的项目。有想法吗? 问题答案: 那是因为您的基础对象也是数组。 我怀疑那会有用

  • 我们可以使用for of循环访问数组元素: 如何修改此代码以访问当前索引?我想通过使用forEach和for-in来实现这一点。