用户登录

请求接口一般得到的是 JSON 数据,为了更方便更安全的使用这些数据,我们会把它们转换成特定类型的数据,比如之前我们在项目里定义了一个  User 类,用它里面的这个 fromJson 工厂方法可以把交给它的 JSON 数据转换成 User 这种类型的数据。

这个方法会新建并且返回一个 User 数据,这里我们分别设置了它的每一个属性,如果数据比较复杂的话,手工设置这些属性比较麻烦,我们可以借助一些工具自动生成这些代码。

在终端,项目所在目录的下面,给项目安装一 些依赖,执行一下 flutter pub add ,添加一个 json_annotation 这个依赖。再执行一下 flutter pub add,添加一个 build_runner,加上一个 --dev 选项把这个依赖放在项目的开发依赖里,再执行一下 flutter pub add 添加一个 json_serializable,加上一个 --dev ,把这个依赖也添加到项目的开发依赖里。

打开项目里的 pubspec.yaml ,你会发现在 dependencies 还有 dev_dependencies 的下面会列出刚才我们给项目安装的依赖。下面再试一下使用它们自动生成一些代码。

打开 user.dart,这里我们可以使用  json_serializable 的方式定义这个类,在文件顶部,用一个 part ,文件的名字是 user.g.dart,这个文件一会儿我们会使用一个命令自动生成。

下面再用一个 annotation,名字是 @JsonSerializable ,用它标记一个类,意思就是要根据这个类去生成一些代码。修改一下 fromJson 这个工厂,这里 return 的东西,可以用一下 _$UserFromJson 这个方法,把要处理的 json 数据交给它,这里就是上面准备好的这个 user。

在终端,执行一下 flutter pub run build_runner build 这个命令,它会查找项目里使用  @JsonSerializable 标注的类,然后生成对应的代码。完成以后,你会发现在这个 user.dart 所在目录的下面,会出现一个 user.g.dart,这个文件就是执行命令自动生成的,打开它观察一下。

你会发现这个文件里有一个 _$UserFromJson,它 return 的是一个 User 实例,创建这个实例的时候分别设置了 id 还有 name 属性的值。

另外下面还有一个 _$UserToJson,这个方法会把一个 User 实例转换成 JSON 格式的数据,暂时我们没有使用这个方法。

下面再试一下,打开 user.dart ,在这个类里面添加一个属性,类型是 int ,名字叫 avatar。在终端,项目所在目录的下面重新执行一下 flutter pub run build_runner build  这个命令。完成以后再回到项目,打开自动生成的 user.g.dart 这个文件,你会发现,这个 _$UserFromJson 方法返回的这个 User 实例里面,已经设置了 avatar 这个属性。

再打开 playground_http.dart,找到这里定义的 getUser 方法,请求接口成功以后,使用 User.fromJson 把获取到的 JSON 数据转换成了一个 User 实例,输入 user 一个点的时候,编辑器会列出这个实例里面包含的一些属性,这里有 id,name 还有 avatar 这些属性。

自动生成序列化 JSON 数据用的代码(json_serializable)《 Flutter 2:网络请求 》

统计

14696
分钟
0
你学会了
0%
完成

社会化网络

关于

微信订阅号

扫描微信二维码关注宁皓网,每天进步一点