没有为类型“type”定义方法“fromjson”
Posted
技术标签:
【中文标题】没有为类型“type”定义方法“fromjson”【英文标题】:the method 'fromjson' isn't defined for the type 'type' 【发布时间】:2021-06-28 14:06:55 【问题描述】:没有为类型“Type”定义方法“fromJson”。 尝试将名称更正为现有方法的名称,或定义名为“fromJson”的方法
以下代码在 Retrofit.g.dart 文件中
@override
Future<Map<String, dynamic>> signupCustomerRegistration(customerReg) async
ArgumentError.checkNotNull(customerReg, 'customerReg');
const _extra = <String, dynamic>;
final queryParameters = <String, dynamic>;
final _data = <String, dynamic>;
_data.addAll(customerReg?.toJson() ?? <String, dynamic>);
final _result = await _dio.request<Map<String, dynamic>>(
'/api/API/CustomerSignUp',
queryParameters: queryParameters,
options: RequestOptions(
method: 'POST',
headers: <String, dynamic>,
extra: _extra,
baseUrl: baseUrl),
data: _data);
var value = _result.data.map((k, dynamic v) =>
MapEntry(k, dynamic.fromJson(v as Map<String, dynamic>)));
return value;
我的模型文件代码如下:
// To parse this JSON data, do
//
// final customerReg = customerRegFromJson(jsonString);
import 'dart:convert';
import 'package:json_annotation/json_annotation.dart';
part 'CustomerRegModel.g.dart';
@JsonSerializable()
class CustomerRegModel
CustomerRegModel(
this.custUid,
this.appname,
this.blacklist,
this.custEmail,
this.custName,
this.custPhone,
this.fcmToken,
this.password,
this.agentnin,
this.source,
this.signupDate,
this.commStartTime,
this.commEndTime,
this.commMaxValue,
this.commMinValue,
this.commDownValue,
this.walletamount,
);
String custUid;
String appname;
bool blacklist;
String custEmail;
String custName;
String custPhone;
String fcmToken;
String password;
String agentnin;
String source;
int signupDate;
int commStartTime;
int commEndTime;
int commMaxValue;
int commMinValue;
int commDownValue;
int walletamount;
factory CustomerRegModel.fromJson(Map<String, dynamic> json) => _$CustomerRegModelFromJson(json);
Map<String, dynamic> toJson() => _$CustomerRegModelToJson(this);
CustomerRegModel customerRegModelFromJson(String str) => CustomerRegModel.fromJson(json.decode(str));
String customerRegModelToJson(CustomerRegModel data) => json.encode(data.toJson());
试过了:
使缓存无效并重新启动。 删除 .g.dart 文件并重新创建它。 已为其他经过改造的模型实施了相同的代码,并且工作正常,只是没有解决这个问题。【问题讨论】:
什么是dynamic.fromJson
?你不能像这样使用dynamic
。
没错,将 dynamic.fromJson 替换为 CustomerRegModel.fromJson
它正在使用 Retrofit.g.dart 的 build runner 命令创建自己
【参考方案1】:
好的,所以在研究并在 Github Retrofit (https://github.com/trevorwang/retrofit.dart/issues/327) 中创建了一个他们没有回应的问题之后,我去搜索将 Json 解析为 Map 并找到了解决问题的方法。
即:
对于改造配置:-
@GET("/api/API/CustomerLogin")
Future<String> loginCustomer(@Query('id') String email_or_number,
@Query('pass') String pass, @Query('check') String check);
请注意,上面我使用字符串作为响应。现在我将使用 json.decode 方法将 String 转换为 Map。
final response = await client.loginCustomer(email_or_number,pass,check);
final Map<String,dynamic> map = json.decode(response);
【讨论】:
以上是关于没有为类型“type”定义方法“fromjson”的主要内容,如果未能解决你的问题,请参考以下文章
TS3——类——接口规范类——函数接口——定义类型interface和type的区别