Flutter Protocol Buffers构建插件protoc_builder的使用
Flutter Protocol Buffers构建插件protoc_builder的使用
protoc_builder
是一个Dart包,用于通过 build_runner
(即Dart构建管道)将Protocol Buffer文件编译为Dart源代码。它可以在不手动安装 protoc
编译器或Dart Protobuf插件的情况下完成此任务。protoc_builder
包会根据你的平台下载必要的Protobuf依赖项到临时本地目录,从而简化开发过程。
安装
在你的 pubspec.yaml
文件中添加必要的依赖项:
dev_dependencies:
build_runner: ^2.3.0 # 使用最新版本
protoc_builder: ^2.4.0 # 使用最新版本
配置
你需要将 .proto
文件添加到与 pubspec.yaml
文件同级的 build.yaml
文件中:
默认配置
targets:
$default:
sources:
- $package$
- lib/$lib$
- proto/** # 你的 .proto 文件目录
这将使用 protoc_builder
的默认配置。
自定义配置
你也可以自定义选项:
targets:
$default:
sources:
- $package$
- lib/$lib$
- proto/**
builders:
protoc_builder:
options:
# 使用的Protobuf编译器版本
# (默认: "3.19.1",请确保使用引号)
protobuf_version: "3.19.1"
# 使用的Dart protoc_plugin包版本
# (默认: "20.0.1",请确保使用引号)
protoc_plugin_version: "20.0.1"
# 被视为所有Protobuf文件根目录的目录
# (默认: "proto/")
root_dir: "proto/"
# 在编译期间传递给Protobuf编译器的包含路径
# (默认: ["proto/"])
proto_paths:
- "proto/"
# 生成的Dart输出文件的根目录
# (默认: "lib/src/proto")
out_dir: "lib/src/generated"
# 启用gRPC标志,以生成 `.pbgrpc.dart` 文件
# (默认: false)
grpc: true
# 使用PATH上可用的 "protoc" 命令而不是下载一个新的
# (默认: false)
use_installed_protoc: false
# 是否预编译protoc_plugin Dart脚本以提高性能
# (默认: true)
precompile_protoc_plugin: true
运行
一旦所有设置都完成,你可以简单地运行 build_runner
包:
dart run build_runner build
build_runner
有时会缓存结果的时间比预期的要长,因此在某些情况下,可能需要删除 .dart_tool/build
目录。
完整示例Demo
以下是一个完整的示例项目,展示了如何使用 protoc_builder
将 .proto
文件编译为Dart代码。
项目结构
my_flutter_app/
├── lib/
│ └── src/
│ └── generated/ # 生成的Dart代码将放置在这里
├── proto/
│ └── example.proto
├── pubspec.yaml
└── build.yaml
example.proto
syntax = "proto3";
option dart_package = "my_flutter_app.generated";
message Person {
string name = 1;
int32 id = 2;
string email = 3;
}
pubspec.yaml
name: my_flutter_app
description: A new Flutter project.
environment:
sdk: ">=2.12.0 <3.0.0"
dependencies:
flutter:
sdk: flutter
dev_dependencies:
build_runner: ^2.3.0
protoc_builder: ^2.4.0
flutter_test:
sdk: flutter
build.yaml
targets:
$default:
sources:
- $package$
- lib/$lib$
- proto/** # 你的 .proto 文件目录
builders:
protoc_builder:
options:
protobuf_version: "3.19.1"
protoc_plugin_version: "20.0.1"
root_dir: "proto/"
proto_paths:
- "proto/"
out_dir: "lib/src/generated"
grpc: false
use_installed_protoc: false
precompile_protoc_plugin: true
运行构建
在终端中运行以下命令以生成Dart代码:
dart run build_runner build
生成的Dart代码将位于 lib/src/generated
目录下。你可以在这个目录中找到 example.pb.dart
文件,该文件包含了从 example.proto
文件生成的Dart类。
使用生成的代码
在你的Flutter应用程序中,你可以像使用普通Dart类一样使用生成的代码。例如,在 main.dart
中:
import 'package:flutter/material.dart';
import 'package:my_flutter_app/generated/example.pb.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(title: Text('Protocol Buffers Example')),
body: Center(
child: ElevatedButton(
onPressed: () {
// 创建一个Person对象
final person = Person()
..name = 'John Doe'
..id = 123
..email = 'john.doe@example.com';
// 打印Person对象
print(person);
},
child: Text('Create Person'),
),
),
),
);
}
}
更多关于Flutter Protocol Buffers构建插件protoc_builder的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter Protocol Buffers构建插件protoc_builder的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在Flutter项目中,使用Protocol Buffers(简称Protobuf)可以有效地进行跨平台的数据序列化。protoc_builder
是一个用于生成Protobuf相关Dart代码的Flutter插件。下面是如何在Flutter项目中配置和使用protoc_builder
来生成和使用Protobuf代码的示例。
1. 添加依赖
首先,你需要在pubspec.yaml
文件中添加protoc_builder
依赖。注意,protoc_builder
通常与其他Protobuf相关包(如protobuf
)一起使用。
dependencies:
flutter:
sdk: flutter
protobuf: ^2.0.0 # 确保使用兼容的版本
dev_dependencies:
build_runner: ^2.0.0 # 用于构建过程
protoc_builder: ^0.1.0 # 假设这是当前版本,请检查最新版本
2. 定义Protobuf文件
创建一个.proto
文件,例如example.proto
,定义你的消息结构。
syntax = "proto3";
package example;
message User {
string name = 1;
int32 age = 2;
}
3. 配置build.yaml
在项目的根目录下创建或编辑build.yaml
文件,以配置protoc_builder
。
targets:
$default:
builders:
protoc_builder:protoc_builder:
enabled: true
generate_for:
include: ["**/*.proto"]
options:
plugin: protoc-gen-dart=/path/to/protoc-gen-dart # 指定protoc-gen-dart插件的路径
注意:/path/to/protoc-gen-dart
需要替换为实际protoc-gen-dart
插件的路径。你可以通过全局安装protoc-gen-dart
来简化路径配置。
4. 生成Dart代码
在项目根目录下运行以下命令来生成Dart代码:
flutter pub run build_runner build
这将根据example.proto
文件生成对应的Dart类文件。
5. 使用生成的Dart代码
生成的Dart代码通常位于lib/generated
目录下(这个目录可以根据配置调整)。你可以直接导入并使用这些生成的类。
import 'package:your_app/generated/example.pb.dart';
void main() {
// 创建一个User对象
User user = User()
..name = 'John Doe'
..age = 30;
// 序列化User对象为字节数组
List<int> buffer = user.writeToBuffer();
// 从字节数组反序列化回User对象
User deserializedUser = User.fromBuffer(buffer);
print('Name: ${deserializedUser.name}, Age: ${deserializedUser.age}');
}
注意事项
- 确保
protoc
和protoc-gen-dart
插件已经正确安装并配置在系统的PATH中,或者在build.yaml
中指定正确的路径。 protoc_builder
的具体版本和配置可能会随着时间变化,请参考最新的官方文档和示例。- 如果遇到路径或依赖问题,尝试清理并重新获取依赖:
flutter pub get
和flutter clean
。
通过上述步骤,你可以在Flutter项目中成功集成并使用protoc_builder
来生成和使用Protobuf相关的Dart代码。