在 lib 目录之外导入和使用 protobufs - dart

Import and use protobufs outside of lib directory - dart

我正在尝试构建一个 Web 应用程序,前端使用 Flutter,后端使用 gRPC 作为通信协议。为了避免在 2 个不同的目录中使用相同的 protobuf,我重构了 protobuf 并将它们编译到客户端和服务器文件夹之外的第三个目录(都在同一个 repo 中)。现在我无法从客户端代码访问已编译的 dart protobuf。这是我的文件夹结构:

.
|-- client/
  |-- pubspec.yaml
|-- protos/
  |-- dart_protos/
    |-- .dart_tool/
    |-- .packages
    |-- cards.pb.dart
    |-- cards.pbenum.dart
    |-- cards.pbjson.dart
    |-- cards.pbserver.dart
    |-- pubspec.lock
    |-- pubscpec.yaml
  |-- go_protos/
  |-- cards.proto

|-- server/

这是我在 client/pubspec.yaml

中定义依赖项的方式
dependencies:
  flutter:
    sdk: flutter
  recase: ^4.0.0
  search_choices: ^2.0.7
  tcb_protos:
    path: ../protos/dart_protos

我的protos/dart_protos/pubspec.yaml:

name: tcb_protos
environment:
  sdk: ">=2.0.0-dev.68.0 <3.0.0"
dependencies:
  protobuf: ^1.1.4
  protoc_plugin: ^19.3.1

以及我如何导入 protobuf:

import 'package:tcb_protos/cards.pb.dart';

所以我 运行 遇到了几个问题:

  1. 我在导入时得到 Target of URI hasn't been generated: 'package:tcb_protos/cards.pb.dart'.
  2. 我无法使用基于导入的 protobuf,并且 VSCode 的智能感知在包上不起作用(我假设这是因为包定义或导入错误)

如何在我的 Flutter 小部件中使用 protobuf?

您需要将原型 .pb.dart 文件放在 lib/ 文件夹中。

我这里做了个小例子:https://github.com/sigurdm/shared_proto_example

如果你想在不同的包中有相互引用的原型,目前不支持:https://github.com/google/protobuf.dart/issues/295