Просто посмотрите этот пример, который я сделал на основе json, который вы предоставили:
Ниже приведен ваш образец json, который вы предоставили:
{
"response": "success",
"message": "done",
"data": {
"orders": {
"order6": {
"OrderId": "6",
"total": "789",
"Items": {
"1": {
"ProductName": "Prod 1",
"ItemDiscount": "10",
"Quantity": "3",
"TotalItemPrice": "161.865"
},
"2": {
"ProductName": "Prod 2",
"ItemDiscount": "0",
"Quantity": "5",
"TotalItemPrice": "449.75"
}
}
},
"order4": {
"OrderId": "4",
"OrderSubTotal": "568",
"Items": {
"1": {
"ProductName": "Prod 1",
"ItemDiscount": "10",
"Quantity": "3",
"TotalItemPrice": "161.865"
},
"2": {
"ProductName": "Prod 2",
"ItemDiscount": "0",
"Quantity": "5",
"TotalItemPrice": "449.75"
}
}
}
}
}
}
На основе json Я сделал для вас пользовательский интерфейс, чтобы вы могли показать детали заказа:
import 'dart:convert';
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(home: HomePage());
}
}
class HomePage extends StatefulWidget {
@override
_HomePageState createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> {
List<Order> ordersList = List();
@override
void initState() {
super.initState();
getData();
}
getData() async {
String data =
await DefaultAssetBundle.of(context).loadString("json/parse.json");
Map newMap = json.decode(data);
newMap['data'].forEach((k, v) {
v.forEach((key, val) {
String ordername = key;
List<Item> items = List();
val['Items'].forEach((key, value) {
print('sample');
Item item = Item(
productNumber: key,
productName: value['ProductName'],
itemDiscount: value['ItemDiscount'],
quantity: value['Quantity'],
totalItemPrice: value['TotalItemPrice'],
);
items.add(item);
print(key);
print(value);
print('length is :${items.length}');
});
Order order = Order(
orderId: val['OrderId'],
orderName: ordername,
total: val['total'],
items: items);
ordersList.add(order);
});
});
setState(() {});
print('This is the list : count ${ordersList.length}');
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Container(
child: ListView.builder(
itemCount: ordersList.length,
shrinkWrap: true,
itemBuilder: (context, index) {
var order = ordersList[index];
return Card(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Text('Order Name : ${order.orderName}'),
Text('Order Id : ${order.orderId}'),
Text('Order total : ${order.total}'),
Text('Order Items: ${order.items.length}')
],
),
);
}),
));
}
}
class Order {
final String orderName;
final String orderId;
final String total;
final List<Item> items;
Order({this.orderName, this.orderId, this.total, this.items});
}
class Item {
Item({
this.productName,
this.itemDiscount,
this.quantity,
this.totalItemPrice,
this.productNumber,
});
String productNumber;
String productName;
String itemDiscount;
String quantity;
String totalItemPrice;
}
Может быть, я запутался только в том, что json, который вы указали, является правильным, пожалуйста, проверьте, так как в нем есть order6 внутри заказа 4 , и есть параметры ухода для OrderSubTotal и total, просто дайте мне знать, если все в порядке.
Просто проверьте и дайте мне знать, работает ли он