Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.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
Flutter 颤振-解析本地JSON的问题_Flutter - Fatal编程技术网

Flutter 颤振-解析本地JSON的问题

Flutter 颤振-解析本地JSON的问题,flutter,Flutter,我正在使用这些关于如何解析本地JSON文件的说明()构建一个应用程序,但遇到了一条错误消息。我还是一名颤振初学者,因此非常感谢您的帮助: l/flutter ( 8377): The following NoSuchMethodError was thrown building FutureBuilder<String>(dirty, state: FutureBuilderState<String>#8f2a5): l/flutter ( 8377): The meth

我正在使用这些关于如何解析本地JSON文件的说明()构建一个应用程序,但遇到了一条错误消息。我还是一名颤振初学者,因此非常感谢您的帮助:

l/flutter ( 8377): The following NoSuchMethodError was thrown building FutureBuilder<String>(dirty, state: FutureBuilderState<String>#8f2a5):
l/flutter ( 8377): The method 'cast' was called on null.
l/flutter ( 8377): Receiver: null
l/flutter ( 8377): Tried calling: cast<Map<String, dynamic>>().
l/flatter(8377):在构建FutureBuilder时抛出了以下NoSuchMethodError(脏,状态:FutureBuilderState#8f2a5):
l/flatter(8377):对null调用了方法“cast”。
l/颤振(8377):接收器:空
l/flatter(8377):尝试调用:cast()。
代码:

main.dart
导入“dart:convert”;
进口“包装:颤振/材料.省道”;
导入“package:flatter\u load\u local\u json/country.dart”;
导入“package:flatter\u load\u local\u json/list.dart”;
void main(){
runApp(新材料)PP(
debugShowCheckedModeBanner:false,
主题:新主题数据(
原色:常量颜色(0xFF02BB9F),
primaryColorDark:常量颜色(0xFF167F67),
accentColor:const Color(0xFF167F67),
),
主页:新建MyApp(),
));
}
类MyApp扩展了StatefulWidget{
@凌驾
MyAppState createState()=>新建MyAppState();
}
类MyAppState扩展了状态{
列出数据;
@凌驾
小部件构建(构建上下文){
归还新脚手架(
appBar:新的appBar(
标题:新文本(“加载本地JSON文件”,
样式:新文本样式(颜色:Colors.white),),
),
主体:新容器(
孩子:新中心(
//使用future builder和DefaultAssetBundle加载本地JSON文件
孩子:新未来建设者(
未来:DefaultAssetBundle.of(上下文)
.loadString('assets/country.json'),
生成器:(上下文,快照){
列出国家=
parseJosn(snapshot.data.toString());
返回!国家。我是空的
?新国家列表(国家:国家)
:新中心(子项:新循环进程指示器());
}),
),
));
}
List parseJosn(字符串响应){
如果(响应==null){
返回[];
}
最终解析=
decode(response.toString()).cast();
返回parsed.map((json)=>newcountry.fromJson(json)).toList();
}
}

提前感谢

在解析JSON之前,您必须等待将来完成:

FutureBuilder(
  future: DefaultAssetBundle.of(context).loadString('assets/country.json'),                    
  builder: (context, snapshot) {
    if (snapshot.connectionState != ConnectionState.done) {
      return Text("Loading JSON...")
    }

    List<Country> countries = parseJson(snapshot.data.toString());
    return countries.isNotEmpty 
      ? new CountyList(country: countries)
      : new Center(child: Text("Empty list");
  }
),
FutureBuilder(
future:DefaultAssetBundle.of(context.loadString('assets/country.json'),
生成器:(上下文,快照){
if(snapshot.connectionState!=connectionState.done){
返回文本(“加载JSON…”)
}
List countries=parseJson(snapshot.data.toString());
返回国家/地区。isNotEmpty
?新国家列表(国家:国家)
:新中心(子项:文本(“空列表”);
}
),
更多信息:

共享您的代码,以显示您尝试执行的操作将获得更多帮助。或者您可以在这里阅读一篇关于解析JSON的简单教程嘿@xion,我已经编辑了我的问题,以包含引用我的错误的部分代码。您共享的链接解决了这一问题,但使用了
http.get
,但在我的情况下,JSON位于assets文件夹中。
FutureBuilder(
  future: DefaultAssetBundle.of(context).loadString('assets/country.json'),                    
  builder: (context, snapshot) {
    if (snapshot.connectionState != ConnectionState.done) {
      return Text("Loading JSON...")
    }

    List<Country> countries = parseJson(snapshot.data.toString());
    return countries.isNotEmpty 
      ? new CountyList(country: countries)
      : new Center(child: Text("Empty list");
  }
),