Flutter 泛型解析问题

第一次写文章,排版问题,望忽略。我是做Android应用开发,学了一下Flutter ,以后列出相关的问题,以及解决方案,此篇是关于数据解析问题。直接开始,大多数做Android ,基础数据定义是这样的BaseData,

然后所需数据类型People

然后可以用泛型的方式解析此类数据类型BaseData,到了Flutter,第一步,我们需要生成Bean, 我使用的是一个插件,FlutterJsonBeanFactory,可以通过json,生成Bean,类似于GsonFormate,生成数据格式如下:

s

我改了一个命名,为了规范,主要是生成的Bean, Flutter 解析json数据,采用  json.decode()方法得到一个Map对象,就是键值对,再通过fromJson(map)解析键值对,生成一个我们要用的对象。方法如下 :

                 Map map=json.decode("json");

                  People people=People.fromjson(map);


BaseData的数据也是如此,我是手动写的:


注意里面的data类型,不是泛型,为什么说Flutter不支持泛型解析,是因为我们生成的fromJson()方法里面json['data']里面的方法获取到的是一个map对象,需要通过我们自己生成的People.fomJson(map)再去生成people对象。

再通过搭配网络请求,我使用的dio网络请求https://github.com/flutterchina/dio/blob/master/README-ZH.md#%E6%8B%A6%E6%88%AA%E5%99%A8,通过拦截器的方式先解析BaseData,获取到BaseData的一些信息,判断数据请求成功之后,再把BaseData 解析到的map转换成json数据,返回给下一层,代码如下。


第一段编注的地方就是解析BaseData,然后判断status,如果失败了reject,成功了,再用json.encode去把map转换成json返回给下一层。


注意的地方就是dio的请求 ,我给需要dio配置option,  responseType: ResponseType.plain,这样获取的数据格式是json,而不是一个map对象。如果不配置这样的option ,就去掉 json.decode 和 json.encode 这样的方法。如下:

BaseData baseData = BaseData.fromJson(response.data);

People people=People.fromJson(baseData.data);

总结一下: 通过网络请求,拦截器的方法,先解析基础类型数据,再把处理后的数据返回给下一层。

    

你可能感兴趣的:(Flutter 泛型解析问题)