Flutter离线gRPC代码生成插件offline_grpc_generator的使用

Flutter离线gRPC代码生成插件offline_grpc_generator的使用

在Flutter项目中,使用gRPC进行远程调用时,通常需要在线生成客户端代码。然而,当网络环境受限或无法访问远程定义文件时,可以使用offline_grpc_generator插件来实现离线生成gRPC客户端代码。

使用步骤

1. 添加依赖

首先,在项目的pubspec.yaml文件中添加offline_grpc_generator作为开发依赖:

dev_dependencies:
  offline_grpc_generator: ^1.0.0

然后运行以下命令以安装依赖:

flutter pub get

2. 准备gRPC服务定义文件

假设你有一个.proto文件定义了gRPC服务。例如,example.proto文件内容如下:

syntax = "proto3";

package example;

service ExampleService {
  rpc SayHello (HelloRequest) returns (HelloResponse);
}

message HelloRequest {
  string name = 1;
}

message HelloResponse {
  string message = 1;
}

将该文件保存到项目目录中,例如lib/proto/example.proto

3. 创建生成脚本

创建一个脚本来生成gRPC客户端代码。例如,创建一个名为generate.dart的文件:

import 'package:path/path.dart' as path;
import 'package:offline_grpc_generator/offline_grpc_generator.dart';

void main() {
  // 定义输入的.proto文件路径
  final inputProtoPath = path.join('lib', 'proto', 'example.proto');

  // 定义输出目录
  final outputDir = path.join('lib', 'generated');

  // 调用生成器生成代码
  generateOfflineGrpc(
    inputFiles: [inputProtoPath],
    outputDirectory: outputDir,
  );

  print('gRPC客户端代码已生成至 $outputDir');
}

4. 运行生成脚本

运行生成脚本以生成gRPC客户端代码:

dart run generate.dart

生成完成后,你会在lib/generated目录下看到生成的gRPC客户端代码。

5. 在项目中使用生成的代码

在你的Flutter项目中引入生成的代码,并使用它来调用gRPC服务。例如:

import 'package:grpc/grpc.dart';
import 'package:example/Example.pbgrpc.dart'; // 引入生成的代码

Future<void> main() async {
  final channel = ClientChannel(
    'localhost',
    port: 50051,
    options: const ChannelOptions(),
  );

  final client = ExampleServiceClient(channel);

  try {
    final response = await client.sayHello(HelloRequest(name: 'Flutter'));
    print(response.message); // 输出: Hello, Flutter!
  } finally {
    await channel.shutdown();
  }
}

更多关于Flutter离线gRPC代码生成插件offline_grpc_generator的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter离线gRPC代码生成插件offline_grpc_generator的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


offline_grpc_generator 是一个用于在 Flutter 项目中生成 gRPC 代码的插件,特别适合在没有网络连接的环境下使用。它可以帮助你根据 .proto 文件生成 Dart 代码,以便在你的 Flutter 应用中使用 gRPC 服务。

以下是使用 offline_grpc_generator 插件的步骤:

1. 安装 protoc 编译器

首先,你需要安装 protoc 编译器,它是 Protocol Buffers 的编译器,用于将 .proto 文件编译成 Dart 代码。

  • macOS: 使用 Homebrew 安装:

    brew install protobuf
    
  • Linux: 使用包管理器安装:

    sudo apt-get install protobuf-compiler
    
  • Windows: 从 Protocol Buffers 官方仓库 下载并安装。

2. 添加依赖到 pubspec.yaml

在你的 Flutter 项目的 pubspec.yaml 文件中添加 offline_grpc_generatorprotoc_plugin 依赖:

dependencies:
  grpc: ^3.0.0

dev_dependencies:
  offline_grpc_generator: ^0.1.0
  build_runner: ^2.1.0
  protoc_plugin: ^20.0.0

然后运行 flutter pub get 来安装依赖。

3. 创建 .proto 文件

在项目的根目录下创建一个 .proto 文件,例如 example.proto,并定义你的 gRPC 服务。

syntax = "proto3";

package example;

service Greeter {
  rpc SayHello (HelloRequest) returns (HelloReply);
}

message HelloRequest {
  string name = 1;
}

message HelloReply {
  string message = 1;
}

4. 生成 Dart 代码

使用 offline_grpc_generator 生成 Dart 代码。你可以通过以下命令生成代码:

flutter pub run offline_grpc_generator:generate

或者,你可以使用 build_runner 来生成代码:

flutter pub run build_runner build

生成的代码将会放在 lib/src/generated 目录下。

5. 使用生成的代码

在你的 Flutter 项目中使用生成的 gRPC 代码。例如:

import 'package:grpc/grpc.dart';
import 'src/generated/example.pb.dart';
import 'src/generated/example.pbgrpc.dart';

void main() async {
  final channel = ClientChannel('localhost',
      port: 50051,
      options: const ChannelOptions(
          credentials: ChannelCredentials.insecure()));

  final stub = GreeterClient(channel);

  final response = await stub.sayHello(HelloRequest()..name = 'World');
  print('Greeter client received: ${response.message}');
}

6. 运行你的应用

确保你的 gRPC 服务已经启动,然后运行你的 Flutter 应用:

flutter run
回到顶部