Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Json 颤振:显示从serve接收的嵌套数据:已编辑#3_Json_List_Flutter_Dart - Fatal编程技术网

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()方法中实例化模型时,您没有命名这些参数。你有编译错误吗?非常感谢,我改变了获取数据的方式,如果你能帮我做很多感谢的话,我会编辑我的问题。我更新了你的数据将显示为地图的问题。你访问的方式