Json 颤振:显示从serve接收的嵌套数据:已编辑#3
在打印数据的页面中,我有一个应用程序从服务器接收嵌套数据,并且打印成功: 班级网页:Json 颤振:显示从serve接收的嵌套数据:已编辑#3,json,list,flutter,dart,Json,List,Flutter,Dart,在打印数据的页面中,我有一个应用程序从服务器接收嵌套数据,并且打印成功: 班级网页: final DateTime mDate; final List<Games> games; class DatedMatchs { DatedMatchs( this.mDate, this.games, ); } class Games { Games( this.id,this.sId,this.wId,this.leagueName,this.h
final DateTime mDate;
final List<Games> games;
class DatedMatchs {
DatedMatchs(
this.mDate,
this.games,
);
}
class Games {
Games(
this.id,this.sId,this.wId,this.leagueName,this.homeTeam,this.awayTeam,this.homeGoals,this.awayGoals,this.mHour,this.homeEx,this.awayEx,
);
final String id;
final String sId;
final String wId;
final String leagueName;
final String homeTeam;
final String awayTeam;
final String homeGoals;
final String awayGoals;
final String mHour;
final String homeEx;
final String awayEx;
}
最终日期时间mDate;
最后名单游戏;
类日期匹配{
日期匹配(
这是我的生日,
这是游戏,
);
}
班级游戏{
游戏(
这个。id,这个。sId,这个。wId,这个。leagueName,这个。homeTeam,这个。awayTeam,这个。homeGoals,这个。awayGoals,这个。mHour,这个。homeEx,这个。awayEx,
);
最终字符串id;
最终字符串sId;
最终字符串wId;
最终字符串联盟名称;
最后的弦乐主队;
最终字符串awayTeam;
最终目标;
最后一根绳子断开;
最终字符串mHour;
最终字符串homeEx;
最终字符串awayEx;
}
我要显示数据的页面:
import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:http/http.dart' as http;
import 'package:intl/intl.dart';
import '../models/dated_matchs.dart';
class Home extends StatefulWidget {
@override
_HomeState createState() => _HomeState();
}
class _HomeState extends State<Home> {
@override
Widget build(BuildContext context) {
List matchs = [];
Future<List> getmatchs() async {
var url =
'xxx/api/controller/matchs/dated_matchs.php?s_id=1';
var response = await http.get(url);
var data = jsonDecode(response.body);
print(data);
}
return FutureBuilder(
future: getmatchs(),
builder: (ctx, snapshot) {
return Container();
});
}
}
导入'dart:convert';
进口“包装:颤振/材料.省道”;
导入“package:shared_preferences/shared_preferences.dart”;
将“package:http/http.dart”导入为http;
导入“包:intl/intl.dart”;
导入“../models/dated_matchs.dart”;
类Home扩展了StatefulWidget{
@凌驾
_HomeState createState()=>\u HomeState();
}
类(HomeState扩展状态){
@凌驾
小部件构建(构建上下文){
列表匹配=[];
Future getmatchs()异步{
变量url=
'xxx/api/controller/matchs/dated_matchs.php?s_id=1';
var response=wait http.get(url);
var data=jsonDecode(response.body);
打印(数据);
}
回归未来建设者(
future:getmatchs(),
生成器:(ctx,快照){
返回容器();
});
}
}
现在我不知道如何将接收到的数据添加到列表中,然后在列表视图中显示它
我在future函数中使用了这种方法,但有点不对劲:
Future getmatchs()异步{
变量url=
'xxx/api/controller/matchs/dated_matchs.php?s_id=1';
var response=wait http.get(url);
var data=jsonDecode(response.body);
用于(数据中的var x){
for(变量y在x[‘游戏’]中){
cont1.add(TextEditingController());
cont2.add(TextEditingController());
Games newmatch=游戏(
y['id'],
y['s_id'],
y['w_id'],
y[“联盟名称”],
y[“主队”],
y[“客场球队”],
y[“家庭目标”],
y[“客场进球”],
y['m_hour'],
y['home_ex'],
y['away_ex'];
matchs.add(newmatch);
}
DatedMatchs newdated=DatedMatchs(x['m_date'],x['matchs']);
日期匹配。添加(新日期);
}
返回日期匹配;
}
没有任何东西可以打印您的一些数据是以地图而不是列表的形式返回的。您需要调试并查看哪些数据是映射,然后可以从映射打印它
此外,我不会在您的UI中调用api。最好使用状态管理库,例如Bloc、Provider或RxDart。您的一些数据将作为地图而不是列表返回。您需要调试并查看哪些数据是映射,然后可以从映射打印它
此外,我不会在您的UI中调用api。最好使用状态管理库,如Bloc、Provider或RxDart。我解决了它,下面是正确获取数据列表的未来方法:
List<Games> games = []; // I added type of List
List<DatedMatchs> datedmatchs = []; // I added type of List
Future<List> getmatchs() async {
var url =
'xxx/api/controller/matchs/dated_matchs.php?s_id=1';
var response = await http.get(url);
var data = await jsonDecode(response.body);
for (var x in data) {
for (var y in x['games']) {
cont1.add(TextEditingController());
cont2.add(TextEditingController());
Games newmatch = Games(
y['id'],
y['s_id'],
y['w_id'],
y['league_name'],
y['home_team'],
y['away_team'],
y['home_goals'],
y['away_goals'],
y['m_hour'],
y['home_ex'],
x['away_ex']);
games.add(newmatch);
}
DatedMatchs newdated = DatedMatchs(x['m_date'], games); // add name of list
datedmatchs.add(newdated);
}
return datedmatchs;
}
列出游戏=[];//我添加了列表的类型
列表日期匹配=[];//我添加了列表的类型
Future getmatchs()异步{
变量url=
'xxx/api/controller/matchs/dated_matchs.php?s_id=1';
var response=wait http.get(url);
var data=await jsonDecode(response.body);
用于(数据中的var x){
for(变量y在x[‘游戏’]中){
cont1.add(TextEditingController());
cont2.add(TextEditingController());
Games newmatch=游戏(
y['id'],
y['s_id'],
y['w_id'],
y[“联盟名称”],
y[“主队”],
y[“客场球队”],
y[“家庭目标”],
y[“客场进球”],
y['m_hour'],
y['home_ex'],
x['away_ex']);
games.add(newmatch);
}
DatedMatchs newdated=DatedMatchs(x['m_date'],games);//添加列表名称
日期匹配。添加(新日期);
}
返回日期匹配;
}
我解决了它,下面是正确获取数据列表的未来方法:
List<Games> games = []; // I added type of List
List<DatedMatchs> datedmatchs = []; // I added type of List
Future<List> getmatchs() async {
var url =
'xxx/api/controller/matchs/dated_matchs.php?s_id=1';
var response = await http.get(url);
var data = await jsonDecode(response.body);
for (var x in data) {
for (var y in x['games']) {
cont1.add(TextEditingController());
cont2.add(TextEditingController());
Games newmatch = Games(
y['id'],
y['s_id'],
y['w_id'],
y['league_name'],
y['home_team'],
y['away_team'],
y['home_goals'],
y['away_goals'],
y['m_hour'],
y['home_ex'],
x['away_ex']);
games.add(newmatch);
}
DatedMatchs newdated = DatedMatchs(x['m_date'], games); // add name of list
datedmatchs.add(newdated);
}
return datedmatchs;
}
列出游戏=[];//我添加了列表的类型
列表日期匹配=[];//我添加了列表的类型
Future getmatchs()异步{
变量url=
'xxx/api/controller/matchs/dated_matchs.php?s_id=1';
var response=wait http.get(url);
var data=await jsonDecode(response.body);
用于(数据中的var x){
for(变量y在x[‘游戏’]中){
cont1.add(TextEditingController());
cont2.add(TextEditingController());
Games newmatch=游戏(
y['id'],
y['s_id'],
y['w_id'],
y[“联盟名称”],
y[“主队”],
y[“客场球队”],
y[“家庭目标”],
y[“客场进球”],
y['m_hour'],
y['home_ex'],
x['away_ex']);
games.add(newmatch);
}
DatedMatchs newdated=DatedMatchs(x['m_date'],games);//添加列表名称
日期匹配。添加(新日期);
}
返回日期匹配;
}
非常感谢,我改变了获取数据的方式,如果您能帮我做很多感谢的话,我将编辑我的问题。我更新了问题,您的数据将显示为地图。访问映射的方法是通过迭代键。它是否在方法中打印正确的数据?打印(数据)您的游戏模型使用命名参数,但在getmatchs()方法中实例化模型时,您没有命名这些参数。你有编译错误吗?非常感谢,我改变了获取数据的方式,如果你能帮我做很多感谢的话,我会编辑我的问题。我更新了你的数据将显示为地图的问题。你访问的方式