1 安装依赖`
dependencies:protobuf: ^3.1.0 # 或最新版本
flutter pub get
安装成功之后
1 lib 下创建文件夹 testProto
2 创建文件Student.proto 文件
Student.proto 文件内容
syntax = "proto3";
package example2;//导入其它proto文件
import "testProto/user.proto";/*
每个字段都要有唯一的编号(1、2、3…)。
*/
message Student {int32 id = 1; //用户IDstring name = 3; // 用户名string email = 2; // 邮箱
}/*
proto3 枚举必须有一个 0 值,通常作为默认值。
枚举是强类型的,在 Dart/Swift 里会生成对应的 enum 类型。
*/
enum PhoneType {PHONE_TYPE_UNSPECIFIED = 0 ;MOBILE = 1;HOME = 2;WORK = 3;
}/*
proto3 默认所有字段都是 可选 的(会有默认值)。• string 默认是 ""• number 默认是 0• bool 默认是 false
*/
/*
每个字段都要有唯一的编号(1、2、3…)。
*/
message Test1 {double tempture = 1;float height = 2;int32 age = 3;int64 numId = 4;uint32 idCardNum = 5;uint64 id = 6;bool femal = 7;string name = 8; //utf8 字符串bytes data = 9; //原始字节序列PhoneType type = 10;Student stu11 = 11; // 可以嵌套类型repeated string nameList = 12; // 数组,dart List<String>map<string ,Student> contacts = 13; //Map 键值对optional string nickname = 14; //如果你要区分“没有赋值”与“赋值为默认值”,可以用 optional:User user = 15; // 导入其它proto文件
}
/*
protoc --dart_out=testProto/lib testProto/Student.proto
*/
安装工具
brew install protobuf // 安装生成dart工具
brew install swift-protobuf // 安装生成swift工具
命令行
切换到lib根路径
创建testProto的lib文件夹
protoc --dart_out=testProto/lib testProto/Student.proto
生成文件如下
在dart中使用
void test1() {var stu = Student()..id = 23..name = "bob"..email = "bob@gmai.com";// 序列化为二进制数据Uint8List dataList = stu.writeToBuffer();print("二进制数据处理");var stu2 = Student.fromBuffer(dataList);print("反序列化");//序列化为JSONvar stuJson = stu.writeToJson();print("序列化为json数据$stuJson");var student3 = Student.fromJson(stuJson);print("反序列化$student3");}
会生成二进制数据,也就是类类型转为二进制数据,和硬件通信很适合,我这边目前主要用于定义协议