Flutter摇晃触发事件插件flutter_shakemywidget的使用

发布于 1周前 作者 sinazl 来自 Flutter

Flutter摇晃触发事件插件flutter_shakemywidget的使用

flutter_shakemywidget 插件允许你通过摇晃设备来触发任何小部件的动画。你可以使用任意的小部件进行摇晃效果。

摇晃动画演示

平台支持

Android iOS MacOS Web Linux Windows
✔️ ✔️ ✔️ ✔️ ✔️ ✔️

使用此插件作为库

添加依赖

pubspec.yaml 文件中添加以下依赖:

dependencies:
  flutter_shakemywidget: ^1.0.5+1

运行以下命令以安装依赖:

flutter pub get

导入库

在 Dart 文件中导入插件:

import 'package:flutter_shakemywidget/flutter_shakemywidget.dart';

示例

以下是一个完整的示例代码,展示了如何使用 flutter_shakemywidget 插件实现摇晃动画。

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

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Shake me Example',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: const MyHomePage(title: 'Shake me Example'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({super.key, required this.title});

  final String title;

  [@override](/user/override)
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  final shakeKey = GlobalKey<ShakeWidgetState>();
  bool isVisible = false;

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
        child: Container(
          width: 400,
          height: 400,
          color: Colors.red,
          child: Center(
            child: Column(
              crossAxisAlignment: CrossAxisAlignment.center,
              mainAxisAlignment: MainAxisAlignment.center,
              children: [
                InkWell(
                  child: Text(
                    "Shake Me",
                    style: TextStyle(color: Colors.black),
                  ),
                  onTap: () {
                    // 摇晃小部件
                    shakeKey.currentState?.shake();
                  },
                ),
                ShakeMe(
                  // 传递 GlobalKey
                  key: shakeKey,
                  // 配置动画参数
                  shakeCount: 3,
                  shakeOffset: 10,
                  shakeDuration: Duration(milliseconds: 500),
                  // 添加将要动画的小部件
                  child: Text(
                    'Invalid credentials',
                    textAlign: TextAlign.center,
                    style: TextStyle(
                        color: Colors.white,
                        fontSize: 20,
                        fontWeight: FontWeight.bold),
                  ),
                )
              ],
            ),
          ),
        ),
      ),
    );
  }
}

更多关于Flutter摇晃触发事件插件flutter_shakemywidget的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter摇晃触发事件插件flutter_shakemywidget的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,下面是一个关于如何在Flutter中使用flutter_shakemywidget插件来监听设备摇晃事件的代码示例。

首先,确保你已经在pubspec.yaml文件中添加了flutter_shakemywidget依赖:

dependencies:
  flutter:
    sdk: flutter
  flutter_shakemywidget: ^x.y.z  # 请替换为最新的版本号

然后,运行flutter pub get来安装依赖。

接下来,你可以在Flutter应用中实现摇晃触发事件的功能。以下是一个完整的示例代码:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Shake Event Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: ShakeEventDemo(),
    );
  }
}

class ShakeEventDemo extends StatefulWidget {
  @override
  _ShakeEventDemoState createState() => _ShakeEventDemoState();
}

class _ShakeEventDemoState extends State<ShakeEventDemo> with WidgetsBindingObserver {
  ShakeDetector _shakeDetector;

  @override
  void initState() {
    super.initState();
    WidgetsBinding.instance!.addObserver(this);
    _shakeDetector = ShakeDetector(
      shakeDurationMillis: 500, // 可选:摇晃持续时间阈值,单位为毫秒
      sensitivity: 25.0,       // 可选:摇晃灵敏度
    )..startListening((StartStopListener startStopListener) async {
      // 摇晃开始时的回调
      print('Device shook!');
      // 显示Snackbar作为示例
      ScaffoldMessenger.of(context).showSnackBar(
        SnackBar(
          content: Text('Device shook!'),
          duration: Duration(seconds: 2),
        ),
      );
    });
  }

  @override
  void dispose() {
    // 停止监听摇晃事件
    _shakeDetector?.stopListening();
    WidgetsBinding.instance!.removeObserver(this);
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Shake Event Demo'),
      ),
      body: Center(
        child: Text(
          'Shake your device!',
          style: TextStyle(fontSize: 24),
        ),
      ),
    );
  }
}

解释

  1. 依赖添加:在pubspec.yaml中添加flutter_shakemywidget依赖。
  2. 初始化:在_ShakeEventDemoStateinitState方法中,初始化ShakeDetector实例,并设置摇晃的持续时间阈值和灵敏度。然后调用startListening方法来开始监听摇晃事件。
  3. 摇晃事件处理:在startListening方法的回调中,当设备被摇晃时,打印一条消息并显示一个Snackbar。
  4. 资源释放:在dispose方法中,调用stopListening方法来停止监听摇晃事件,并移除WidgetsBinding观察者。

这个示例展示了如何使用flutter_shakemywidget插件来监听设备的摇晃事件,并在摇晃时执行相应的操作。你可以根据自己的需求进一步定制和扩展这个示例。

回到顶部