【发布时间】:2020-12-18 11:13:31
【问题描述】:
我正在解析和显示来自 Json api 类型的“带有列表的嵌套结构”的数据。这是输出:showing data from list of map 这是代码:
import 'package:ecommerce/data/HomePageTestData.dart';
import 'package:ecommerce/model/product_model.dart';
import 'package:ecommerce/services/product_services.dart';
import 'package:ecommerce/widgets/Home/SingleProduct.dart';
import 'package:flutter/material.dart';
// ignore: must_be_immutable
class NewesProdutBuilder extends StatelessWidget {
HomePageTestData homePageTestData = HomePageTestData();
@override
Widget build(BuildContext context) {
return FutureBuilder<List<Product>>(
future: getProduct(),
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.done) {
if (snapshot.hasError) {
return Text("Error");
}
return GridView.builder(
itemCount: snapshot.data.length,
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 2,
),
itemBuilder: (BuildContext contextd, int index) => SingleProduct(
picture: snapshot.data[index].productImage,
price: snapshot.data[index].salePrice,
name: snapshot.data[index].productName,
rating: snapshot.data[index].ratting,
),
);
} else
return Center(
child: CircularProgressIndicator(),
);
});
}
}
。现在这是我的 json 演示:
{
"message": "all product show",
"product": [
{
"id": 12,
"product_name": "nurullah",
"product_description": "nurullah123",
"category_id": 7,
"color_id": 3,
"size_id": 2,
"regular_price": 123,
"sale_price": 123,
"quantity": 12,
"ratting": 5,
"product_image": "image/product/370313701.jpg",
"flag": 0,
"status": 1,
"created_at": "2020-08-11 13:43:55",
"updated_at": "2020-08-11 13:43:55"
},
{
"id": 15,
"product_name": "last change",
"product_description": "last",
"category_id": 6,
"color_id": 2,
"size_id": 2,
"regular_price": 50,
"sale_price": 50,
"quantity": 2,
"ratting": 5,
"product_image": "image/product/73804247.jpg",
"flag": 0,
"status": 1,
"created_at": "2020-08-19 08:39:55",
"updated_at": "2020-08-22 13:24:24"
},
{
"id": 20,
"product_name": "laptop",
"product_description": "laptop laptop",
"category_id": 5,
"color_id": 2,
"size_id": 2,
"regular_price": 100000,
"sale_price": 99999,
"quantity": 2,
"ratting": 5,
"product_image": "image/product/1344055520.jpg",
"flag": 1,
"status": 1,
"created_at": "2020-08-19 18:05:53",
"updated_at": "2020-08-19 18:05:53"
},
{
"id": 22,
"product_name": "final update",
"product_description": "avbhhdh",
"category_id": 5,
"color_id": 2,
"size_id": 2,
"regular_price": 1234,
"sale_price": 1231,
"quantity": 123,
"ratting": 5,
"product_image": "image/product/306259603.jpg",
"flag": 0,
"status": 0,
"created_at": "2020-08-20 12:50:52",
"updated_at": "2020-08-20 12:50:52"
},
{
"id": 23,
"product_name": "Sarowar Test",
"product_description": "sarowar test",
"category_id": 5,
"color_id": 2,
"size_id": 2,
"regular_price": 100,
"sale_price": 100,
"quantity": 100,
"ratting": 5,
"product_image": "image/product/44664910.jpg",
"flag": 0,
"status": 1,
"created_at": "2020-08-22 05:10:57",
"updated_at": "2020-08-22 05:10:57"
},
{
"id": 29,
"product_name": "updated today",
"product_description": "clear clear",
"category_id": 4,
"color_id": 2,
"size_id": 2,
"regular_price": 400,
"sale_price": 200,
"quantity": 30,
"ratting": 5,
"product_image": "image/product/1050889360.jpg",
"flag": 1,
"status": 1,
"created_at": "2020-08-22 08:04:39",
"updated_at": "2020-08-23 03:49:07"
},
{
"id": 31,
"product_name": "test product create",
"product_description": "test update",
"category_id": 5,
"color_id": 3,
"size_id": 3,
"regular_price": 123,
"sale_price": 121,
"quantity": 12,
"ratting": 5,
"product_image": "image/product/2038622981.jpg",
"flag": 0,
"status": 0,
"created_at": "2020-08-25 11:14:36",
"updated_at": "2020-08-25 11:14:36"
},
{
"id": 32,
"product_name": "first update",
"product_description": "first",
"category_id": 2,
"color_id": 2,
"size_id": 2,
"regular_price": 50,
"sale_price": 50,
"quantity": 2,
"ratting": 2,
"product_image": "image/product/1715828823.png",
"flag": 1,
"status": 1,
"created_at": "2020-08-27 09:25:10",
"updated_at": "2020-08-27 09:25:10"
},
{
"id": 33,
"product_name": "check dialog",
"product_description": "check",
"category_id": 5,
"color_id": 3,
"size_id": 3,
"regular_price": 123,
"sale_price": 121,
"quantity": 12,
"ratting": 5,
"product_image": "image/product/2087545994.jpg",
"flag": 0,
"status": 0,
"created_at": "2020-08-27 09:37:23",
"updated_at": "2020-08-27 09:37:23"
},
{
"id": 34,
"product_name": "ddd",
"product_description": "ddd",
"category_id": 5,
"color_id": 3,
"size_id": 3,
"regular_price": 123,
"sale_price": 12,
"quantity": 12,
"ratting": 5,
"product_image": "image/product/2108974399.jpg",
"flag": 1,
"status": 0,
"created_at": "2020-08-27 09:42:47",
"updated_at": "2020-08-27 09:42:47"
},
{
"id": 35,
"product_name": "cccc",
"product_description": "sssss",
"category_id": 5,
"color_id": 3,
"size_id": 3,
"regular_price": 123,
"sale_price": 1211,
"quantity": 21,
"ratting": 5,
"product_image": "image/product/551301279.jpg",
"flag": 1,
"status": 1,
"created_at": "2020-08-27 12:07:53",
"updated_at": "2020-08-27 12:07:53"
}
]
}
在这个 json 中有一个名为 flag 的属性。现在我只想显示那些标志为 1 的数据。我不明白如何做到这一点。 请帮我找到解决方案。提前致谢。
解决方案:
import 'package:ecommerce/data/HomePageTestData.dart';
import 'package:ecommerce/model/product_model.dart';
import 'package:ecommerce/services/product_services.dart';
import 'package:ecommerce/widgets/Home/SingleProduct.dart';
import 'package:flutter/material.dart';
// ignore: must_be_immutable
class NewesProdutBuilder extends StatelessWidget {
HomePageTestData homePageTestData = HomePageTestData();
@override
Widget build(BuildContext context) {
return FutureBuilder<List<Product>>(
future: getProduct(),
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.done) {
if (snapshot.hasError) {
return Text("Error");
}
var _productList =
snapshot.data.where((obj) => obj.flag == 1).toList();
return GridView.builder(
itemCount: _productList.length,
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 2,
),
itemBuilder: (BuildContext contextd, int index) =>
SingleProduct(
picture: _productList[index].productImage,
price: _productList[index].salePrice,
name: _productList[index].productName,
rating: _productList[index].ratting,
),
);
} else
return Center(
child: CircularProgressIndicator(),
);
});
}
}
【问题讨论】:
-
请将 JSON 作为文本而不是图像。此外,在问题中包含您的尝试(例如您如何解析和存储数据)。
-
我可以发布 json pastebin 链接吗?而且我的尝试图片也可以,或者我必须输入代码?
-
您需要将代码作为文本放入此处。此外,链接可能会在以后失效。
-
完成。现在你可以找到代码和 json 了。
-
GetProduct 正在返回一个列表。在返回该列表之前,使用 .where 仅选择满足谓词的那些,对您来说是 flag==1