颤抖模型在JSON解析后返回null

精神分裂症

我正在尝试解析和呈现远程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']
    );
  } 
}

然后是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);
    }
  }
}

当我尝试运行该应用程序时,它将引发以下消息:

NoSuchMethodError: The method 'map' was called on null.
Receiver: null
Tried calling:
map<Builder>(Closure: (Result) => builder)
专业版

@pyprism,不确定为什么要打电话slider.results我认为应该snapshot.data.results改为。您加载的SliderModel实例将位于中snapshot.data您可能还想确保快照中包含的数据if (snapshot.hasData) {

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章