演员表类型

时间:2020-10-19 16:40:57

标签: flutter dart

我在处理json请求时遇到困难。 尝试处理它时,出现以下错误:

I / flutter(9296):例外:类型'_InternalLinkedHashMap '不是强制类型转换中'List'类型的子类型

如果您能解决此问题,我将不胜感激。

主文件:

import 'package:flutter/material.dart';
import 'package:practice_5/model/breedModel.dart';
import 'package:http/http.dart' as http;
import 'dart:convert';
import 'dart:async';
import 'package:flutter/foundation.dart';

Future<List<Dog>> fetchPhotos(http.Client client) async {
  final response =
  await client.get('https://dog.ceo/api/breeds/image/random');
  return compute(parseDog, response.body);
}

List<Dog> parseDog(responseBody) {
  final parsed = jsonDecode(responseBody) as List;
  return parsed.map<Dog>((json) => Dog.fromJson(json)).toList();
}

class BreedListTile extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return FutureBuilder<List<Dog>>(
      future: fetchPhotos(http.Client()),
      builder: (context, snapshot) {
        if (snapshot.hasError) print(snapshot.error);
        return snapshot.hasData
            ? DogListTile (dogs: snapshot.data,)
            : Center (child: CircularProgressIndicator());
      },
    );
  }
}

class DogListTile extends StatelessWidget {
  final List<Dog> dogs;

  DogListTile({Key key, this.dogs}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return ListView.builder(
        itemCount: dogs.length,
        itemBuilder: (context, index) {
          return ListTile (
            title: Text ('Title'),
            subtitle: Text ('Subtitle'),
            leading: Image.network(dogs[index].message),
          );
        });
  }
}

类模型

class Dog {
  Dog({
    this.message,
    this.status,
  });

  final String message;
  final String status;

  factory Dog.fromJson(Map<String, dynamic> json) => Dog(
    message: json["message"] == null ? null : json["message"],
    status: json["status"] == null ? null : json["status"],
  );

  Map<String, dynamic> toJson() => {
    "message": message == null ? null : message,
    "status": status == null ? null : status,
  };
}

1 个答案:

答案 0 :(得分:0)

代码段中API网址的输出为:

{
  "message": "https://images.dog.ceo/breeds/spaniel-sussex/n02102480_8117.jpg",
  "status": "success"
}

这不是列表。

API仅返回单个Dog对象,而不返回Dog对象的列表。

您可以使用它来解析单个Dog对象:

final parsed = jsonDecode(responseBody);
Dog dog = Dog.fromJson(parsed))
相关问题