Flutter gRPC代码生成插件better_grpc_generator的使用

Flutter gRPC代码生成插件better_grpc_generator的使用

安装

  1. 安装 protoc

    • 你可以从这里下载最新版本的 protoc
    • 目前该工具只在 protoc 版本 3.12.4 上测试过,但更高版本应该也可以使用。
  2. 编译 .proto 文件为 gRPC 代码

    • 你可以通过以下命令来编译 .proto 文件:
      protoc -I=proto/ --dart_out=grpc:bin/generated hello.proto
      
    • 这条命令会生成一个名为 hello.pbgrpc.dart 的文件。
  3. better_grpc_generator 添加到你的 pubspec.yaml 文件

    dev_dependencies:
      better_grpc_generator: ^0.0.1
      build_runner: ^2.1.11
    
  4. 获取依赖项

    dart pub get
    

使用

  1. 生成代码

    • 运行以下命令来生成代码:
      dart run build_runner build --delete-conflicting-outputs
      
  2. 使用生成的代码

    • 假设你的服务名为 Hello,通常你会使用 HelloServiceBase,但是在这里你将使用 BetterHelloServiceBase。你需要实现实际的功能,例如:
      class HelloService extends BetterHelloServiceBase {
          // 实现具体的逻辑
      }
      
    • 要创建一个服务,可以结合 BetterHelloService 来使用:
      final service = BetterHelloService(HelloService());
      
  3. 创建服务器

    final server = Server([
        BetterHelloService(HelloService()),
      ]);
    await server.serve(port: port);
    print('Server listening on port ${server.port}...');
    
  4. 连接到服务器

    final channel = ClientChannel(
        'localhost',
        port: port,
        options: ChannelOptions(
          credentials: ChannelCredentials.insecure(),
        ),
      );
    final client = BetterHelloClient(HelloClient(channel));
    
  5. 创建离线服务器

    • 这里的 Client 并不意味着它会连接到服务器。它只是表示该类继承自 BetterHelloClientBase
    final offlineClient = BetterHelloOfflineClient(HelloService());
    

其他注意事项

  • 该工具解析由 protoc 生成的文件,这些文件的扩展名必须是 .pbgrpc.dart

示例代码

生成 .proto 文件

protoc -I=proto/ --dart_out=grpc:bin/generated hello.proto

运行 better_grpc_generator

dart run build_runner build --delete-conflicting-outputs

运行示例

dart run bin/example.dart

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

1 回复

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


better_grpc_generator 是一个用于 Flutter 的代码生成插件,它可以帮助你自动生成 gRPC 客户端代码。使用这个插件可以简化 gRPC 客户端代码的编写过程,减少手动编写代码的工作量。

以下是使用 better_grpc_generator 的步骤:

1. 安装依赖

首先,你需要在 pubspec.yaml 文件中添加 better_grpc_generatorbuild_runner 依赖。

dependencies:
  grpc: ^3.0.0
  better_grpc_generator: ^0.1.0

dev_dependencies:
  build_runner: ^2.1.0

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

2. 编写 .proto 文件

假设你有一个 example.proto 文件,内容如下:

syntax = "proto3";

package example;

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

message HelloRequest {
  string name = 1;
}

message HelloResponse {
  string message = 1;
}

3. 生成 Dart 代码

使用 protoc 工具生成 Dart 代码。首先,确保你已经安装了 protocprotoc-gen-dart 插件。

运行以下命令来生成 Dart 代码:

protoc --dart_out=grpc:lib/src/generated -Iproto proto/example.proto

这将在 lib/src/generated 目录下生成 Dart 代码。

4. 使用 better_grpc_generator 生成客户端代码

lib 目录下创建一个 example_service.dart 文件,内容如下:

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

@BetterGrpcGenerator()
class ExampleServiceClient {
  final ExampleServiceClient _client;

  ExampleServiceClient(this._client);

  Future<HelloResponse> sayHello(String name) async {
    final request = HelloRequest()..name = name;
    return await _client.sayHello(request);
  }
}

5. 运行 build_runner 生成代码

运行以下命令来生成客户端代码:

flutter pub run build_runner build

这将生成 example_service.g.dart 文件,其中包含自动生成的客户端代码。

6. 使用生成的客户端代码

你可以在你的应用中使用生成的客户端代码:

import 'example_service.dart';

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

  final response = await client.sayHello('World');
  print('Response: ${response.message}');
}
回到顶部