执行build_runner命令失败:BuildForInputLogger缺失成员实现
问题详情
执行命令:fvm flutter pub run build_runner build --delete-conflicting-outputs
出现错误:
构建build_runner:build_runner失败:
../../../.pub-cache/hosted/pub.dev/build_runner_core-6.1.12/lib/src/logging/build_for_input_logger.dart:13:7: 错误:非抽象类'BuildForInputLogger'缺少以下成员的实现:
- Logger.onLevelChanged
请尝试以下操作之一:- 提供实现,
- 从父类或混入继承实现,
- 将类标记为抽象类,
- 提供'noSuchMethod'实现。
class BuildForInputLogger implements Logger {
^^^^^^^^^^^^^^^^^^^
../../../.pub-cache/hosted/pub.dev/logging-1.2.0/lib/src/logger.dart:162:22: 上下文:'Logger.onLevelChanged'定义在此处。
Stream<Level?> get onLevelChanged {
^^^^^^^^^^^^^^
pub 执行结束,退出码1
当前环境:
- Flutter SDK版本:3.7.8
- pubspec.yaml依赖:
mobx: ^2.0.1 flutter_mobx: ^2.0.0 provider: ^5.0.0
- 开发依赖:
dev_dependencies: flutter_test: sdk: flutter mobx_codegen: ^2.0.1+3 build_runner: ^1.12.2
原因分析
logging包1.2.0版本新增了onLevelChanged成员,但你使用的旧版build_runner(1.12.2)依赖的build_runner_core未实现这个新成员,导致依赖冲突引发编译错误。
解决方案
方案一:升级build_runner到兼容版本
修改pubspec.yaml中的开发依赖,将build_runner版本升级到适配Flutter 3.7.8的版本(比如^2.1.10):
dev_dependencies: flutter_test: sdk: flutter mobx_codegen: ^2.0.1+3 build_runner: ^2.1.10
执行以下命令更新依赖:fvm flutter pub get
之后重新运行build_runner命令即可。
方案二:锁定logging包到旧版本
如果不需要升级build_runner,可在pubspec.yaml中添加依赖覆盖,强制使用无onLevelChanged成员的logging 1.1.1版本:
dependency_overrides: logging: ^1.1.1
执行fvm flutter pub get更新依赖后,重新运行build_runner命令即可解决问题。
内容的提问来源于stack exchange,提问作者Shoeb Sultan

