【问题标题】:Not able to get the data from the JSON to fields in flutter无法将数据从 JSON 获取到颤动的字段
【发布时间】:2023-03-24 08:17:01
【问题描述】:

我能够在 Flutter 应用程序中从服务器获取 JSON 数据。我需要在PageView.builder和嵌套的ListView.builder中显示数据,这个模型我已经创建好了。

需要执行的代码

orderdetail = NewOrder.fromJson(json.decode(response.body));

这是我能够在 Flutter 应用程序中从服务器获取的 JSON 数据

{
    "error": "false",
    "content": [
        {
            "comp_code": "4",
            "comp_name": "KMT OVERSEAS",
            "order_no": "16",
            "order_items": [
                {
                    "comp_code": "4",
                    "comp_name": "KMT OVERSEAS",
                    "order_no": "16",
                },
                {
                    "comp_code": "4",
                    "comp_name": "KMT OVERSEAS",
                    "order_no": "16",
                }
            ]
        },
        {
            "comp_code": "4",
            "comp_name": "KMT OVERSEAS",
            "order_no": "18",
            "order_items": [
                {
                    "comp_code": "4",
                    "comp_name": "KMT OVERSEAS",
                    "order_no": "18",
                },
                {
                    "comp_code": "4",
                    "comp_name": "KMT OVERSEAS",
                    "order_no": "18",

                },
                {
                    "comp_code": "4",
                    "comp_name": "KMT OVERSEAS",
                    "order_no": "18",
                },
               
            ]
        }
    ]
}

我使用的代码是用于获取 Stateful Widget 中的数据

  Future<Payload> getdetailsoforders(String userid, String companycode) async {

    SharedPreferences sharedPreferences = await SharedPreferences.getInstance();
    Map data = {
      'user_id': userid,
      'company_code':companycode

    };

    var response = await http.post(newapi, body: data);
    if(response.statusCode == 200) {
     jsonResponse = json.decode(response.body);
      print("jsonrespnse");
      print(jsonResponse);
 }
    

  } else {
  setState(() {
    _isLoading = false;
  });


  print('login error');
  print(response.body);
}

  }

我实现的NewOrder Model类如下

import 'newitem.dart';

class NewOrder {
  NewOrder({
    this.sohPk,
    this.orderNo,
    this.newItem,
  });

  String sohPk;
  String orderNo;
 NewItem newItem;

  factory NewOrder.fromJson(Map<String, dynamic> json) => NewOrder(
    sohPk: json["soh_pk"],
    orderNo: json["order_no"],
  newItem:NewItem.fromJson(json['order_items'])
  );

  Map<String, dynamic> toJson() => {
    "soh_pk": sohPk,
    "order_no": orderNo,
   'order_items': newItem.toJson()
  };
}

我实现的NewPlayLoadClass在这里

导入'package:dataproject2/newmodel/neworder.dart';

class NewPayLoad {
  String error;
  List<NewOrder> content;

  NewPayLoad({this.error, this.content});

  NewPayLoad.fromJson(Map<String, dynamic> json) {
    error = json['error'];
    if (json['content'] != null) {
      content = new List<NewOrder>();
      json['content'].forEach((v) {
        content.add(new NewOrder.fromJson(v));
      });
    }
  }

  Map<String, dynamic> toJson() {
    final Map<String, dynamic> data = new Map<String, dynamic>();
    data['error'] = this.error;
    if (this.content != null) {
      data['content'] = this.content.map((v) => v.toJson()).toList();
    }
    return data;
  }
}

我得到的错误在这里

以下 NoSuchMethodError 被抛出构建 PageViewClass(dirty, state: _PageViewClassState#98a84): getter 'content' 在 null 上调用。接收者:null 尝试调用:内容

我无法理解我的代码出了什么问题,以及如何解决它 请进一步指导

【问题讨论】:

  • @chunhunghan 嗨,我看到你解决了一个类似的问题,请帮我解决这个问题,我尝试实施你对这个问题的解决方案stackoverflow.com/questions/63555004/… 但没有成功,请进一步指导我跨度>

标签: arrays json flutter flutter-listview flutter-pageview


【解决方案1】:

使用下面的代码

class NewOrder {
  String _error;
  List<Content> _content;

  NewOrder({String error, List<Content> content}) {
    this._error = error;
    this._content = content;
  }

  String get error => _error;
  set error(String error) => _error = error;
  List<Content> get content => _content;
  set content(List<Content> content) => _content = content;

  NewOrder.fromJson(Map<String, dynamic> json) {
    _error = json['error'];
    if (json['content'] != null) {
      _content = new List<Content>();
      json['content'].forEach((v) {
        _content.add(new Content.fromJson(v));
      });
    }
  }

  Map<String, dynamic> toJson() {
    final Map<String, dynamic> data = new Map<String, dynamic>();
    data['error'] = this._error;
    if (this._content != null) {
      data['content'] = this._content.map((v) => v.toJson()).toList();
    }
    return data;
  }
}

class Content {
  String _compCode;
  String _compName;
  String _orderNo;
  List<OrderItems> _orderItems;

  Content(
      {String compCode,
      String compName,
      String orderNo,
      List<OrderItems> orderItems}) {
    this._compCode = compCode;
    this._compName = compName;
    this._orderNo = orderNo;
    this._orderItems = orderItems;
  }

  String get compCode => _compCode;
  set compCode(String compCode) => _compCode = compCode;
  String get compName => _compName;
  set compName(String compName) => _compName = compName;
  String get orderNo => _orderNo;
  set orderNo(String orderNo) => _orderNo = orderNo;
  List<OrderItems> get orderItems => _orderItems;
  set orderItems(List<OrderItems> orderItems) => _orderItems = orderItems;

  Content.fromJson(Map<String, dynamic> json) {
    _compCode = json['comp_code'];
    _compName = json['comp_name'];
    _orderNo = json['order_no'];
    if (json['order_items'] != null) {
      _orderItems = new List<OrderItems>();
      json['order_items'].forEach((v) {
        _orderItems.add(new OrderItems.fromJson(v));
      });
    }
  }

  Map<String, dynamic> toJson() {
    final Map<String, dynamic> data = new Map<String, dynamic>();
    data['comp_code'] = this._compCode;
    data['comp_name'] = this._compName;
    data['order_no'] = this._orderNo;
    if (this._orderItems != null) {
      data['order_items'] = this._orderItems.map((v) => v.toJson()).toList();
    }
    return data;
  }
}

class OrderItems {
  String _compCode;
  String _compName;
  String _orderNo;

  OrderItems({String compCode, String compName, String orderNo}) {
    this._compCode = compCode;
    this._compName = compName;
    this._orderNo = orderNo;
  }

  String get compCode => _compCode;
  set compCode(String compCode) => _compCode = compCode;
  String get compName => _compName;
  set compName(String compName) => _compName = compName;
  String get orderNo => _orderNo;
  set orderNo(String orderNo) => _orderNo = orderNo;

  OrderItems.fromJson(Map<String, dynamic> json) {
    _compCode = json['comp_code'];
    _compName = json['comp_name'];
    _orderNo = json['order_no'];
  }

  Map<String, dynamic> toJson() {
    final Map<String, dynamic> data = new Map<String, dynamic>();
    data['comp_code'] = this._compCode;
    data['comp_name'] = this._compName;
    data['order_no'] = this._orderNo;
    return data;
  }
}

【讨论】:

  • 感谢您对 JSON 数据框架建模的帮助。我再请求你一件事,请帮助我召唤元素,因为它太复杂了,我无法做出正确的选择。一个例子就足够了
  • 请指导我获取OrderItems的元素
  • 是的,以后在问题return NewOrder.fromJson(jsonResponse);中使用这个函数它接收到数据,然后用于订单的长度'snapshot.data.content.length'
  • 现在我需要配置订单项目的长度,并获得相应的元素,请进一步指导
  • @VickySingh:您能否再发布一个问题作为已经解决的原始问题的目的,我一定会帮助您。
猜你喜欢
  • 2020-12-12
  • 2019-12-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-18
  • 1970-01-01
相关资源
最近更新 更多