deserialize geometry polygon from mongodb - flutter

i am new to flutter and was trying to deserialize a geojson from my api.
the retrieved geojson looks something like this:
[
{
"_id": {
"$oid": "5e95d60049ebb0e6b45a34e6"
},
"type": "Feature",
"geometry": {
"type": "Polygon",
"coordinates": [
[
[
14.810392700000136,
50.8584471640001
],
[
14.867856893000067,
50.8643899540001
]
]
]
},
"properties": {
"ADMIN": "Test",
"ISO_A3": "TST",
"ISO_A2": "TS"
}
}
]
i tried to use the JSON to Dart page(https://javiercbk.github.io/json_to_dart/) to retrieve a model that i can use in flutter.. but it says that the generated code is invalid cause of the 3 lists inside the coordinate element
the problem in the generated code is here:
Geometry.fromJson(Map<String, dynamic> json) {
type = json['type'];
if (json['coordinates'] != null) {
coordinates = new List<List>();
json['coordinates'].forEach((v) { coordinates.add(new List.fromJson(v)); });
}
}
anybody can help me out to solve the 3 lists in the list problem?

You can copy paste run full code below
You can see Geometry class definition in full code
code snippet
class Geometry {
String type;
List<List<List<double>>> coordinates;
...
factory Geometry.fromJson(Map<String, dynamic> json) => Geometry(
type: json["type"],
coordinates: List<List<List<double>>>.from(json["coordinates"].map(
(x) => List<List<double>>.from(
x.map((x) => List<double>.from(x.map((x) => x.toDouble())))))),
);
print(payloadList[0].id.oid);
print(payloadList[0].geometry.coordinates[0][0][0]);
print(payloadList[0].geometry.coordinates[0][0][1]);
print(payloadList[0].geometry.coordinates[0][1][0]);
print(payloadList[0].geometry.coordinates[0][1][1]);
output
I/flutter (25078): 5e95d60049ebb0e6b45a34e6
I/flutter (25078): 14.810392700000136
I/flutter (25078): 50.8584471640001
I/flutter (25078): 14.867856893000067
I/flutter (25078): 50.8643899540001
full code
import 'package:flutter/material.dart';
import 'dart:convert';
List<Payload> payloadFromJson(String str) =>
List<Payload>.from(json.decode(str).map((x) => Payload.fromJson(x)));
String payloadToJson(List<Payload> data) =>
json.encode(List<dynamic>.from(data.map((x) => x.toJson())));
class Payload {
Id id;
String type;
Geometry geometry;
Properties properties;
Payload({
this.id,
this.type,
this.geometry,
this.properties,
});
factory Payload.fromJson(Map<String, dynamic> json) => Payload(
id: Id.fromJson(json["_id"]),
type: json["type"],
geometry: Geometry.fromJson(json["geometry"]),
properties: Properties.fromJson(json["properties"]),
);
Map<String, dynamic> toJson() => {
"_id": id.toJson(),
"type": type,
"geometry": geometry.toJson(),
"properties": properties.toJson(),
};
}
class Geometry {
String type;
List<List<List<double>>> coordinates;
Geometry({
this.type,
this.coordinates,
});
factory Geometry.fromJson(Map<String, dynamic> json) => Geometry(
type: json["type"],
coordinates: List<List<List<double>>>.from(json["coordinates"].map(
(x) => List<List<double>>.from(
x.map((x) => List<double>.from(x.map((x) => x.toDouble())))))),
);
Map<String, dynamic> toJson() => {
"type": type,
"coordinates": List<dynamic>.from(coordinates.map((x) =>
List<dynamic>.from(
x.map((x) => List<dynamic>.from(x.map((x) => x)))))),
};
}
class Id {
String oid;
Id({
this.oid,
});
factory Id.fromJson(Map<String, dynamic> json) => Id(
oid: json["\u0024oid"],
);
Map<String, dynamic> toJson() => {
"\u0024oid": oid,
};
}
class Properties {
String admin;
String isoA3;
String isoA2;
Properties({
this.admin,
this.isoA3,
this.isoA2,
});
factory Properties.fromJson(Map<String, dynamic> json) => Properties(
admin: json["ADMIN"],
isoA3: json["ISO_A3"],
isoA2: json["ISO_A2"],
);
Map<String, dynamic> toJson() => {
"ADMIN": admin,
"ISO_A3": isoA3,
"ISO_A2": isoA2,
};
}
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
#override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
visualDensity: VisualDensity.adaptivePlatformDensity,
),
home: MyHomePage(title: 'Flutter Demo Home Page'),
);
}
}
class MyHomePage extends StatefulWidget {
MyHomePage({Key key, this.title}) : super(key: key);
final String title;
#override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
int _counter = 0;
void _incrementCounter() {
String jsonString = '''
[
{
"_id": {
"\$oid": "5e95d60049ebb0e6b45a34e6"
},
"type": "Feature",
"geometry": {
"type": "Polygon",
"coordinates": [
[
[
14.810392700000136,
50.8584471640001
],
[
14.867856893000067,
50.8643899540001
]
]
]
},
"properties": {
"ADMIN": "Test",
"ISO_A3": "TST",
"ISO_A2": "TS"
}
}
]
''';
List<Payload> payloadList = payloadFromJson(jsonString);
print(payloadList[0].id.oid);
print(payloadList[0].geometry.coordinates[0][0][0]);
print(payloadList[0].geometry.coordinates[0][0][1]);
print(payloadList[0].geometry.coordinates[0][1][0]);
print(payloadList[0].geometry.coordinates[0][1][1]);
setState(() {
_counter++;
});
}
#override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
'You have pushed the button this many times:',
),
Text(
'$_counter',
style: Theme.of(context).textTheme.headline4,
),
],
),
),
floatingActionButton: FloatingActionButton(
onPressed: _incrementCounter,
tooltip: 'Increment',
child: Icon(Icons.add),
),
);
}
}

Related

When I fetch data from API showing StatusCode 403(Failed to load post) - Flutter.?

eg: details about the questions .......................................................................... When I want to fetch multiple objects from an array showing status code 403(Failed to load post).and API having a header key I have implemented it also. but showing failed to load post status code 403.
{
"status": 1,
"msg": "7 banners found",
"data": [
{
"id": "14",
"image": "https://www.sofikart.com/admin/upload/app_banner/1635945056.jpeg",
"cat_id": "4",
"product_id": "81",
"url": null,
"status": "Active",
"ordering": "0",
"updated": "2021-11-03 06:10:56"
},
{
"id": "7",
"image": "https://www.sofikart.com/admin/upload/app_banner/1642082634.jpeg",
"cat_id": "4",
"product_id": "111",
"url": null,
"status": "Active",
"ordering": "1",
"updated": "2021-10-28 04:53:26"
}
]
}
controller
-----------
import 'dart:io';
import 'package:fm_sidharth/model/post.dart';
import 'package:http/http.dart' as http;
import 'dart:convert';
final String url = 'https://www.sofikart.com/MobileApi/banners';
Future<List<Post>> fetchPost() async {
final response = await http.get(
url, headers: {HttpHeaders.authorizationHeader: 'SOFIKART-*2021#',},);
if (response.statusCode == 200) {
// If the call to the server was successful, parse the JSON.
final result = json.decode(response.body);
List<Post> posts =
result.map<Post>((model) => new Post.fromJson(model)).toList();
return posts;
} else {
// If that call was not successful, throw an error.
throw Exception('Failed to load post');
}
}
Future<String> saveNetworkImageToPhoto(String url, String title,
{bool useCache: true}) async {
var data = await getNetworkImageData(url, useCache: useCache);
var filePath = await ImagePickerSaver.saveFile(fileData: data, title: title);
return filePath;
}
class ImagePickerSaver {
static saveFile({fileData, String title}) {}
}
getNetworkImageData(String url, {booluseCache, bool
useCache}) {
}
model
-------------
// To parse this JSON data, do
//
// final welcome = welcomeFromJson(jsonString);
import 'dart:convert';
Post welcomeFromJson(String str) => Post.fromJson(json.decode(str));
String welcomeToJson(Post data) => json.encode(data.toJson());
class Post {
Post({
this.status,
this.msg,
this.data,
});
int status;
String msg;
List<Datum> data;
factory Post.fromJson(Map<String, dynamic> json) => Post(
status: json["status"],
msg: json["msg"],
data: List<Datum>.from(json["data"].map((x) => Datum.fromJson(x))),
);
String get catId => null;
get image => null;
Map<String, dynamic> toJson() => {
"status": status,
"msg": msg,
"data": List<dynamic>.from(data.map((x) => x.toJson())),
};
}
class Datum {
Datum({
this.id,
this.image,
this.catId,
this.productId,
this.url,
this.status,
this.ordering,
this.updated,
});
String id;
String image;
String catId;
String productId;
dynamic url;
String status;
String ordering;
DateTime updated;
factory Datum.fromJson(Map<String, dynamic> json) => Datum(
id: json["id"],
image: json["image"],
catId: json["cat_id"],
productId: json["product_id"],
url: json["url"],
status: json["status"],
ordering: json["ordering"],
updated: DateTime.parse(json["updated"]),
);
Map<String, dynamic> toJson() => {
"id": id,
"image": image,
"cat_id": catId,
"product_id": productId,
"url": url,
"status": status,
"ordering": ordering,
"updated": updated.toIso8601String(),
};
}
home
-----------
import 'package:flutter/material.dart';
import 'package:fm_sidharth/Controller/postController.dart';
import 'package:fm_sidharth/model/post.dart';
import 'package:fm_sidharth/page/postdetails.dart';
class HomePage extends StatefulWidget {
HomePage({Key key}) : super(key: key);
_HomePageState createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> {
Future<List<Post>> posts;
_HomePageState() {
posts = fetchPost();
}
#override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Fetch Data Example'),
),
body: FutureBuilder<List<Post>>(
future: posts,
builder: (context, snapshot) {
if (snapshot.hasData) {
return ListView.builder(
itemCount: snapshot.data.length,
itemBuilder: (BuildContext context, int index) {
return FlatButton(
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) =>
PostDetails(snapshot.data[index])),
);
},
child: Card(
child: Column(
children: <Widget>[
Padding(
padding: const EdgeInsets.all(8.0),
child: Text(
snapshot.data[index].catId,
style: TextStyle(
color: Colors.black,
fontSize: 22,
fontWeight: FontWeight.bold,
),
),
),
SizedBox(
height: 10,
),
FadeInImage.assetNetwork(
image: snapshot.data[index].image,
placeholder: 'assets/images/noimage.png',
),
Row(
mainAxisAlignment: MainAxisAlignment.spaceAround,
children: <Widget>[
IconButton(
icon: Icon(Icons.favorite_border),
onPressed: () {},
),
IconButton(
icon: Icon(Icons.share),
onPressed: () {
},
),
IconButton(
icon: Icon(Icons.save),
onPressed: () {
saveNetworkImageToPhoto(
snapshot.data[index].image,snapshot.data[index].catId).then((value){
});
},
),
],
)
],
),
),
);
});
} else if (snapshot.hasError) {
return Text("${snapshot.error}");
}
// By default, show a loading spinner.
return Center(child: CircularProgressIndicator());
},
),
);
}
}
The HTTP 403 means that the access to the requested resource is forbidden. The server understood the request, but it is unable to fulfill it. Are you sure you sent the required(and correct) credentials to the server?

Flutter. When I fetch data from API showing StatusCode 403(Failed to load post)?

eg: details about the questions ..........................................................................
When I want to fetch multiple objects from an array showing status code 403(Failed to load post).and API having a header key I have implemented it also. but showing failed to load post status code 403.
{
"status": 1,
"msg": "7 banners found",
"data": [
{
"id": "14",
"image": "https://www.sofikart.com/admin/upload/app_banner/1635945056.jpeg",
"cat_id": "4",
"product_id": "81",
"url": null,
"status": "Active",
"ordering": "0",
"updated": "2021-11-03 06:10:56"
},
{
"id": "7",
"image": "https://www.sofikart.com/admin/upload/app_banner/1642082634.jpeg",
"cat_id": "4",
"product_id": "111",
"url": null,
"status": "Active",
"ordering": "1",
"updated": "2021-10-28 04:53:26"
}
]
}
controller
-----------
import 'dart:io';
import 'package:fm_sidharth/model/post.dart';
import 'package:http/http.dart' as http;
import 'dart:convert';
final String url = 'https://www.sofikart.com/MobileApi/banners';
Future<List<Post>> fetchPost() async {
final response = await http.get(
url, headers: {HttpHeaders.authorizationHeader: 'SOFIKART-*2021#',},);
if (response.statusCode == 200) {
// If the call to the server was successful, parse the JSON.
final result = json.decode(response.body);
List<Post> posts =
result.map<Post>((model) => new Post.fromJson(model)).toList();
return posts;
} else {
// If that call was not successful, throw an error.
throw Exception('Failed to load post');
}
}
Future<String> saveNetworkImageToPhoto(String url, String title,
{bool useCache: true}) async {
var data = await getNetworkImageData(url, useCache: useCache);
var filePath = await ImagePickerSaver.saveFile(fileData: data, title: title);
return filePath;
}
class ImagePickerSaver {
static saveFile({fileData, String title}) {}
}
getNetworkImageData(String url, {booluseCache, bool
useCache}) {
}
model
// To parse this JSON data, do
//
// final welcome = welcomeFromJson(jsonString);
import 'dart:convert';
Post welcomeFromJson(String str) => Post.fromJson(json.decode(str));
String welcomeToJson(Post data) => json.encode(data.toJson());
class Post {
Post({
this.status,
this.msg,
this.data,
});
int status;
String msg;
List<Datum> data;
factory Post.fromJson(Map<String, dynamic> json) => Post(
status: json["status"],
msg: json["msg"],
data: List<Datum>.from(json["data"].map((x) => Datum.fromJson(x))),
);
String get catId => null;
get image => null;
Map<String, dynamic> toJson() => {
"status": status,
"msg": msg,
"data": List<dynamic>.from(data.map((x) => x.toJson())),
};
}
class Datum {
Datum({
this.id,
this.image,
this.catId,
this.productId,
this.url,
this.status,
this.ordering,
this.updated,
});
String id;
String image;
String catId;
String productId;
dynamic url;
String status;
String ordering;
DateTime updated;
factory Datum.fromJson(Map<String, dynamic> json) => Datum(
id: json["id"],
image: json["image"],
catId: json["cat_id"],
productId: json["product_id"],
url: json["url"],
status: json["status"],
ordering: json["ordering"],
updated: DateTime.parse(json["updated"]),
);
Map<String, dynamic> toJson() => {
"id": id,
"image": image,
"cat_id": catId,
"product_id": productId,
"url": url,
"status": status,
"ordering": ordering,
"updated": updated.toIso8601String(),
};
}
home
import 'package:flutter/material.dart';
import 'package:fm_sidharth/Controller/postController.dart';
import 'package:fm_sidharth/model/post.dart';
import 'package:fm_sidharth/page/postdetails.dart';
class HomePage extends StatefulWidget {
HomePage({Key key}) : super(key: key);
_HomePageState createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> {
Future<List<Post>> posts;
_HomePageState() {
posts = fetchPost();
}
#override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Fetch Data Example'),
),
body: FutureBuilder<List<Post>>(
future: posts,
builder: (context, snapshot) {
if (snapshot.hasData) {
return ListView.builder(
itemCount: snapshot.data.length,
itemBuilder: (BuildContext context, int index) {
return FlatButton(
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) =>
PostDetails(snapshot.data[index])),
);
},
child: Card(
child: Column(
children: <Widget>[
Padding(
padding: const EdgeInsets.all(8.0),
child: Text(
snapshot.data[index].catId,
style: TextStyle(
color: Colors.black,
fontSize: 22,
fontWeight: FontWeight.bold,
),
),
),
SizedBox(
height: 10,
),
FadeInImage.assetNetwork(
image: snapshot.data[index].image,
placeholder: 'assets/images/noimage.png',
),
Row(
mainAxisAlignment: MainAxisAlignment.spaceAround,
children: <Widget>[
IconButton(
icon: Icon(Icons.favorite_border),
onPressed: () {},
),
IconButton(
icon: Icon(Icons.share),
onPressed: () {
},
),
IconButton(
icon: Icon(Icons.save),
onPressed: () {
saveNetworkImageToPhoto(
snapshot.data[index].image,snapshot.data[index].catId).then((value){
});
},
),
],
)
],
),
),
);
});
} else if (snapshot.hasError) {
return Text("${snapshot.error}");
}
// By default, show a loading spinner.
return Center(child: CircularProgressIndicator());
},
),
);
}
}
I have this error too some times, I think this about restrict that google set on you country. please use a proxy. I hope my answer helping to you :)

create gridView using dynamic JSON data in Flutter

I want to create gridView using dynamic JSON data in Flutter
JSON Data
name;
description;
image;
price;
discountAmount;
status;
as gridview vertical *2
import 'package:flutter/material.dart';
import 'dart:convert';
import 'package:http/http.dart' as http;
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
// This widget is the root of your application.
#override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: Home(),
);
}
}
class Home extends StatefulWidget {
#override
_HomeState createState() => _HomeState();
}
class _HomeState extends State<Home> {
Future<Products> getApiData() async {
var url = "https://gorest.co.in/public-api/products";
var response = await http.get(url);
var jsonString = response.body;
Products products = productsFromJson(jsonString);
print(jsonString);
return products;
}
#override
void initState() {
super.initState();
getApiData().then((value) => print(value));
}
#override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("helloo"),
centerTitle: true,
),
);
}
}
I am building an app using flutter. I want to show a gridview and inside that gridview of data. I have a JSON Api
which the response is like this.
// To parse this JSON data, do
//
// final products = productsFromJson(jsonString);
Products productsFromJson(String str) => Products.fromJson(json.decode(str));
String productsToJson(Products data) => json.encode(data.toJson());
class Products {
Products({
this.code,
this.meta,
this.data,
});
int code;
Meta meta;
List<Datum> data;
factory Products.fromJson(Map<String, dynamic> json) => Products(
code: json["code"],
meta: Meta.fromJson(json["meta"]),
data: List<Datum>.from(json["data"].map((x) => Datum.fromJson(x))),
);
Map<String, dynamic> toJson() => {
"code": code,
"meta": meta.toJson(),
"data": List<dynamic>.from(data.map((x) => x.toJson())),
};
}
class Datum {
Datum({
this.id,
this.name,
this.description,
this.image,
this.price,
this.discountAmount,
this.status,
this.categories,
});
int id;
String name;
String description;
String image;
String price;
String discountAmount;
bool status;
List<Category> categories;
factory Datum.fromJson(Map<String, dynamic> json) => Datum(
id: json["id"],
name: json["name"],
description: json["description"],
image: json["image"],
price: json["price"],
discountAmount: json["discount_amount"],
status: json["status"],
categories: List<Category>.from(
json["categories"].map((x) => Category.fromJson(x))),
);
Map<String, dynamic> toJson() => {
"id": id,
"name": name,
"description": description,
"image": image,
"price": price,
"discount_amount": discountAmount,
"status": status,
"categories": List<dynamic>.from(categories.map((x) => x.toJson())),
};
}
class Category {
Category({
this.id,
this.name,
});
int id;
String name;
factory Category.fromJson(Map<String, dynamic> json) => Category(
id: json["id"],
name: json["name"],
);
Map<String, dynamic> toJson() => {
"id": id,
"name": name,
};
}
class Meta {
Meta({
this.pagination,
});
Pagination pagination;
factory Meta.fromJson(Map<String, dynamic> json) => Meta(
pagination: Pagination.fromJson(json["pagination"]),
);
Map<String, dynamic> toJson() => {
"pagination": pagination.toJson(),
};
}
class Pagination {
Pagination({
this.total,
this.pages,
this.page,
this.limit,
});
int total;
int pages;
int page;
int limit;
factory Pagination.fromJson(Map<String, dynamic> json) => Pagination(
total: json["total"],
pages: json["pages"],
page: json["page"],
limit: json["limit"],
);
Map<String, dynamic> toJson() => {
"total": total,
"pages": pages,
"page": page,
"limit": limit,
};
}
like this one
Try to get an idea and implement in this way in your main dart file
#override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("helloo"),
centerTitle: true,
body : GridView.builder(
shrinkWrap: true,
physics: ScrollPhysics(),
itemCount: (snapshot.data.length) != null ? snapshot.data.length : 0, // your getApiData()
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 2),
itemBuilder: (context, index) {
return YourItemDesign(
product: snapshot.data[index],
);
},
),
),
);
}

Need help to parse json to flutter

Hello guys i'm trying to learn flutter, and i want to display json information in the app, but i'm struggling to get some information.
This is what i currently have.
import 'package:flutter/material.dart';
import 'dart:async';
import 'package:dio/dio.dart';
void main() {
runApp(new MaterialApp(
home: new HomePage(),
));
}
class HomePage extends StatefulWidget {
#override
_HomePageState createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> {
Future<void> _getFutureDados() async {
Uri url = Uri.parse('https://fortnite-api.com/v2/shop/br');
Response response = await Dio().request(url.toString());
List<ItemLoja> itensLoja = List<ItemLoja>();
for (Map<String, dynamic> item in response.data['data']['featured']) {
itensLoja.add(ItemLoja.fromJson(item));
}
#override
void initState() {
super.initState();
_getFutureDados();
}
}
#override
Widget build(BuildContext context) {
_getFutureDados();
return Scaffold(
body: ListView.builder(
itemCount: response.data == null ? 0 : response.data.length,
itemBuilder: (context, index) {
final item = response.data[index];
Text(item.name);
},
));
}
}
class ItemLoja {
final String id;
final String name;
ItemLoja({
this.id,
this.name,
});
ItemLoja.fromJson(Map<String, dynamic> jsonData)
: id = jsonData['id'],
name = jsonData['name'];
}
I can manage to print the json in the terminal, but not in-app. It's not possible to do something like this with forEach?
In php, i can managed to do that and it was easy, getting the name by using ($item[name]) and then putting where i wanted it.
Thanks for any help.
Sorry for my english, but's not my main language.
You can copy paste run full code below
Step 1: You can use Payload.fromJson(response.data), see full code for detail
Step 2: Display with FutureBuilder and nested ListView
code snippet
Future<Payload> _getFutureDados() async {
Uri url = Uri.parse('https://fortnite-api.com/v2/shop/br');
Response response = await Dio().request(url.toString());
if (response.statusCode == 200) {
return Payload.fromJson(response.data);
} else {
throw Exception;
}
}
...
return ListView.separated(
separatorBuilder: (BuildContext context, int index) {
return SizedBox(
height: 10,
);
},
shrinkWrap: true,
itemCount: snapshot.data.data.featured.entries.length,
itemBuilder: (context, index) {
var entries = snapshot.data.data.featured.entries;
return Column(
children: [
Text("price ${entries[index].regularPrice.toString()}"),
ListView.builder(
shrinkWrap: true,
physics: NeverScrollableScrollPhysics(),
working demo
full code
import 'package:dio/dio.dart';
import 'package:flutter/material.dart';
import 'dart:convert';
Payload payloadFromJson(String str) => Payload.fromJson(json.decode(str));
String payloadToJson(Payload data) => json.encode(data.toJson());
class Payload {
Payload({
this.status,
this.data,
});
int status;
Data data;
factory Payload.fromJson(Map<String, dynamic> json) => Payload(
status: json["status"],
data: Data.fromJson(json["data"]),
);
Map<String, dynamic> toJson() => {
"status": status,
"data": data.toJson(),
};
}
class Data {
Data({
this.hash,
this.date,
this.featured,
this.daily,
this.specialFeatured,
this.specialDaily,
this.votes,
this.voteWinners,
});
String hash;
DateTime date;
Daily featured;
Daily daily;
Daily specialFeatured;
dynamic specialDaily;
dynamic votes;
dynamic voteWinners;
factory Data.fromJson(Map<String, dynamic> json) => Data(
hash: json["hash"],
date: DateTime.parse(json["date"]),
featured: Daily.fromJson(json["featured"]),
daily: Daily.fromJson(json["daily"]),
specialFeatured: Daily.fromJson(json["specialFeatured"]),
specialDaily: json["specialDaily"],
votes: json["votes"],
voteWinners: json["voteWinners"],
);
Map<String, dynamic> toJson() => {
"hash": hash,
"date": date.toIso8601String(),
"featured": featured.toJson(),
"daily": daily.toJson(),
"specialFeatured": specialFeatured.toJson(),
"specialDaily": specialDaily,
"votes": votes,
"voteWinners": voteWinners,
};
}
class Daily {
Daily({
this.name,
this.entries,
});
String name;
List<Entry> entries;
factory Daily.fromJson(Map<String, dynamic> json) => Daily(
name: json["name"],
entries:
List<Entry>.from(json["entries"].map((x) => Entry.fromJson(x))),
);
Map<String, dynamic> toJson() => {
"name": name,
"entries": List<dynamic>.from(entries.map((x) => x.toJson())),
};
}
class Entry {
Entry({
this.regularPrice,
this.finalPrice,
this.bundle,
this.banner,
this.giftable,
this.refundable,
this.sortPriority,
this.categories,
this.devName,
this.offerId,
this.displayAssetPath,
this.newDisplayAssetPath,
this.items,
});
int regularPrice;
int finalPrice;
dynamic bundle;
Banner banner;
bool giftable;
bool refundable;
int sortPriority;
List<String> categories;
String devName;
String offerId;
String displayAssetPath;
String newDisplayAssetPath;
List<ItemLoja> items;
factory Entry.fromJson(Map<String, dynamic> json) => Entry(
regularPrice: json["regularPrice"],
finalPrice: json["finalPrice"],
bundle: json["bundle"],
banner: json["banner"] == null ? null : Banner.fromJson(json["banner"]),
giftable: json["giftable"],
refundable: json["refundable"],
sortPriority: json["sortPriority"],
categories: List<String>.from(json["categories"].map((x) => x)),
devName: json["devName"],
offerId: json["offerId"],
displayAssetPath:
json["displayAssetPath"] == null ? null : json["displayAssetPath"],
newDisplayAssetPath: json["newDisplayAssetPath"] == null
? null
: json["newDisplayAssetPath"],
items:
List<ItemLoja>.from(json["items"].map((x) => ItemLoja.fromJson(x))),
);
Map<String, dynamic> toJson() => {
"regularPrice": regularPrice,
"finalPrice": finalPrice,
"bundle": bundle,
"banner": banner == null ? null : banner.toJson(),
"giftable": giftable,
"refundable": refundable,
"sortPriority": sortPriority,
"categories": List<dynamic>.from(categories.map((x) => x)),
"devName": devName,
"offerId": offerId,
"displayAssetPath": displayAssetPath == null ? null : displayAssetPath,
"newDisplayAssetPath":
newDisplayAssetPath == null ? null : newDisplayAssetPath,
"items": List<dynamic>.from(items.map((x) => x.toJson())),
};
}
class Banner {
Banner({
this.value,
this.backendValue,
});
String value;
String backendValue;
factory Banner.fromJson(Map<String, dynamic> json) => Banner(
value: json["value"],
backendValue: json["backendValue"],
);
Map<String, dynamic> toJson() => {
"value": value,
"backendValue": backendValue,
};
}
class ItemLoja {
ItemLoja({
this.id,
this.name,
this.description,
this.type,
this.rarity,
this.series,
this.itemSet,
this.introduction,
this.images,
this.variants,
this.gameplayTags,
this.showcaseVideo,
this.displayAssetPath,
this.definitionPath,
this.path,
this.added,
this.shopHistory,
});
String id;
String name;
String description;
Rarity type;
Rarity rarity;
Series series;
Set itemSet;
Introduction introduction;
Images images;
List<Variant> variants;
List<String> gameplayTags;
String showcaseVideo;
String displayAssetPath;
String definitionPath;
String path;
DateTime added;
List<DateTime> shopHistory;
factory ItemLoja.fromJson(Map<String, dynamic> json) => ItemLoja(
id: json["id"],
name: json["name"],
description: json["description"],
type: Rarity.fromJson(json["type"]),
rarity: Rarity.fromJson(json["rarity"]),
series: json["series"] == null ? null : Series.fromJson(json["series"]),
itemSet: json["set"] == null ? null : Set.fromJson(json["set"]),
introduction: Introduction.fromJson(json["introduction"]),
images: Images.fromJson(json["images"]),
variants: json["variants"] == null
? null
: List<Variant>.from(
json["variants"].map((x) => Variant.fromJson(x))),
gameplayTags: List<String>.from(json["gameplayTags"].map((x) => x)),
showcaseVideo:
json["showcaseVideo"] == null ? null : json["showcaseVideo"],
displayAssetPath:
json["displayAssetPath"] == null ? null : json["displayAssetPath"],
definitionPath:
json["definitionPath"] == null ? null : json["definitionPath"],
path: json["path"],
added: DateTime.parse(json["added"]),
shopHistory: List<DateTime>.from(
json["shopHistory"].map((x) => DateTime.parse(x))),
);
Map<String, dynamic> toJson() => {
"id": id,
"name": name,
"description": description,
"type": type.toJson(),
"rarity": rarity.toJson(),
"series": series == null ? null : series.toJson(),
"set": itemSet == null ? null : itemSet.toJson(),
"introduction": introduction.toJson(),
"images": images.toJson(),
"variants": variants == null
? null
: List<dynamic>.from(variants.map((x) => x.toJson())),
"gameplayTags": List<dynamic>.from(gameplayTags.map((x) => x)),
"showcaseVideo": showcaseVideo == null ? null : showcaseVideo,
"displayAssetPath": displayAssetPath == null ? null : displayAssetPath,
"definitionPath": definitionPath == null ? null : definitionPath,
"path": path,
"added": added.toIso8601String(),
"shopHistory":
List<dynamic>.from(shopHistory.map((x) => x.toIso8601String())),
};
}
class Images {
Images({
this.smallIcon,
this.icon,
this.featured,
this.other,
});
String smallIcon;
String icon;
String featured;
dynamic other;
factory Images.fromJson(Map<String, dynamic> json) => Images(
smallIcon: json["smallIcon"],
icon: json["icon"],
featured: json["featured"] == null ? null : json["featured"],
other: json["other"],
);
Map<String, dynamic> toJson() => {
"smallIcon": smallIcon,
"icon": icon,
"featured": featured == null ? null : featured,
"other": other,
};
}
class Introduction {
Introduction({
this.chapter,
this.season,
this.text,
this.backendValue,
});
String chapter;
String season;
TextEnum text;
int backendValue;
factory Introduction.fromJson(Map<String, dynamic> json) => Introduction(
chapter: json["chapter"],
season: json["season"],
text: textValues.map[json["text"]],
backendValue: json["backendValue"],
);
Map<String, dynamic> toJson() => {
"chapter": chapter,
"season": season,
"text": textValues.reverse[text],
"backendValue": backendValue,
};
}
enum TextEnum {
INTRODUCED_IN_CHAPTER_1_SEASON_5,
INTRODUCED_IN_CHAPTER_2_SEASON_2,
INTRODUCED_IN_CHAPTER_2_SEASON_4,
INTRODUCED_IN_CHAPTER_1_SEASON_6,
INTRODUCED_IN_CHAPTER_1_SEASON_9,
INTRODUCED_IN_CHAPTER_2_SEASON_3,
INTRODUCED_IN_CHAPTER_2_SEASON_1
}
final textValues = EnumValues({
"Introduced in Chapter 1, Season 5.":
TextEnum.INTRODUCED_IN_CHAPTER_1_SEASON_5,
"Introduced in Chapter 1, Season 6.":
TextEnum.INTRODUCED_IN_CHAPTER_1_SEASON_6,
"Introduced in Chapter 1, Season 9.":
TextEnum.INTRODUCED_IN_CHAPTER_1_SEASON_9,
"Introduced in Chapter 2, Season 1.":
TextEnum.INTRODUCED_IN_CHAPTER_2_SEASON_1,
"Introduced in Chapter 2, Season 2.":
TextEnum.INTRODUCED_IN_CHAPTER_2_SEASON_2,
"Introduced in Chapter 2, Season 3.":
TextEnum.INTRODUCED_IN_CHAPTER_2_SEASON_3,
"Introduced in Chapter 2, Season 4.":
TextEnum.INTRODUCED_IN_CHAPTER_2_SEASON_4
});
class Set {
Set({
this.value,
this.text,
this.backendValue,
});
String value;
String text;
String backendValue;
factory Set.fromJson(Map<String, dynamic> json) => Set(
value: json["value"],
text: json["text"],
backendValue: json["backendValue"],
);
Map<String, dynamic> toJson() => {
"value": value,
"text": text,
"backendValue": backendValue,
};
}
class Rarity {
Rarity({
this.value,
this.displayValue,
this.backendValue,
});
String value;
String displayValue;
BackendValue backendValue;
factory Rarity.fromJson(Map<String, dynamic> json) => Rarity(
value: json["value"],
displayValue: json["displayValue"],
backendValue: backendValueValues.map[json["backendValue"]],
);
Map<String, dynamic> toJson() => {
"value": value,
"displayValue": displayValue,
"backendValue": backendValueValues.reverse[backendValue],
};
}
enum BackendValue {
E_FORT_RARITY_LEGENDARY,
E_FORT_RARITY_RARE,
E_FORT_RARITY_UNCOMMON,
ATHENA_CHARACTER,
ATHENA_BACKPACK,
ATHENA_DANCE,
ATHENA_ITEM_WRAP,
E_FORT_RARITY_EPIC,
ATHENA_PICKAXE,
ATHENA_GLIDER
}
final backendValueValues = EnumValues({
"AthenaBackpack": BackendValue.ATHENA_BACKPACK,
"AthenaCharacter": BackendValue.ATHENA_CHARACTER,
"AthenaDance": BackendValue.ATHENA_DANCE,
"AthenaGlider": BackendValue.ATHENA_GLIDER,
"AthenaItemWrap": BackendValue.ATHENA_ITEM_WRAP,
"AthenaPickaxe": BackendValue.ATHENA_PICKAXE,
"EFortRarity::Epic": BackendValue.E_FORT_RARITY_EPIC,
"EFortRarity::Legendary": BackendValue.E_FORT_RARITY_LEGENDARY,
"EFortRarity::Rare": BackendValue.E_FORT_RARITY_RARE,
"EFortRarity::Uncommon": BackendValue.E_FORT_RARITY_UNCOMMON
});
class Series {
Series({
this.value,
this.image,
this.backendValue,
});
String value;
String image;
String backendValue;
factory Series.fromJson(Map<String, dynamic> json) => Series(
value: json["value"],
image: json["image"],
backendValue: json["backendValue"],
);
Map<String, dynamic> toJson() => {
"value": value,
"image": image,
"backendValue": backendValue,
};
}
class Variant {
Variant({
this.channel,
this.type,
this.options,
});
String channel;
String type;
List<Option> options;
factory Variant.fromJson(Map<String, dynamic> json) => Variant(
channel: json["channel"],
type: json["type"],
options:
List<Option>.from(json["options"].map((x) => Option.fromJson(x))),
);
Map<String, dynamic> toJson() => {
"channel": channel,
"type": type,
"options": List<dynamic>.from(options.map((x) => x.toJson())),
};
}
class Option {
Option({
this.tag,
this.name,
this.unlockRequirements,
this.image,
});
String tag;
String name;
dynamic unlockRequirements;
String image;
factory Option.fromJson(Map<String, dynamic> json) => Option(
tag: json["tag"],
name: json["name"],
unlockRequirements: json["unlockRequirements"],
image: json["image"],
);
Map<String, dynamic> toJson() => {
"tag": tag,
"name": name,
"unlockRequirements": unlockRequirements,
"image": image,
};
}
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;
}
}
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
#override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
visualDensity: VisualDensity.adaptivePlatformDensity,
),
home: MyHomePage(title: 'Flutter Demo Home Page'),
);
}
}
class MyHomePage extends StatefulWidget {
MyHomePage({Key key, this.title}) : super(key: key);
final String title;
#override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
Future<Payload> _future;
Future<Payload> _getFutureDados() async {
Uri url = Uri.parse('https://fortnite-api.com/v2/shop/br');
Response response = await Dio().request(url.toString());
if (response.statusCode == 200) {
return Payload.fromJson(response.data);
} else {
throw Exception;
}
}
#override
void initState() {
_future = _getFutureDados();
super.initState();
}
#override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: FutureBuilder(
future: _future,
builder: (context, AsyncSnapshot<Payload> snapshot) {
switch (snapshot.connectionState) {
case ConnectionState.none:
return Text('none');
case ConnectionState.waiting:
return Center(child: CircularProgressIndicator());
case ConnectionState.active:
return Text('');
case ConnectionState.done:
if (snapshot.hasError) {
return Text(
'${snapshot.error}',
style: TextStyle(color: Colors.red),
);
} else {
return ListView.separated(
separatorBuilder: (BuildContext context, int index) {
return SizedBox(
height: 10,
);
},
shrinkWrap: true,
itemCount: snapshot.data.data.featured.entries.length,
itemBuilder: (context, index) {
var entries = snapshot.data.data.featured.entries;
return Column(
children: [
Text("price ${entries[index].regularPrice.toString()}"),
ListView.builder(
shrinkWrap: true,
physics: NeverScrollableScrollPhysics(),
itemCount: entries[index].items.length,
itemBuilder: (context, index1) {
return Card(
elevation: 6.0,
child: Padding(
padding: const EdgeInsets.only(
top: 6.0,
bottom: 6.0,
left: 8.0,
right: 8.0),
child: Row(
crossAxisAlignment:
CrossAxisAlignment.start,
children: <Widget>[
Text("name: ${entries[index].items[index1].name}"),
/* Spacer(),
Text(
"id ${entries[index].items[index1].id}",
),*/
],
),
));
}),
],
);
});
}
}
}));
}
}
I think you need to find some way to handle your request and show the results.
Your code needs some adjustments, but it's not that far from your goal.
One way to solve this is to use FutureBuilder.
In this case you can use the FutureBuider to show a Listview when the future request arrive.
Follow this tutorial, where they use the tools you need: Future Builder with List View Builder

Serialization to json

I am trying to convert a list of type Response to a json, but I am not getting it.
This is my list of objects:
I want a json like this:
{
"preguntas": [
{
"id": "7d0e0584-3049-4814-b127-0faa02b455b4",
"encuesta": null,
"orden": 1,
"descripcion": "Dificultad para respirar de moderada a grave (no puede decir frases completas)",
"respuestas": [],
"obligatoria": true,
"estado": false,
"fechaCreacion": null,
"responsableCreacion": null,
"fechaModificacion": null,
"responsableModificacion": null
},
{
"id": "9809e985-2d1f-4f79-a5b9-da6731e14012",
"encuesta": null,
"orden": 2,
"descripcion": "Fiebre o sentirse afiebrados (escalofríos, sudoración)",
"respuestas": [],
"obligatoria": true,
"estado": false,
"fechaCreacion": null,
"responsableCreacion": null,
"fechaModificacion": null,
"responsableModificacion": null
}
]
}
I'm new to Flutter, please if someone help me, I really appreciate it.
You can can copy paste run full code below
You can use full model class definition Payload below and parse with payloadToJson
This example code create Payload object with your json string and convert it back to json string
code snippet
String payloadToJson(Payload data) => json.encode(data.toJson());
...
String str = payloadToJson(payload);
print(str);
output
{"preguntas":[{"id":"7d0e0584-3049-4814-b127-0faa02b455b4","encuesta":null,"orden":1,"descripcion":"Dificultad para respirar de moderada a grave (no puede decir frases completas)","respuestas":[],"obligatoria":true,"estado":false,"fechaCreacion":null,"responsableCreacion":null,"fechaModificacion":null,"responsableModificacion":null},{"id":"9809e985-2d1f-4f79-a5b9-da6731e14012","encuesta":null,"orden":2,"descripcion":"Fiebre o sentirse afiebrados (escalofríos, sudoración)","respuestas":[],"obligatoria":true,"estado":false,"fechaCreacion":null,"responsableCreacion":null,"fechaModificacion":null,"responsableModificacion":null}]}
full code
import 'package:flutter/material.dart';
import 'dart:convert';
Payload payloadFromJson(String str) => Payload.fromJson(json.decode(str));
String payloadToJson(Payload data) => json.encode(data.toJson());
class Payload {
List<Pregunta> preguntas;
Payload({
this.preguntas,
});
factory Payload.fromJson(Map<String, dynamic> json) => Payload(
preguntas: List<Pregunta>.from(json["preguntas"].map((x) => Pregunta.fromJson(x))),
);
Map<String, dynamic> toJson() => {
"preguntas": List<dynamic>.from(preguntas.map((x) => x.toJson())),
};
}
class Pregunta {
String id;
dynamic encuesta;
int orden;
String descripcion;
List<dynamic> respuestas;
bool obligatoria;
bool estado;
dynamic fechaCreacion;
dynamic responsableCreacion;
dynamic fechaModificacion;
dynamic responsableModificacion;
Pregunta({
this.id,
this.encuesta,
this.orden,
this.descripcion,
this.respuestas,
this.obligatoria,
this.estado,
this.fechaCreacion,
this.responsableCreacion,
this.fechaModificacion,
this.responsableModificacion,
});
factory Pregunta.fromJson(Map<String, dynamic> json) => Pregunta(
id: json["id"],
encuesta: json["encuesta"],
orden: json["orden"],
descripcion: json["descripcion"],
respuestas: List<dynamic>.from(json["respuestas"].map((x) => x)),
obligatoria: json["obligatoria"],
estado: json["estado"],
fechaCreacion: json["fechaCreacion"],
responsableCreacion: json["responsableCreacion"],
fechaModificacion: json["fechaModificacion"],
responsableModificacion: json["responsableModificacion"],
);
Map<String, dynamic> toJson() => {
"id": id,
"encuesta": encuesta,
"orden": orden,
"descripcion": descripcion,
"respuestas": List<dynamic>.from(respuestas.map((x) => x)),
"obligatoria": obligatoria,
"estado": estado,
"fechaCreacion": fechaCreacion,
"responsableCreacion": responsableCreacion,
"fechaModificacion": fechaModificacion,
"responsableModificacion": responsableModificacion,
};
}
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
#override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
visualDensity: VisualDensity.adaptivePlatformDensity,
),
home: MyHomePage(title: 'Flutter Demo Home Page'),
);
}
}
class MyHomePage extends StatefulWidget {
MyHomePage({Key key, this.title}) : super(key: key);
final String title;
#override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
int _counter = 0;
void _incrementCounter() {
String jsonString = '''
{
"preguntas": [
{
"id": "7d0e0584-3049-4814-b127-0faa02b455b4",
"encuesta": null,
"orden": 1,
"descripcion": "Dificultad para respirar de moderada a grave (no puede decir frases completas)",
"respuestas": [],
"obligatoria": true,
"estado": false,
"fechaCreacion": null,
"responsableCreacion": null,
"fechaModificacion": null,
"responsableModificacion": null
},
{
"id": "9809e985-2d1f-4f79-a5b9-da6731e14012",
"encuesta": null,
"orden": 2,
"descripcion": "Fiebre o sentirse afiebrados (escalofríos, sudoración)",
"respuestas": [],
"obligatoria": true,
"estado": false,
"fechaCreacion": null,
"responsableCreacion": null,
"fechaModificacion": null,
"responsableModificacion": null
}
]
}
''';
Payload payload = payloadFromJson(jsonString);
String str = payloadToJson(payload);
print(str);
setState(() {
_counter++;
});
}
#override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
'You have pushed the button this many times:',
),
Text(
'$_counter',
style: Theme.of(context).textTheme.headline4,
),
],
),
),
floatingActionButton: FloatingActionButton(
onPressed: _incrementCounter,
tooltip: 'Increment',
child: Icon(Icons.add),
),
);
}
}
Maybe it can works; I can create Model class for example. You should add toJson() Function to your Class.
class Model{
String id = "7d0e0584-3049-4814-b127-0faa02b455b4";
String encuesta = "null";
int orden = 1;
String description = "Dificultad para respirar de moderada a grave (no puede...)";
bool obligatoria = true;
//Model(bla bla bla....)
Model();
toJson(){
return {
"id":id,
"encuesta":encuesta,
"orden":orden,
"description":description,
"obligatoria":obligatoria
};
}
}
void main() {
Map<String,List<dynamic>> jsonMap = new Map();
List<dynamic> list = new List();
for(int i = 0 ; i < 3;i++){
Model model = new Model();
list.add(model.toJson());
}
jsonMap['preguntas'] = list;
print(jsonMap);
}
Result (Print):
{
preguntas: [
{
id: 7d0e0584-3049-4814-b127-0faa02b455b4,
encuesta: null,
orden: 1,
description: Dificultadpararespirardemoderadaagrave(nopuede...),
obligatoria: true
},
{
id: 7d0e0584-3049-4814-b127-0faa02b455b4,
encuesta: null,
orden: 1,
description: Dificultadpararespirardemoderadaagrave(nopuede...),
obligatoria: true
},
{
id: 7d0e0584-3049-4814-b127-0faa02b455b4,
encuesta: null,
orden: 1,
description: Dificultadpararespirardemoderadaagrave(nopuede...),
obligatoria: true
}
]
}