Flutter - How to parsed nested json to a class with generics?

后端 未结 2 998
自闭症患者
自闭症患者 2020-12-17 14:10

I\'m wondering how can I parse a nested json to a class with generic types. My intention is to wrap responses from the backend (like loginRespose that contains a token) with

2条回答
  •  借酒劲吻你
    2020-12-17 14:57

    You can't do such thing, at least not in flutter. As dart:mirror is disabled and there's no interface for classes constructors.

    You'll have to take a different route.

    I'll recommend using POO instead. You would here give up on deserializing responseObject from your BaseResponse. And then have subclass of BaseResponse handles this deserialization

    Typically you'd have one subclass per type:

    class IntResponse extends BaseResponse {
      IntResponse.fromJson(Map json) : super._fromJson(json) {
        this.responseObject = int.parse(json["Hello"]);
      }
    }
    

    You can then hide this mess away by adding a custom factory constructor on BaseResponse to make it more convenient to use.

    class BaseResponse {
      int code;
      String message;
      T responseObject;
    
      BaseResponse._fromJson(Map parsedJson)
          : code = parsedJson['Code'],
            message = parsedJson['Message'];
    
      factory BaseResponse.fromJson(Map json) {
        if (T == int) {
          return IntResponse.fromJson(json) as BaseResponse;
        }
        throw UnimplementedError();
      }
    }
    

    Then either instantiate the wanted type directly, or use the factory constructor :

    final BaseResponse foo = BaseResponse.fromJson({"Hello": "42", "Code": 42, "Message": "World"});
    

提交回复
热议问题