Dart protoc 编译未创建 gRPC 客户端类

问题描述 投票:0回答:1

我的问题是我无法在 dart 中获取 .proto 的客户端代码。我有一个在 C#/.NET Core 7.0 中编译和测试的 .proto。我已成功将服务器部署到另一台计算机,并通过运行 C# 客户端的 Visual Studio 与它进行交互。我想要一个 dart 客户端,以便我可以让我的 flutter 应用程序与服务器交互。虽然花了很多功夫,但我最终还是弄清楚了如何在 dart 中获取自动生成的代码。我开始尝试使用“快速入门指南”,但没有取得任何进展。找到这些东西后我最终能够得到它们: 弄清楚如何从中实际获取可调用的协议:

https://gayan-justo.medium.com/working-with-grpc-with-flutter-on-windows-17493528e6a2

弄清楚如何从“编译协议缓冲区”部分中实际获取自动生成的文件:

https://protobuf.dev/getting-started/darttutorial/

我现在的问题是我似乎无法弄清楚如何为客户端使用自动生成的类。输出是4个文件:

.pb.dart .pbenum.dart .pbjson.dart .pbserver.dart

在我可以在网上找到的所有示例中,每个人似乎都调用自动生成的“客户端”类。我的自动生成的文件中没有任何“客户端”代码。我拥有的最接近的东西是一个 Api 类,它将 RpcClient (一个抽象类)放入其构造函数中。我想也许我可以使用 grpc 包中的 Client 类,但它不是从 RpcClient 继承的,并且不起作用。

class GpioApi { $pb.RpcClient _client; GpioApi(this._client); $async.Future<TimedOnResponse> timedOn($pb.ClientContext? ctx, TimedOnRequest request) => _client.invoke<TimedOnResponse>(ctx, 'Gpio', 'TimedOn', request, TimedOnResponse()) ; $async.Future<TimedOffResponse> timedOff($pb.ClientContext? ctx, TimedOffRequest request) => _client.invoke<TimedOffResponse>(ctx, 'Gpio', 'TimedOff', request, TimedOffResponse()) ; }

我的预感是,我必须告诉 protoc 为客户端而不是服务器进行编译(您可以通过更新 .csproj 中的标签在 C# 中执行此操作,但我在 flutter/dart 和我所有的 google 搜索中找不到等效项继续给我这些例子,其中只有带有客户端类的自动生成的代码。这是我可以在 .proto 中指定的内容吗?有人能给我指出正确的方向吗?

这是我的.proto:

syntax = "proto3"; package gpio; service Gpio { rpc TimedOn (TimedOnRequest) returns (TimedOnResponse); rpc TimedOff (TimedOffRequest) returns (TimedOffResponse); } message TimedOnRequest { int32 pin = 1; double seconds = 2; } message TimedOnResponse { bool success = 1; string message = 2; } message TimedOffRequest { int32 pin = 1; } message TimedOffResponse { bool success = 1; string message = 2; }


flutter dart grpc protoc
1个回答
0
投票

协议-I=$SRC_DIR --dart_out=$DST_DIR $SRC_DIR/addressbook.proto

我必须这样修改它:

protoc -I=$SRC_DIR --dart_out=grpc:$DST_DIR $SRC_DIR/addressbook.proto

© www.soinside.com 2019 - 2024. All rights reserved.