json - 未处理的异常 : type '_InternalLinkedHashMap<String, dynamic>' is not a subtype of type 'String'

标签 json flutter parsing dart json-serialization

我正在尝试解析 json,将其打印到控制台,然后放入 ListView.builder 并收到此错误:type '_InternalLinkedHashMap' is not a subtype of type 'String'

我该如何解决?

列表数据

FutureBuilder(
  future: restaurantSearch,
  builder: (context, AsyncSnapshot<RestaurantSearch> snapshot) {
    if(snapshot.connectionState == ConnectionState.waiting) {
      return Expanded(child: Center(child: CircularProgressIndicator(strokeWidth: 3)));
    } else if(snapshot.connectionState == ConnectionState.done) {
      if(snapshot.hasData) {
        return ListView.builder(
          shrinkWrap: true,
          itemCount: snapshot.data.restaurants.length,
          itemBuilder: (context, index) {
            var restaurant = snapshot.data.restaurants[index];
            return ListTile(
              title:Text(restaurant.name),
            );
          }
        );
      }
    } else if (snapshot.hasError) {
        return Center(child: Text(snapshot.error.toString()));
    }
    return Text('');
  }
)

api服务

Future<RestaurantSearch> restaurantSearch(String query) async {
    final response = await dio.get("https://restaurant-api.dicoding.dev/search", queryParameters: {"q": query});
    print(response.data);
    if(response.statusCode == 200) {
      return RestaurantSearch.fromJson(json.decode(response.data));
    } else {
      throw Exception("Failed to Load Detail Restaurant, Please Check Your Internet");
    }
  }

模型

import 'dart:convert';

RestaurantSearch restaurantSearchFromJson(String str) => RestaurantSearch.fromJson(json.decode(str));

String restaurantSearchToJson(RestaurantSearch data) => json.encode(data.toJson());

class RestaurantSearch {
  RestaurantSearch({
    this.error,
    this.founded,
    this.restaurants,
  });

  bool error;
  int founded;
  List<RestaurantS> restaurants;

  factory RestaurantSearch.fromJson(Map<String, dynamic> json) => RestaurantSearch(
    error: json["error"],
    founded: json["founded"],
    restaurants: List<RestaurantS>.from(json["restaurants"].map((x) => RestaurantS.fromJson(x))),
  );

  Map<String, dynamic> toJson() => {
    "error": error,
    "founded": founded,
    "restaurants": List<String>.from(restaurants.map((x) => x.toJson())),
  };
}

class RestaurantS {
  RestaurantS({
    this.id,
    this.name,
    this.description,
    this.pictureId,
    this.city,
    this.rating,
  });

  String id;
  String name;
  String description;
  String pictureId;
  String city;
  double rating;

  factory RestaurantS.fromJson(Map<String, dynamic> json) => RestaurantS(
    id: json["id"],
    name: json["name"],
    description: json["description"],
    pictureId: json["pictureId"],
    city: json["city"],
    rating: json["rating"].toDouble(),
  );

  Map<String, dynamic> toJson() => {
    "id": id,
    "name": name,
    "description": description,
    "pictureId": pictureId,
    "city": city,
    "rating": rating,
  };
}

非常感谢您的回答................................................ ..................................................... ..................................................... ..................................................... ...................................................

最佳答案

你需要删除 json.decode 因为 Dio 已经为你解码了正文

改变这一行

return RestaurantSearch.fromJson(response.data);

关于json - 未处理的异常 : type '_InternalLinkedHashMap<String, dynamic>' is not a subtype of type 'String' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66501665/

相关文章:

flutter - 如何调整TextField的宽度?

javascript - javascript解析器可以收集其原始格式的信息吗?

php - Laravel 数据库多对多(Mysql)或将 Json 保存在表中

javascript - 使用子级创建 json 树结构

javascript - 使用 ajax 制作动画标记

flutter - ListviewBuilder 内的 StreamBuilder 不滚动

php - 使用 Zend_Http_Client 发送 json POST

Firebase/Flutter : reload() not refreshing user. isEmailVerified

java - 将图像解析为多个图像

c# - C#中如何获取JSON中的值?