- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
大家好,我正在尝试学习 flutter ,并且我想在应用程序中显示json信息,但是我正在努力获取一些信息。
这就是我目前所拥有的。
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'];
}
我可以在终端中打印json,但不能在应用程序中打印。用forEach不可能做这样的事情吗?
最佳答案
您可以在下面复制粘贴运行完整代码
步骤1:您可以使用Payload.fromJson(response.data)
,有关详细信息,请参见完整代码
第2步:显示FutureBuilder
和嵌套的ListView
程式码片段
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(),
工作演示
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}",
),*/
],
),
));
}),
],
);
});
}
}
}));
}
}
关于flutter - 需要帮助来解析json flutter ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64327614/
我一直在使用 AJAX 从我正在创建的网络服务中解析 JSON 数组时遇到问题。我的前端是一个简单的 ajax 和 jquery 组合,用于显示从我正在创建的网络服务返回的结果。 尽管知道我的数据库查
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 1
我在尝试运行 Android 应用程序时遇到问题并收到以下错误 java.lang.NoClassDefFoundError: com.parse.Parse 当我尝试运行该应用时。 最佳答案 在这
有什么办法可以防止etree在解析HTML内容时解析HTML实体吗? html = etree.HTML('&') html.find('.//body').text 这给了我 '&' 但我想
我有一个有点疯狂的例子,但对于那些 JavaScript 函数作用域专家来说,它看起来是一个很好的练习: (function (global) { // our module number one
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 8 年前。 Improve th
我需要编写一个脚本来获取链接并解析链接页面的 HTML 以提取标题和其他一些数据,例如可能是简短的描述,就像您链接到 Facebook 上的内容一样。 当用户向站点添加链接时将调用它,因此在客户端启动
在 VS Code 中本地开发时,包解析为 C:/Users//AppData/Local/Microsoft/TypeScript/3.5/node_modules/@types//index而不是
我在将 json 从 php 解析为 javascript 时遇到问题 这是我的示例代码: //function MethodAjax = function (wsFile, param) {
我在将 json 从 php 解析为 javascript 时遇到问题 这是我的示例代码: //function MethodAjax = function (wsFile, param) {
我被赋予了将一种语言“翻译”成另一种语言的工作。对于使用正则表达式的简单逐行方法来说,源代码过于灵活(复杂)。我在哪里可以了解更多关于词法分析和解析器的信息? 最佳答案 如果你想对这个主题产生“情绪化
您好,我在解析此文本时遇到问题 { { { {[system1];1;1;0.612509325}; {[system2];1;
我正在为 adobe after effects 在 extendscript 中编写一些代码,最终变成了 javascript。 我有一个数组,我想只搜索单词“assemble”并返回整个 jc3_
我有这段代码: $(document).ready(function() { // }); 问题:FB_RequireFeatures block 外部的代码先于其内部的代码执行。因此 who
背景: netcore项目中有些服务是在通过中间件来通信的,比如orleans组件。它里面服务和客户端会指定网关和端口,我们只需要开放客户端给外界,服务端关闭端口。相当于去掉host,这样省掉了些
1.首先贴上我试验成功的代码 复制代码 代码如下: protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
什么是 XML? XML 指可扩展标记语言(eXtensible Markup Language),标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言。 你可以通过本站学习 X
【PHP代码】 复制代码 代码如下: $stmt = mssql_init('P__Global_Test', $conn) or die("initialize sto
在SQL查询分析器执行以下代码就可以了。 复制代码代码如下: declare @t varchar(255),@c varchar(255) declare table_cursor curs
前言 最近练习了一些前端算法题,现在做个总结,以下题目都是个人写法,并不是标准答案,如有错误欢迎指出,有对某道题有新的想法的友友也可以在评论区发表想法,互相学习🤭 题目 题目一: 二维数组中的
我是一名优秀的程序员,十分优秀!