【问题标题】:Flutter: Can't fetch json API dataFlutter:无法获取 json API 数据
【发布时间】:2020-11-16 19:14:25
【问题描述】:

我正在尝试从 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,
    );
  }
}

这是我的输出图像

问题出在哪里?我该如何解决?

【问题讨论】:

    标签: json api flutter fetch


    【解决方案1】:

    用给定的函数替换您的parseBooks 函数。 cast 方法采用 () 而不是 Map()。编译后还告诉用 cast() 替换 cast>()。 您可以在https://api.dart.dev/stable/2.8.4/dart-core/Map/cast.html 阅读更多关于 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();
    }
    

    【讨论】:

    • @AbirAhsan 请现在检查代码,我已经编辑了代码并自己尝试过。它现在可以正常工作了。
    • 哦,你是个好人。我是这么想的,这个问题是为 json 文件中的“数据”创建的。谢谢大佬
    猜你喜欢
    • 2021-08-20
    • 2020-02-27
    • 2019-08-26
    • 1970-01-01
    • 2021-05-21
    • 1970-01-01
    • 2021-06-10
    • 1970-01-01
    • 2018-10-25
    相关资源
    最近更新 更多