You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Flutter中实现phone shake(手机摇晃)的检测功能?

Flutter 中检测手机摇晃(phone shake)的实现方案

你当前的代码已经完成了摇晃监听的初始化调用,不过完整的可用实现还需要包含依赖引入、事件回调处理、资源释放三个环节,具体实现逻辑如下:

  • 优先使用封装好的第三方包实现,无需手动处理传感器原始数据:
    你当前调用的startListeningShake方法通常来自shake包,完整实现代码如下:
    import 'package:flutter/material.dart';
    import 'package:shake/shake.dart';
    
    class ShakeDemoPage extends StatefulWidget {
      const ShakeDemoPage({super.key});
    
      @override
      State<ShakeDemoPage> createState() => _ShakeDemoPageState();
    }
    
    class _ShakeDemoPageState extends State<ShakeDemoPage> {
      late ShakeDetector shakeDetector;
    
      @override
      void initState() {
        super.initState();
        // 20为摇晃检测阈值,数值越低检测灵敏度越高
        shakeDetector = ShakeDetector.autoStart(
          shakeThresholdGravity: 20,
          onPhoneShake: () {
            // 此处填写摇晃触发后的业务逻辑
            ScaffoldMessenger.of(context).showSnackBar(
              const SnackBar(content: Text('检测到手机摇晃'))
            );
          },
        );
      }
    
      @override
      void dispose() {
        // 页面销毁时停止监听,避免内存泄漏
        shakeDetector.stopListening();
        super.dispose();
      }
    
      @override
      Widget build(BuildContext context) {
        return Scaffold(appBar: AppBar(title: const Text('摇晃检测 demo')));
      }
    }
    
  • 常见注意事项:
    • 你现有代码中将监听初始化逻辑放在了super.initState()之前,建议调整顺序,先执行父类初始化再配置自定义监听,避免出现潜在的状态异常。
    • 普通使用场景下阈值设置为2.7~5即可满足需求,你当前设置的20属于高阈值,需要用户大幅度摇晃才能触发,如果出现检测不灵敏的情况可以适当调低数值。
    • 如果需要自定义摇晃检测逻辑,也可以直接引入sensors_plus包监听加速度传感器的原始三轴数据,计算加速度变化量超过阈值时触发摇晃事件即可。

内容的提问来源于stack exchange,提问作者Thant Zin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 22:24:03