生成的.pbgrpc.dart文件报$pb未定义错误,求排查解决方法
Dart gRPC生成代码中$pb未定义错误的解决方案
问题描述
使用Dart 3.0.5版本与protoc 23.3版本,生成的.pbgrpc.dart文件包含如下代码:
@$pb.GrpcServiceName('') class Client extends $grpc.Client {}
运行时出现错误提示:Undefined name '$pb' used as an annotation. Try defining the name or importing it from another library.
解决方案
- 升级protoc-gen-dart插件:旧版本的
protoc-gen-dart可能与protoc 23.3存在兼容性问题,导致生成的代码缺失必要引用。执行以下命令更新插件:dart pub global activate protoc-gen-dart - 检查生成文件的导入关系:
.pbgrpc.dart文件依赖同目录下生成的.pb.dart文件(该文件包含$pb的定义),如果生成的代码中缺失导入,手动添加:import '你的proto文件名.pb.dart'; - 确认proto编译命令格式:编译时必须指定
grpc输出模式,确保同时生成基础protobuf代码和gRPC代码,命令示例:
其中protoc --dart_out=grpc:lib/src/generated -Iprotos protos/你的服务定义.proto--dart_out=grpc:是核心参数,它会将两类代码关联生成。 - 验证pub依赖配置:确保
pubspec.yaml中包含正确的依赖项,执行dart pub get安装依赖:dependencies: grpc: ^3.2.0 protobuf: ^3.1.0 dev_dependencies: build_runner: ^2.4.0
内容的提问来源于stack exchange,提问作者Venki Muthanna
相关产品推荐
相关产品推荐

