当前位置: 首页 > 知识库问答 >
问题:

BuiltValue不是“BuiltRegister”错误类型的子类型

督宏旷
2023-03-14

我刚刚学会了如何在flutter中使用BuiltValue。在使用这个库之前,我用Chopper实现的webservice工作正常。

现在,在更改为使用BuiltValue后,出现了错误,无法解决此问题

错误是:

_InternalLinkedHashMap不是“BuiltRegister”类型的子类型

我的服务器只获取移动电话号码,这是json响应结构:

{
  "message": "",
  "userInformation": {
    "active": 1,
    "name": "",
    "email": "aaaa@gmail.com",
    "avatar": "",
    "mobile_number": "5656565656",
    "teammate": 0,
    "experience": null,
    "age": 44,
    "gender": 0,
    "height": 555,
    "weight": 80400,
    "insurance": null,
    "job": "dddddd",
    "created_at": "2019-06-23 09:26:41",
    "updated_at": "2019-08-26 17:51:24",
    "api_token": "5QbgyBdcL"
  },
  "tickets": [
    {
      "id": 3,
      "subject": "3",
      "description": "3",
      "ticket_number": 5273,
      "priority": 1,
      "section": 1,
      "solved": 0,
      "created_at": "2019-06-23 09:26:41",
      "updated_at": "2019-08-26 17:51:24",
      "user": {
        "active": 1,
        "name": "",
        "email": "aaaa@gmail.com",
        "avatar": "",
        "mobile_number": "5656565656",
        "teammate": 0,
        "experience": null,
        "age": 44,
        "gender": 0,
        "height": 555,
        "weight": 80400,
        "insurance": null,
        "job": "dddddd",
        "created_at": "2019-06-23 09:26:41",
        "updated_at": "2019-08-26 17:51:24",
        "api_token": "5QbgyBdcL"
      },
      "reply": [
        {
          "ticket_id": 3,
          "reply": "5050505050505050050505005",
          "created_at": "2019-06-23 09:26:41",
          "updated_at": "2019-08-26 17:51:24",
          "user": {
            "active": 1,
            "name": "",
            "email": "aaaa@gmail.com",
            "avatar": "",
            "mobile_number": "5656565656",
            "teammate": 0,
            "experience": null,
            "age": 44,
            "gender": 0,
            "height": 555,
            "weight": 80400,
            "insurance": null,
            "job": "dddddd",
            "created_at": "2019-06-23 09:26:41",
            "updated_at": "2019-08-26 17:51:24",
            "api_token": "5QbgyBdcL"
          }
        }
      ]
    }
  ],
  "status": 5
}

我构建buildRegister具有结构的寄存器:

part 'built_register.g.dart';

abstract class BuiltRegister implements Built<BuiltRegister, BuiltRegisterBuilder> {
  //@formatter:off
  String              get mobile_number;
  @nullable String    get message;
  @nullable BuiltUser get userInformation;
  @nullable int       get status;
  @nullable BuiltList<BuiltTickets> get tickets;
  //@formatter:on

  BuiltRegister._();

  factory BuiltRegister([updates(BuiltRegisterBuilder b)]) = _$BuiltRegister;

  static Serializer<BuiltRegister> get serializer => _$builtRegisterSerializer;
}

abstract class BuiltUser implements Built<BuiltUser, BuiltUserBuilder> {
  //@formatter:off
  String           get mobile_number;
  String           get active;
  @nullable String get name;
  @nullable String get email;
  @nullable String get avatar;
  @nullable String get teammate;
  @nullable String get experience;
  @nullable String get age;
  @nullable String get gender;
  @nullable String get height;
  @nullable String get weight;
  @nullable String get insurance;
  @nullable String get job;
  String           get created_at;
  String           get updated_at;
  String           get api_token;
  //@formatter:on

  BuiltUser._();

  factory BuiltUser([updates(BuiltUserBuilder b)]) = _$BuiltUser;

  static Serializer<BuiltUser> get serializer => _$builtUserSerializer;
}

abstract class BuiltTickets implements Built<BuiltTickets, BuiltTicketsBuilder> {
  //@formatter:off
  int        get id;
  String     get subject;
  String     get description;
  int        get ticket_number;
  int        get priority;
  int        get section;
  int        get solved;
  String     get created_at;
  String     get updated_at;
  BuiltUser  get user;
  @nullable BuiltReply get reply;
  //@formatter:on

  BuiltTickets._();

  factory BuiltTickets([updates(BuiltTicketsBuilder b)]) = _$BuiltTickets;

  static Serializer<BuiltTickets> get serializer => _$builtTicketsSerializer;
}

abstract class BuiltReply implements Built<BuiltReply, BuiltReplyBuilder> {
  //@formatter:off
  int       get ticket_id;
  String    get reply;
  String    get created_at;
  String    get updated_at;
  BuiltUser get user;
  //@formatter:on

  BuiltReply._();

  factory BuiltReply([updates(BuiltReplyBuilder b)]) = _$BuiltReply;

  static Serializer<BuiltReply> get serializer => _$builtReplySerializer;
}

终端返回中的build命令成功,我没有任何问题,现在这是我的Chopper实现:

part 'api_service.chopper.dart';

@ChopperApi(baseUrl: '/api/v1')
abstract class DiabetistApiService extends ChopperService {
  @Post(path: '/register')
  Future<Response<BuiltRegister>> registerUser(@Body() BuiltRegister body);

  static DiabetistApiService create() {
    final client = ChopperClient(
        baseUrl: 'http://www.example.com',
        services: [
          _$DiabetistApiService(),
        ],
        converter: BuiltValueConvert(),
        interceptors: [
          HeadersInterceptor({'Content-Type': 'application/json'}),
          HttpLoggingInterceptor(),
          (Response response) async {
            if (response.statusCode == 404) {
              chopperLogger.severe('404 NOT FOUND');
            }
          }
        ]);
    return _$DiabetistApiService(client);
  }
}

BuiltValueConver拦截器实现的Chopper

class BuiltValueConvert extends JsonConverter {
  @override
  Request convertRequest(Request request) {
    //@formatter:off
    return super
        .convertRequest(
                request.replace(
                    body: serializers.serializeWith(
                        serializers.serializerForType(
                            request.body.runtimeType), request.body
                    )
                )
    );
    //@formatter:on
  }

  @override
  Response<BodyType> convertResponse<BodyType, singleItemType>(Response response,) {
    final Response dynamicResponse = super.convertResponse(response);
    final BodyType customBody = _convertToCustomObject(dynamicResponse.body);

    return dynamicResponse.replace<BodyType>(body: customBody);
  }

  dynamic _convertToCustomObject<SingleItemType>(dynamic element) {
    if (element is SingleItemType) return element;

    if (element is List)
      return _deserializerListOf<SingleItemType>(element);
    else
      return _deserialize<SingleItemType>(element);
  }

  BuiltList<SingleItemType> _deserializerListOf<SingleItemType>(List dynamicList) {
    return BuiltList<SingleItemType>(
        dynamicList.map((element) => _deserialize<SingleItemType>(element))
    );
  }

  SingleItemType _deserialize<SingleItemType>(Map<String, dynamic> value) {
    return serializers.deserializeWith(serializers.serializerForType(SingleItemType), value);
  }
}

这是我想如何连接到服务器,发送和获取结果:

final register = BuiltRegister((b) => b..mobile_number = mobileNumber);
final response = await Provider.of<DiabetistApiService>(context).registerUser(register);

当我试图打印响应时,我得到了一个错误

共有1个答案

丰赞
2023-03-14

问题解决了!!!

我变了

convertResponse<BodyType, singleItemType> 

convertResponse<BodyType, SingleItemType>
 类似资料:
  • //我正在尝试此代码,但它没有添加到firebase //它给出了这些错误 处理手势时引发了以下_TypeError:类型“List”不是类型“String”的子类型 抛出异常时,这是堆栈:#0个SharedReferences。getString(包:共享首选项/共享首选项。dart:98:35)#1 CheckItemInNot(包:e_shop/Store/storehome.dart:33

  • 我有一个错误,当试图解析我的JSON并显示在文本中,而不是作为一个。 下面是我的JSON结构。 这是我的未来API异步。 这是我显示JSON的代码。 当我试图获取数据时,我得到了这样的错误。 我应该修复哪个代码?

  • 问题内容: 我目前正在构建一个应用程序,以通过api读取数据,并且试图从JSON Placeholder解析JSON api。 我为用户创建了一个模型类(users_future_model.dart): 这是将json读取到小部件中的main.dart: 这是我尝试读取的JSON信息,尽管它只是其中的一小部分: 我当前遇到的错误是: 我该如何纠正此错误? 问题答案: API返回JSON数组而不是

  • 使用搜索函数显示从第三方API获取的A-List该错误仅在我运行应用程序时显示,显示为_InternalLinkedHashMap 请欢迎***编辑一个新的错误显示在玩代码后此错误显示类型'String'不是Map dynamic,dynamic类型的子类型- 数据模型类 错误

  • 因此,我创建了一个应用程序,通过api读取数据,并尝试解析JSON api 这是我的错误截图 我试着把它改成一个列表,但它仍然读取一个错误 这是我的密码大象。飞奔 如何纠正此错误?请帮忙

  • 我试图获得用户信息后,用户输入电子邮件和密码。我使用的api会返回我用户的额外信息,所以我尝试从中获取这些信息。 我试图解析这个json: 这些是我的模型: 这是我发送电子邮件、密码和获取用户数据的部分: 这是给我错误的部分 我打印了响应体,它给出了我想要的字符串,但是jsonDecode返回了一个列表,所以我不能使用它。我怎样才能解决这个问题?提前谢谢。