方法 'fromjson' 没有为类型 'type' 定义

时间:2021-04-01 14:54:40

标签: flutter dart retrofit pojo

未为类型“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 文件并重新创建它。
  • 已经为其他模型实现了相同的代码,并进行了改造并且工作正常,只是没有解决这个问题。

1 个答案:

答案 0 :(得分:0)

好吧,在研究并在 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);