简介

在日常开发中,通过网络请求获取后端接口回来一些结构化字符串数据,如json,xml等。前端无法直接运用这些json数据,需求将json格式的字符串转为可运用的类对象或Dart对象。与java不同的是,Flutter无法直接生成数据解析类,需求通过第三方东西生成。本文首要介绍在Flutter中怎么完成数据解析。

比照

因为Java和Kotlin言语提供有JackSon和Gson序列化类库,能够直接运用。关于Flutter来说,因为这些序列化库都需求运用运转时反射,Flutter不支持,所以需求手动完成。

示例:关于字符串“[{ “name”: “Jack”,”age”: 19}]”,不同言语的数据类如下。


  1. Java
class Person{
    private String name;
    private int age;
    pubilic setAge(int age){
        this.age = age;
    }
    public getAge(){
        return age;
    }
     pubilic setName(int name){
        this.name = name;
    }
    public getName(){
        return name;
    }
}
  1. kotlin
data class Person(val name:String,val age:Int)
  1. flutter
import 'package:json_annotation/json_annotation.dart';
part 'person.g.dart';
List<Person> getPersonList(List<dynamic> list){
    List<Person> result = [];
    list.forEach((item){
      result.add(Person.fromJson(item));
    });
    return result;
  }
@JsonSerializable()
  class Person extends Object with _$PersonSerializerMixin{
  @JsonKey(name: 'name')
  String name;
  @JsonKey(name: 'age')
  int age;
  Person(this.name,this.age,);
  factory Person.fromJson(Map<String, dynamic> srcJson) => 
      _$PersonFromJson(srcJson);
}

从三种言语各自生成的数据类比照来看,kotlin最简单,java手写也能完成,Flutter的数据类看起来比较复杂,运用的json也只要两个特点,正常开发过程中,对象类的特点很多,假如手写过于复杂而且容易犯错。这个时分能够需求借助第三方东西完成。

引进

在Flutter工程的pubspec.yaml文件中,增加json_annotation和json_serializable对应版本依赖,然后点击编译东西上的提示 Pub get或许指令行输入flutter pub get即可导入库文件。

Flutter基础之Json数据解析

基本运用

  1. 在浏览器中翻开json2dart_for_json_serializable网站。

Flutter基础之Json数据解析

  1. 将接口回来的json字符串粘贴到左面输入框内。然后点击下边的格式化。生成对应的数据类。

Flutter基础之Json数据解析

  1. 修改类名。类名支持自定义,默认为Entity,修改完成后,点击下载生成对应的dart文件,或直接点击仿制代码。

Flutter基础之Json数据解析

  1. 在咱们的项目根目录下运转:flutter packages pub run build_runner build 指令,生成一个person.g.dart文件,

  1. 这时一个完整的数据类就完成了。能够电源Person.fromJson直接进行数据解析。
   _getItemList() async{
   Response response = await ApiManager.getKnowledgeList(mPage,widget.cid);
   if(response.statusCode == NetCode.succeed){
    setState(() {
      if(mPage == 0) list.clear();
      list.addAll(Person.fromJson(jsonDecode(response.body)).data.datas);
    });
   }
  }

注意事项

需求注意的是:假如修改了数据类中的字段,需求删去 person.g.dart文件,然后运转指令从头生成即可。

总结

本文介绍的是一种Flutter数据类的常用生成办法,当然还有其他生成办法,但是本文介绍的办法是官方引荐的。其他办法有必定的缺点。引荐我们运用这种方法生成数据类。

本文介绍常见数据解析类的生成运用。为后续实战打好基础。对实战项目感兴趣的同学,能够点击关注小编!