我正在尝试从json API提取数据到移动的移动应用程序。但是我失败了。
我认为我的model.dart
文件中有问题。
这是我的model.dart
import 'dart:async';
import 'dart:convert';
import 'package:flutter/foundation.dart';
import 'package:http/http.dart' as http;
Future<List<Book>> fetchBooks(http.Client client) async {
final response =
await client.get('https://boimarket.abirahsan.com/public/api/v1/books');
// Use the compute function to run parsePhotos in a separate isolate.
return compute(parseBooks, response.body);
}
// A function that converts a response body into a List<Photo>.
List<Book> parseBooks(String responseBody) {
final parsed = jsonDecode(responseBody).cast<Map<String, dynamic>>();
return parsed.map<Book>((json) => Book.fromJson(json)).toList();
}
class Book {
final String name;
final String author;
final String genreClass;
final String imgUrl;
final String pdf;
final int category;
Book({
this.name,
this.author,
this.genreClass,
this.imgUrl,
this.pdf,
this.category,
});
factory Book.fromJson(Map<String, dynamic> json) {
return Book(
name: json['name'] as String,
imgUrl: json['image'] as String,
pdf: json['pdf'] as String,
author: json['author'] as String,
genreClass: json['genre_class'] as String,
category: json['category'] as int,
);
}
}
这是我的输出图像
问题出在哪里?而我该如何解决?
答案 0 :(得分:0)
用给定的函数替换parseBooks
函数。 cast
方法采用
您也可以使用as
关键字代替cast
方法。
final parsed = jsonDecode(responseBody) as Map<String, dynamic>;
List<Book> parseBooks(String responseBody) {
final parsed = jsonDecode(responseBody).cast<String, dynamic>();
return parsed['data'].map<Book>((json) => Book.fromJson(json)).toList();
}