首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Flutter jsonDecode返回类型是`dynamic`,而相册工厂方法需要一个`Map<String,dynamic>`

Flutter jsonDecode返回类型是`dynamic`,而相册工厂方法需要一个`Map<String,dynamic>`
EN

Stack Overflow用户
提问于 2020-08-17 17:20:47
回答 3查看 390关注 0票数 0
代码语言:javascript
运行
复制
import 'dart:convert';

import 'package:http/http.dart' as http;
import 'package:json_annotation/json_annotation.dart';

part 'http.g.dart';

@JsonSerializable()
class Album {
  final int userId;
  final int id;
  final String title;

  Album({this.userId, this.id, this.title});

  factory Album.fromJson(Map<String, dynamic> json) => _$AlbumFromJson(json);
  Map<String, dynamic> toJson() => _$AlbumToJson(this);
}

Future<Album> fetchAlbum() async {
  var resp = await http.get('https://jsonplaceholder.typicode.com/albums/1');
  var A = Album.fromJson(jsonDecode(resp.body)); // Error line

  print(A.title);
  print(A.toJson());
}

错误- At var A = Album.fromJson(jsonDecode(resp.body)); is The argument type 'dynamic' can't be assigned to the parameter type 'Map<String, dynamic>'.dartargument_type_not_assignable

jsonDecode返回类型为dynamic,而相册工厂方法需要Map<String, dynamic>

它显示编译时错误,但我可以在调试控制台中获得所需的输出。

我们该如何解决这个问题呢?

EN

回答 3

Stack Overflow用户

发布于 2020-08-17 17:47:17

在这里添加@Ulas的评论作为答案-

我们可以使用带有jsonDecode的as关键字来返回特定的类型,而不是dynamic -

var A = Album.fromJson(jsonDecode(resp.body) as Map<String, dynamic>);

票数 1
EN

Stack Overflow用户

发布于 2020-08-17 17:33:51

因为jsonDecode返回一个dynamic类型,所以你会遇到这个问题。您必须将该dynamic类型转换为Map<String,dynamic>

而不是:

代码语言:javascript
运行
复制
Album.fromJson(jsonDecode(resp.body));

执行以下操作:

代码语言:javascript
运行
复制
Album.fromJson(Map<String,dynamic>.from(jsonDecode(resp.body)));
票数 0
EN

Stack Overflow用户

发布于 2020-08-17 17:34:08

代码语言:javascript
运行
复制
var A = Album.fromJson(jsonDecode(resp.body as Map<String, dynamic>)); // no error

添加一些try-catch块。当你发送一个请求时,分配的东西可能会出错:)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63447998

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档