sensors_plus 6.1.1版本iOS端无法监听UserAccelerometerEvent事件且无错误抛出求助
兄弟我之前踩过iOS端sensors_plus传感器监听没反应的坑,完全懂你这种“没报错但就是不干活”的憋屈!给你整理几个必查的点,应该能解决问题:
先补全iOS权限配置,这是最容易踩的坑
iOS对运动传感器有严格的权限管控,如果你的Info.plist里没加NSMotionUsageDescription,系统会直接静默拒绝App访问传感器,而且不会抛出任何错误。你得打开项目的ios/Runner/Info.plist,添加以下配置:<key>NSMotionUsageDescription</key> <string>需要访问运动数据以追踪您的步数</string>描述文案可以根据你的App功能修改,关键是必须加这个键值对。
检查你的订阅代码是否规范
看你贴的代码好像没写完,给你补全正确的订阅逻辑,还要确保加上错误回调(说不定之前错误被吞了),另外别忘了解散订阅:class AppStepsTracker with ChangeNotifier { StreamSubscription<UserAccelerometerEvent>? _streamSubscriptions; int _steps = 0; String? _error; int get steps => _steps; String? get error => _error; void initiate() { // 先取消旧订阅,避免内存泄漏 _streamSubscriptions?.cancel(); // 正式订阅事件,同时加上错误监听 _streamSubscriptions = userAccelerometerEvents.listen( (UserAccelerometerEvent event) { // 这里写你的步数计算逻辑,比如根据x/y/z轴数据更新_steps // 举个简单的触发示例: if (event.z.abs() > 1.5) { _steps++; notifyListeners(); } }, onError: (err) { _error = err.toString(); notifyListeners(); }, cancelOnError: false, ); } @override void dispose() { _streamSubscriptions?.cancel(); super.dispose(); } }重点是要确保
onError回调加上,这样哪怕有隐藏错误也能捕捉到,不会完全摸瞎。检查设备的系统权限开关
有时候用户可能不小心在系统设置里关掉了App的运动权限,你可以让测试的用户去「设置->隐私与安全性->运动与健身」里,确认你的App是被允许访问的。这个开关关了的话,传感器事件也完全不会触发。务必用真机测试,别依赖模拟器
iOS模拟器的传感器模拟非常拉胯,很多时候不会真实触发UserAccelerometerEvent事件,一定要拿真实的iOS设备来测试,这也是很多人忽略的点。清理缓存重新集成依赖
可以试试删除iOS目录下的Podfile.lock和Pods文件夹,然后执行flutter clean,再重新运行flutter pub get和cd ios && pod install,有时候依赖缓存冲突也会导致这种诡异的问题。
备注:内容来源于stack exchange,提问作者CCP

