flutter build_value 使用

884 阅读1分钟

Install

在 pubspec.yaml中添加:

dependencies:
    ...
    built_value: ^7.1.0
dev_dependencies:
    ...
    build_runner: ^1.10.0
    built_value_generator:^7.1.0 
# 执行 pub get

Usage

定义可序列化的模型:

import 'package:built_value/built_value.dart';
import 'package:built_value/serializer.dart';
part 'user_info.g.dart';
abstract class UserInfo implements Built<UserInfo,UserInfoBuilder>{  
    static Serializer<UserInfo> get serializer => _$userInfoSerializer;
    String get phone;
    String get userName;
    UserInfo._();  
    factory UserInfo([void Function(UserInfoBuilder) updates]) = _$UserInfo;
}

library serializers;
import 'package:built_value/serializer.dart';
import 'package:flutter_app/api/result.dart';
import 'package:flutter_app/models/user_info.dart';
part 'serializer.g.dart';
@SerializersFor(const [
    UserInfo,
    ...
])
final Serializers serializers = _$serializers;

$ flutter packages pub run build_runner build

会生成 UserInfoBuilder 类和_$UserInfo 

主要功能

  1. 不可变模型。
  2. 序列化
  3. 枚举实现

解析json:

String json = '{"phone": "123231313131","userName": "userName"}';
final standardSerializers = (serializers.toBuilder()..addPlugin(new StandardJsonPlugin())).build();
final value =standardSerializers.deserializeWith(UserInfo.serializer, jsonDecode(json));

序列化:

var userInfo = new UserInfo((b) => b  
    ..userName = 'kk'  
    ..phone = '123456');
print(jsonEncode(serializers.serialize(login)));