Flutter震动动画效果插件shake_animation_widget的使用

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

Flutter震动动画效果插件shake_animation_widget的使用

1. 抖动效果

/// 构建抖动效果
ShakeAnimationWidget buildShakeAnimationWidget() {
  return ShakeAnimationWidget(
    // 抖动控制器
    shakeAnimationController: _shakeAnimationController,
    // 微旋转的抖动
    shakeAnimationType: ShakeAnimationType.SkewShake,
    // 设置不开启抖动
    isForward: false,
    // 默认为 0 无限执行
    shakeCount: 0,
    // 抖动的幅度 取值范围为[0,1]
    shakeRange: 0.2,
    // 执行抖动动画的子Widget
    child: RaisedButton(
      child: Text(
        '测试',
        style: TextStyle(color: Colors.white),
      ),
      onPressed: () {
        /// 判断抖动动画是否正在执行
        if (_shakeAnimationController.animationRunging) {
          /// 停止抖动动画
          _shakeAnimationController.stop();
        } else {
          /// 开启抖动动画
          /// 参数shakeCount 用来配置抖动次数
          /// 通过 controller start 方法默认为 1
          _shakeAnimationController.start(shakeCount: 1);
        }
      },
    ),
  );
}

2. 抖动的文本

buildTextAnimationWidget() {
  return ShakeTextAnimationWidget(
    // 需要设置抖动效果的文本
    animationString: "这里是文字的抖动",
    space: 1.0,
    // 字符间距
    runSpace: 10,
    // 行间距
    // 文字的样式
    textStyle: const TextStyle(
      /// 文字的大小
      fontSize: 25,
    ),
    // 抖动次数
    shakeCount: 0,
  );
}

3. 防开源中国自定义底部菜单

BottomRoundFlowMenu(
  // 图标使用的背景
  defaultBackgroundColor: Colors.white,
  // 菜单所有的图标
  iconList: iconList,
  // 对应菜单项点击事件回调
  clickCallBack: (int index) {
    print("点击了 $index");
  },
)

4. 动画按钮

AnimatedStatusController animatedStatusController = new AnimatedStatusController();

// 切换样式的动画按钮
Widget buildAnimatedStatusButton() {
  return AnimatedStatusButton(
    // 控制器
    animatedStatusController: animatedStatusController,
    // 显示按钮的宽度
    width: 220.0,
    // 显示按钮的高度
    height: 40,
    // 动画交互时间
    buttonText: '提交',
    // 背景颜色
    backgroundNormalColor: Colors.white,
    // 边框颜色
    borderNormalColor: Colors.deepOrange,
    // 文字颜色
    textNormalCcolor: Colors.deepOrange,
    // 点击回调
    clickCallback: () async {
      print("点击事件回调");
      // 模拟耗时操作
      await Future.delayed(Duration(milliseconds: 4000));
      // 返回false 会一直在转圈圈
      // 返回true 会回到到默认显示样式
      return Future.value(false);
    },
  );
}

5. 垂直向上弹出菜单

RoteFlowButtonMenu(
  // 图标使用的背景
  defaultBackgroundColor: Colors.deepOrangeAccent,
  // 菜单所有的图标
  iconList: iconList,
  // 对应菜单项点击事件回调
  clickCallBack: (int index) {
    print("点击了 $index");
  },
)

6. 页面悬浮可托动按钮

class _Exam223HomePageState extends State<Exam223HomePage> {
  // Stack使用的Key
  final GlobalKey _parentKey = GlobalKey();

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      body: SizedBox(
        width: double.infinity,
        height: double.infinity,
        child: Stack(
          key: _parentKey,
          children: [
            Container(color: Colors.blueGrey),

            DraggableFloatingActionButton(
              child: Container(
                width: 60,
                height: 60,
                decoration: const ShapeDecoration(
                  shape: CircleBorder(),
                  color: Colors.white,
                ),
                child: const Icon(Icons.add),
              ),
              initialOffset: const Offset(120, 70),
              parentKey: _parentKey,
              onPressed: () {},
            ),
          ],
        ),
      ),
    );
  }
}

更多关于Flutter震动动画效果插件shake_animation_widget的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter震动动画效果插件shake_animation_widget的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是如何在Flutter项目中使用shake_animation_widget插件来实现震动动画效果的示例代码。

首先,你需要在你的pubspec.yaml文件中添加shake_animation_widget依赖:

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

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

安装完成后,你可以在你的Flutter项目中导入并使用ShakeAnimationWidget。下面是一个简单的示例代码,展示了如何使用这个插件:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: ShakeAnimationExample(),
    );
  }
}

class ShakeAnimationExample extends StatefulWidget {
  @override
  _ShakeAnimationExampleState createState() => _ShakeAnimationExampleState();
}

class _ShakeAnimationExampleState extends State<ShakeAnimationExample> {
  bool isShaking = false;

  void triggerShake() {
    setState(() {
      isShaking = true;
      // 延迟一段时间后停止震动,模拟触发后震动一次的效果
      Future.delayed(Duration(seconds: 1), () {
        setState(() {
          isShaking = false;
        });
      });
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Shake Animation Example'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            ShakeAnimationWidget(
              shakeAnimationType: ShakeAnimationType.BOUNCE, // 震动类型
              animationDuration: 1000, // 震动持续时间(毫秒)
              shakeOffset: 20.0, // 震动偏移量
              child: Container(
                width: 100,
                height: 100,
                color: Colors.blue,
                child: Center(
                  child: Text(
                    'Shake Me',
                    style: TextStyle(color: Colors.white, fontSize: 20),
                  ),
                ),
              ),
              shouldShake: isShaking, // 控制是否震动
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: triggerShake,
              child: Text('Trigger Shake'),
            ),
          ],
        ),
      ),
    );
  }
}

在这个示例中,我们创建了一个简单的Flutter应用,其中包含一个可以震动的Container和一个按钮。点击按钮后,Container会执行震动动画。

  • ShakeAnimationWidget 是实现震动效果的组件。
  • shakeAnimationType 定义了震动的类型(例如,弹跳、摇摆等)。
  • animationDuration 定义了震动动画的持续时间。
  • shakeOffset 定义了震动的偏移量。
  • shouldShake 是一个布尔值,用于控制是否执行震动动画。

当你点击“Trigger Shake”按钮时,isShaking 状态会被设置为 true,触发震动动画,并在1秒后自动停止震动。

希望这个示例能帮助你理解如何在Flutter项目中使用shake_animation_widget插件来实现震动动画效果。

回到顶部