Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.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解析后返回null的颤振模型_Flutter - Fatal编程技术网

Flutter json解析后返回null的颤振模型

Flutter json解析后返回null的颤振模型,flutter,Flutter,我正在尝试解析和呈现远程API的结果。以下是我的API的外观: { "count": 2, "next": null, "previous": null, "results": [ { "image": "https://example.com/asas" }, { "image": "https://example.com/as" } ] } 解析json的模型: class SliderModel { fin

我正在尝试解析和呈现远程API的结果。以下是我的API的外观:

{
  "count": 2,
  "next": null,
  "previous": null,
  "results": [
    {
      "image": "https://example.com/asas"
    },
    {
      "image": "https://example.com/as"
    }
  ]
} 
解析json的模型:

class SliderModel {
  final String count;
  final List<Result> results;

  SliderModel({this.count, this.results});

  factory SliderModel.fromJson(Map<String, dynamic> parsedJson) {
    var list = parsedJson['results'] as List;
    List<Result> imagesList = list.map((i) => Result.fromJson(i)).toList();

    return SliderModel(
      count: parsedJson['count'],
      results: imagesList
    );
  }
}

class Result {
  final String image;

  Result({this.image});

  factory Result.fromJson(Map<String, dynamic> parsedJson) {
    return Result(
      image: parsedJson['image']
    );
  } 
}
class-SliderModel{
最终字符串计数;
最终结果清单;
SliderModel({this.count,this.results});
factory SliderModel.fromJson(Map parsedJson){
var list=parsedJson['results']作为列表;
List imagesList=List.map((i)=>Result.fromJson(i)).toList();
返回滑块模型(
count:parsedJson['count'],
结果:图像列表
);
}
}
班级成绩{
最终字符串图像;
结果({this.image});
factory Result.fromJson(Map parsedJson){
返回结果(
image:parsedJson['image']
);
} 
}
然后是API调用和呈现方法:

class _HomeState extends State<Home> {
  SliderModel slider = SliderModel();

  @override
  Widget build(BuildContext context) {
   return 
    // some codes
   body: FutureBuilder(
          future: this._loadSlider(),
          builder: (context, snapshot) {
            switch (snapshot.connectionState) {
              case ConnectionState.none:
              case ConnectionState.waiting:
              case ConnectionState.active: {
                return Center(
                  child: CircularProgressIndicator(),
                );
              }
              case ConnectionState.done: {
                if (snapshot.hasError) {
                  DioError error = snapshot.error;
                  String message = error.message;
                  if (error.type == DioErrorType.CONNECT_TIMEOUT)
                    message = 'Connection Timeout';
                  else if (error.type == DioErrorType.RECEIVE_TIMEOUT)
                    message = 'Receive Timeout';
                  else if (error.type == DioErrorType.RESPONSE)
                    message =
                    '404 server not found ${error.response.statusCode}';
                  return Text('Error: ${message}');
                }
              }
            }
            return CarouselSlider(
              height: 200.0,
              items: slider.results.map((i) {
                return Builder(
                  builder: (BuildContext context) {
                    return Container(
                        width: MediaQuery.of(context).size.width,
                        margin: EdgeInsets.symmetric(horizontal: 1.0),
                        decoration: BoxDecoration(
                            color: Colors.amber
                        ),
                        child: Text('text $i', style: TextStyle(fontSize: 16.0),)
                      //child: Image.network(i, fit: BoxFit.fill),
                    );
                  },
                );
              }).toList(),
            );
          },),
  }

  Future<dynamic> _loadSlider() async{
    try {
      Response response = await Dio().get("https://example.com/api/slider/");
      //print(response.data['results'][0]['image']);
      Map<String, dynamic> data = json.decode(response.data);
      slider = SliderModel.fromJson(data);
      return slider;
    } catch (e) {
      print(e);
    }
  }
}
class\u HomeState扩展状态{
SliderModel slider=SliderModel();
@凌驾
小部件构建(构建上下文){
返回
//一些代码
正文:未来建设者(
future:此._loadSlider(),
生成器:(上下文,快照){
交换机(快照.连接状态){
案例连接状态。无:
案例连接状态。正在等待:
案例连接状态.active:{
返回中心(
子对象:CircularProgressIndicator(),
);
}
案例连接状态。完成:{
if(snapshot.hasError){
DioError error=snapshot.error;
字符串消息=error.message;
if(error.type==DioErrorType.CONNECT\u超时)
消息='连接超时';
else if(error.type==DioErrorType.RECEIVE\u超时)
消息='接收超时';
else if(error.type==DioErrorType.RESPONSE)
信息=
'404服务器未找到${error.response.statusCode}';
返回文本('Error:${message}');
}
}
}
回程转盘滑翔机(
高度:200.0,
项目:slider.results.map((i){
返回生成器(
生成器:(BuildContext上下文){
返回容器(
宽度:MediaQuery.of(context).size.width,
边缘:边缘组。对称(水平:1.0),
装饰:盒子装饰(
颜色:颜色。琥珀色
),
子项:文本('Text$i',样式:TextStyle(fontSize:16.0),)
//子项:Image.network(i,fit:BoxFit.fill),
);
},
);
}).toList(),
);
},),
}
Future\u loadSlider()异步{
试一试{
响应=等待Dio()。获取(“https://example.com/api/slider/");
//打印(response.data['results'][0]['image']);
Map data=json.decode(response.data);
slider=SliderModel.fromJson(数据);
返回滑块;
}捕获(e){
印刷品(e);
}
}
}
当我尝试运行应用程序时,它会抛出以下消息:

NoSuchMethodError: The method 'map' was called on null.
Receiver: null
Tried calling:
map<Builder>(Closure: (Result) => builder)
NoSuchMethodError:对null调用了方法“map”。
收件人:空
已尝试呼叫:
映射(闭包:(结果)=>builder)

@pyprism,不确定为什么要调用
slider.results
。我认为应该是快照、数据、结果。加载的
SliderModel
实例将位于
snapshot.data
中。您可能还希望确保快照包含带有
if(snapshot.hasData){

的数据。谢谢,我更改了代码块,现在if(snapshot.hasData)总是返回false!这是与解析相关的问题吗?您的模型看起来不错。您可以尝试不进行检查或确保数据进入
\u loadSlider
函数吗?