flutter中利用json_model生成的model类快速构造“泛“对象

flutter中利用json_model生成的model类如何快速构造"泛"对象?
意思可能表达的不清楚,举个例子,在dio中返回的json中我们希望通过消息直接返回需要的对象,而不是返回到调用处再去用json构造成需要的对象.

// 原来从服务器中我们的返回方式
var response = await dio.get<String>(
      "user",
    );
    Map<String,dynamic> rdata = json.decode(response.data);

从服务器返回user的json格式再用model.fromJson方式构造,这样会造成异常处理的麻烦,比如我们现在无法返回user而是返回了一个error,告诉客户端用户被锁定了.这个时候上面的代码返回后就需要做业务判断…感觉这样写起来有些繁琐.如果能用一个message类用来包装返回一个消息模型我觉得是不是更好一些?由于json_model生成的模型只需要传一个model然后返回model.fromJson的工厂方法就可以了.不过这需要用到了类的反射机制…
可是flutter并不支持反射…于是我用了以下方式变通了一下,记录下来:

// 定义定义服务器返回对象
class JsonResponse{
  final Map<String,dynamic> data;
  JsonResponse(jsonData):data = json.decode(jsonData);
}
//定义好服务器返回的消息包装器
class MsgType<T> {
  final int status;
  final String message;
  final JsonResponse response;
  final Map<String,dynamic> data;
  T model;
  MsgType(JsonResponse response):
        status = response.data['status'],
        message = response.data['msg'],
        data = response.data['data'],
        response = response;
  T getModel(T ts){
    model = ts;
    return ts;
  }
}

//于是就可以在应用的场景这样调用了
 MsgType<User> msgType = MsgType(JsonResponse(r.toString()));
 if(msgType.status == 200){
   msgType.getModel(User.fromJson(msgType.data));
   print(jsonEncode(msgType.model));//这里存的就是User实例了.
   ...
 }
 if(msgType.status == 400){
 	toast(msgType.message);
 }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值