如何在 Flutter 中检测 phone 抖动?

How to detect a phone shake in Flutter?

我试图在我的 Flutter 应用程序中获取 运行 ShakeDetector。我在这里有一个示例应用程序。有人可以帮我解决这个问题吗? 下面的代码示例来自 shake.dart github 示例。我不明白为什么它不起作用。

import 'package:flutter/material.dart';
import 'package:shake/shake.dart';

void main() {
  runApp(DemoPage());
}

class DemoPage extends StatefulWidget {
  @override
  _DemoPageState createState() => _DemoPageState();
}

var phoneShakes;

class _DemoPageState extends State<DemoPage> {
  @override
  void initState() {
    super.initState();
    ShakeDetector detector = ShakeDetector.autoStart(onPhoneShake: () {
      print('shaking');
    });
    // To close: detector.stopListening();
    // ShakeDetector.waitForStart() waits for user to call detector.startListening();

    phoneShakes = detector.mShakeCount;
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: AppBar(
        title: Text(phoneShakes.toString()),
      ),
    );
  }
}

这是因为没有调用setState。试试这个代码:

class _DemoPageState extends State<DemoPage> {
  late ShakeDetector _detector;

  @override
  void initState() {
    super.initState();
    _detector = ShakeDetector.autoStart(onPhoneShake: () {
      setState(() {}); // Call setState every time phone shakes.
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: Text('Count: ${_detector.mShakeCount}'),
      ),
    );
  }
}