当前位置: 首页 > news >正文

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

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");}

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

http://www.lryc.cn/news/621805.html

相关文章:

  • RAGFlow入门
  • Trae2.0:AI 编程新时代的引领者
  • 反射和类加载机制
  • 智能算法突破动态挑战,效率革命重塑计算未来!
  • (自用)console.log怎么上色
  • 使用转换函数重载布尔值类
  • 读《精益数据分析》:黏性(Stickiness)—— 验证解决方案是否留住用户
  • 自适应UI设计解读 | Fathom 企业人工智能平台
  • 5G工业一体机汽车零部件工厂的无纸化管理
  • HarmonyOS 实战:用 @Observed + @ObjectLink 玩转多组件实时数据更新
  • Go从入门到精通系列学习路线规划
  • Day62--图论--97. 小明逛公园(卡码网),127. 骑士的攻击(卡码网)
  • 智能家居【home assistant】(一)-在Windows电脑上运行home assistant
  • 论文阅读:基于大语言模型的多机器人任务分配与调度的自动 MILP 模型构建
  • GitHub 上 Star 数量前 18 的开源 AI Agent 项目
  • 基于uiautomation的自动化流程RPA开源开发演示
  • Linux网络基础(一)
  • 【补充】数据库中有关系统编码和校验规则的简述
  • 【软件设计模式】前置知识类图、七大原则(精简笔记版)
  • 【SpringBoot】SpringBoot 整合JDBC、Mybatis、Druid
  • Cursor/VSCode/VS2017 搭建Cocos2d-x环境,并进行正常的调试和运行(简单明了)
  • 基于MATLAB的机器学习、深度学习实践应用
  • WPF 监控CPU、内存性能
  • 物联网(IoT)系统中,通信协议如何选择
  • linux下找到指定目录下最新日期log文件
  • Webapi发布后IIS超时(.net8.0)
  • 【微服务】.NET8对接ElasticSearch
  • 华为实验综合小练习
  • 从源码到可执行文件:hello.c 的二进制之旅
  • Python从入门到高手9.3节: 利用字典进行格式化