未为类型“type”定义方法“fromjson”

问题描述 投票:0回答:2

未为类型“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 文件并重新创建它。
  • 已经为其他型号实施了相同的代码,并进行了改造并且工作正常,只是在这方面不起作用。
flutter dart retrofit pojo
2个回答
3
投票

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

0
投票

我通过使用 code_builder 的依赖项覆盖得到了解决方案。 您不需要使用此解决方案替换 String 的 HttpResonse。

依赖覆盖: 代码生成器:^4.3.0

https://github.com/trevorwang/retrofit.dart/issues/505

© www.soinside.com 2019 - 2024. All rights reserved.