一.简介
flutter中使用protobuf的话,需要将proto文件转化成dart文件,我们需要借助官方编译工具进行编译。
二.安装protobuf
官放说Protocol Compiler是用C++编写的,使用它需要具备C++环境
安装C++:
sudo apt-get install autoconf automake libtool curl make g++ unzip
安装ProtoBuf发行版:
如果你的是源码版,需要自己在编译一下
git clone https:// github.com/protocolbuff ers/protobuf.git #下载源码
cd protobuf
git submodule update --init --recursive
./autogen.sh
发行版地址:
Releases · protocolbuffers/protobufgithub.com需要去下载对应的源码包,由于没有dart的包,我直接下载all包
下载完成之后,解压,进到目录中执行下面命令编译安装
./configure
make
make check
sudo make install
sudo ldconfig # refresh shared library cache.
这样Protocol Compiler就安装完成了
OK,我先试试,直接生成dart文件可不可以
GG,果然提示我们没有安装protoc-gen-dart插件,不慌,还在掌握之中,想要编成dart的话,是比编译成java麻烦一点点,编译成java直接下载个protobuf-java的包,执行命令就好了,但是dart的话,需要插件,那下面去下载dart-lang插件
dart-lang/protobufgithub.com下载完成之后,要执行
dart pub global activate protoc_plugin
如果你没有安装dart和pub环境,这条命令是无法执行成功的,但是插件编译还依赖dart环境
所以先去安装dart环境
获取 Dart SDKdart.cn按照官网命令行安装就好了,但是网络原因,我apt有问题,所以我用deb安装
sudo dpkg -i dart_2.10.4-1_amd64.deb
export PATH="$PATH:/usr/lib/dart/bin"
dart --version
这样dart就安装好了,下面 pub清华源
Tsinghua Open Source Mirrormirror.tuna.tsinghua.edu.cn然后,我们执行dart pub global activate protoc_plugin
如果出现:
直接执行:
export PATH="$PATH":"$HOME/.pub-cache/bin"
然后重新Pub install就好了
截至到这时,我们支持编译成dart的protobuf算是安装完成了
三.使用
先搞个.proto文件试试,能不能生成dart文件
好像生成成功了
果然成功了,这下就弥补了公司转化protobuf的python脚本中不能转化dart的空白,等回头把这玩意加到公司的python脚本中,就完美了,也不算浪费了我两小时。
这四个文件都有自己不同的作用,只需要引用自己需要的就可以了,也可以全部引入,你要是讲究,我记得protobuf应该有参数设置。
代码中使用:
把生成好的文件复制到代码中
引入插件
protobuf: ^1.1.0 #使用protobuf
调用
import 'package:flutterrobot/protobuf/b.pb.dart';
··· 例子:我的b.pb.dart文件中放的是person类
var p1 = person.create();
p1.age=10;
p1.country="100";
var writeToBuffer = p1.writeToBuffer();
print(writeToBuffer);
var p2 = person.fromBuffer(writeToBuffer);
print("年龄:${p2.age}");
···
输出:
OK,完美,后续搭配之前的tcp通讯和自定义协议的格式,最后在放个CRC校验,一个数据帧就这样完成了。