无法使用 Flutter 项目将 JSON 映射到 Dart 中的列表

Too*_*Man 5 json dart flutter

我运行的是 Flutter 1.0.0(第一个版本),最近升级到 1.2.1,有很多错误和警告需要纠正。主要指定注释类型。纠正所有这些问题后,我运行了 Android 应用程序,现在将 JSON 映射到列表的代码无法正常工作。首先,我将发布有效的原始代码。JSON 数据来自 HTTP 请求。

api.dart

Future<List<Device>> getDevices() async {
  var response = await _httpNetwork.get(_devicesUrl, headers: {"Cookie": _sessionId});

  if (response.statusCode < 200 || response.statusCode > 400) {
    throw Exception("Error while fetching data");
  }

  final body = json.decode(response.body);

  return body.map<Device>((device) => Device.fromJson(device)).toList();
}
Run Code Online (Sandbox Code Playgroud)

设备.dart

class Device {
  Device({
    this.id,
    this.name,
    this.uniqueId,
    this.status,
    this.phone,
    this.model,
    this.disabled,
  });

  factory Device.fromJson(Map<String, dynamic> json) => Device(
        id: json['id'],
        name: json['name'],
        uniqueId: json['uniqueId'],
        status: json['status'] == 'online' ? true : false,
        phone: json['phone'],
        model: json['model'],
        disabled: json['disabled'],
      );

  // API data
  int id;
  String name;
  String uniqueId;
  bool status;
  String phone;
  String model;
  bool disabled;

  Map<String, dynamic> toJson() => <String, dynamic>{
        'id': id,
        'name': name,
        'uniqueId': uniqueId,
        'status': status == true ? 'online' : 'offline',
        'phone': phone,
        'model': model,
        'disabled': disabled,
      };
}
Run Code Online (Sandbox Code Playgroud)

现在,这就是 中的以下更改出现问题的地方api.dart

return json.decode(response.body).map<Device>((Map<String, dynamic> device) => Device.fromJson(device)).toList();
Run Code Online (Sandbox Code Playgroud)

虽然根据 Android Studio/Flutter/Dart 这个语法是正确的,但它似乎不起作用。该应用程序不会崩溃,也不会在运行控制台中出现错误,它只是onError在调用中命中我的代码Observable<bool>.fromFuture()

print在代码中添加了调用来确定 return 语句api.dart是罪魁祸首。有人对这个问题有任何见解吗?

Too*_*Man 4

这是解决此问题的更改。

return json.decode(response.body).map<Device>((dynamic device) => Device.fromJson(device)).toList();
Run Code Online (Sandbox Code Playgroud)