Flutter shake插件异常及依赖版本冲突问题求解
问题回顾
在Flutter应用中引入shake 2.2.0插件后,启动时频繁抛出:
MissingPluginException: No implementation found for method setAccelerationSamplingPeriod on channel dev.fluttercommunity.plus/sensors/method
按照建议添加sensors_plus ^4.0.2依赖后,出现版本冲突:
Because shake 2.2.0 depends on sensors_plus ^1.4.1 and no versions of shake match >2.2.0 <3.0.0, shake ^2.2.0 requires sensors_plus ^1.4.1.
So, because dice depends on both shake ^2.2.0 and sensors_plus ^4.0.2, version solving failed.
以下是不同场景下的最优解决方案:
方案1:优先升级shake插件到兼容高版本sensors_plus的版本
查看shake插件的最新版本,若存在3.x及以上版本(已兼容sensors_plus 4.x),直接修改pubspec.yaml中shake的版本约束,例如:
dependencies: shake: ^3.0.0 # 以实际兼容版本为准 sensors_plus: ^4.0.2
执行flutter pub get即可。
优势:遵循官方版本依赖规范,无潜在兼容性风险,是最理想的解决方式。
方案2:降级sensors_plus到shake依赖的版本
如果不需要sensors_plus 4.x的新功能,直接降级到shake要求的版本:
执行命令:
flutter pub add sensors_plus:^1.4.1
优势:操作简单,完全避免版本冲突,无额外风险,适合对sensors_plus版本无特殊需求的场景。
方案3:使用dependency_overrides强制指定sensors_plus版本
仅当必须保留shake 2.2.0且需要sensors_plus 4.x的功能时,才采用此方案。在pubspec.yaml中添加:
dependency_overrides: sensors_plus: ^4.0.2
执行flutter pub get后,务必全面测试shake插件的核心功能(比如摇一摇触发逻辑),确认无API兼容问题。
注意:该方式会强制覆盖依赖版本,可能因shake与高版本sensors_plus的API差异导致隐藏bug,属于临时 workaround,不推荐长期使用。
内容的提问来源于stack exchange,提问作者Anson Savage

