flutter 跨平台编码库 protobuf 工具使用

1 安装依赖`

dart 复制代码
dependencies:
  protobuf: ^3.1.0  # 或最新版本
dart 复制代码
flutter pub get

安装成功之后

1 lib 下创建文件夹 testProto

2 创建文件Student.proto 文件

Student.proto 文件内容

c 复制代码
syntax = "proto3";
package  example2;

//导入其它proto文件
import "testProto/user.proto";

/*
每个字段都要有唯一的编号(1、2、3...)。
*/
message  Student {
    int32 id = 1;  //用户ID
    string 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
*/

安装工具

c 复制代码
brew install protobuf // 安装生成dart工具
brew install swift-protobuf // 安装生成swift工具

命令行

切换到lib根路径

创建testProto的lib文件夹

c 复制代码
protoc --dart_out=testProto/lib testProto/Student.proto

生成文件如下

在dart中使用

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("反序列化");

    //序列化为JSON
    var stuJson = stu.writeToJson();
    print("序列化为json数据$stuJson");
    var student3 = Student.fromJson(stuJson);
    print("反序列化$student3");

  }

会生成二进制数据,也就是类类型转为二进制数据,和硬件通信很适合,我这边目前主要用于定义协议

相关推荐
齊家治國平天下4 分钟前
AAOS 电源管理深度解析:休眠/唤醒/功耗优化
android·车载系统·aaos·aosp·电源管理·休眠唤醒·carpowermanager
Xzaveir30 分钟前
企业号码展示不可观测怎么办:状态机、拨测事件与异常回放
android·人工智能
2501_9160074739 分钟前
iOS和macOS应用程序性能分析和优化工具使用综合指南
android·macos·ios·小程序·uni-app·iphone·webview
黄林晴1 小时前
Nearby Connections 重大变更:不再自动开启 Wi-Fi / 蓝牙,适配指南
android
恋猫de小郭2 小时前
Flutter 全新真 3D 实现,用 flutter_scene 能开发一个「我的世界」
android·前端·flutter
woshihuanglaoshi2 小时前
数据迁移与版本管理 - Flutter在鸿蒙平台实现数据库升级策略
数据库·学习·flutter·华为·harmonyos·鸿蒙·鸿蒙系统
GitLqr12 小时前
玩转 WebSocket:从原理到 Flutter 实战
websocket·网络协议·flutter
世人万千丶12 小时前
参数管理_Flutter在鸿蒙平台路由参数最佳实践
学习·flutter·华为·harmonyos·鸿蒙
HLC++15 小时前
Linux的进程间通信
android·linux·服务器
爱笑鱼18 小时前
Binder(二):AIDL 生成的 Proxy、Stub 和 Parcel 到底在做什么?
android