Flutter悬浮动画效果插件hover_float_animation的使用

Flutter悬浮动画效果插件hover_float_animation的使用

Captura

banner

Animation_transition

创建具有动画效果的浮动小部件,同时可以决定浮动小部件在父容器中的位置。

要使用它,请阅读包页面上的手册。

文档

手动包

创建具有输入动画效果的浮动小部件,并且可以决定浮动小部件在父容器中的位置。

要使用它,请阅读包页面上的手册。

示例代码

example/lib/main.dart

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

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

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

  [@override](/user/override)
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('插件示例应用'),
        ),
        body: const HomePage(),
      ),
    );
  }
}

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

  Widget setPosition({
    required HoverPositionVertical vertical,
    required HoverPositionHorizontal horizontal,
  }) {
    return Row(
      mainAxisAlignment: MainAxisAlignment.spaceEvenly,
      children: List.generate(
        3,
        (index) => HoverFloatController.start(
          hover: HoverAnimationData(
            // 可以是右侧、左侧、中心
            positionHorizontal: horizontal,
            // 可以是上方、下方、中心
            positionVertical: vertical,
            // 进入时的过渡效果
            transition: TransitionType.FadeInLeftBig,
            // 过渡持续时间
            animationDuration: const Duration(milliseconds: 300),
            // 浮动小部件的大小
            sizeFloat: const Size(180, 270),
            // 默认启用动画
            animation: true,
            // 鼠标离开时关闭悬浮动画
            autoClose: true,
            // 相对定位
            relativePosition: true,
            // 悬浮动画的控制令牌,默认为0
            token: 0,
            // 鼠标进入悬浮小部件时触发
            onEnterMouse: (token) {
              print('进入悬浮区域');
            },
            // 鼠标离开悬浮小部件时触发
            onExitMouse: (token) {
              print('离开悬浮区域');
            },
            // 绘制父小部件时触发
            onStart: (token) {
              print('创建悬浮小部件,这是令牌 $token');
            },
            // 悬浮小部件
            hoverChild: Container(
              alignment: Alignment.center,
              color: Colors.amberAccent,
              child: const Text('悬浮内容'),
            ),
            // 父小部件
            child: Container(
              alignment: Alignment.center,
              color: Colors.amber,
              width: 150,
              height: 250,
              child: const Text('带动画的悬浮'),
            ),
          ),
        ),
      ),
    );
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return SingleChildScrollView(
      child: Column(
        mainAxisAlignment: MainAxisAlignment.start,
        crossAxisAlignment: CrossAxisAlignment.start,
        children: [
          Container(
            width: double.infinity,
            margin: const EdgeInsets.symmetric(vertical: 20),
            padding: const EdgeInsets.all(10),
            color: Colors.amber,
            child: const Text(
              '中心位置',
              style: TextStyle(
                color: Colors.black,
                fontWeight: FontWeight.bold,
                fontSize: 18,
              ),
            ),
          ),
          setPosition(
            horizontal: HoverPositionHorizontal.center,
            vertical: HoverPositionVertical.center,
          ),
          Container(
            width: double.infinity,
            margin: const EdgeInsets.symmetric(vertical: 20),
            padding: const EdgeInsets.all(10),
            color: Colors.amber,
            child: const Text(
              '左侧位置',
              style: TextStyle(
                color: Colors.black,
                fontWeight: FontWeight.bold,
                fontSize: 18,
              ),
            ),
          ),
          setPosition(
            horizontal: HoverPositionHorizontal.left,
            vertical: HoverPositionVertical.center,
          ),
          Container(
            width: double.infinity,
            margin: const EdgeInsets.symmetric(vertical: 20),
            padding: const EdgeInsets.all(10),
            color: Colors.amber,
            child: const Text(
              '右侧位置',
              style: TextStyle(
                color: Colors.black,
                fontWeight: FontWeight.bold,
                fontSize: 18,
              ),
            ),
          ),
          setPosition(
            horizontal: HoverPositionHorizontal.right,
            vertical: HoverPositionVertical.center,
          ),
          Container(
            width: double.infinity,
            margin: const EdgeInsets.symmetric(vertical: 20),
            padding: const EdgeInsets.all(10),
            color: Colors.amber,
            child: const Text(
              '底部位置',
              style: TextStyle(
                color: Colors.black,
                fontWeight: FontWeight.bold,
                fontSize: 18,
              ),
            ),
          ),
          setPosition(
            horizontal: HoverPositionHorizontal.center,
            vertical: HoverPositionVertical.bottom,
          ),
          Container(
            width: double.infinity,
            margin: const EdgeInsets.symmetric(vertical: 20),
            padding: const EdgeInsets.all(10),
            color: Colors.amber,
            child: const Text(
              '顶部位置',
              style: TextStyle(
                color: Colors.black,
                fontWeight: FontWeight.bold,
                fontSize: 18,
              ),
            ),
          ),
          setPosition(
            horizontal: HoverPositionHorizontal.center,
            vertical: HoverPositionVertical.top,
          ),
        ],
      ),
    );
  }
}

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

1 回复

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


hover_float_animation 是一个用于在 Flutter 中创建悬浮动画效果的插件。它允许你在用户将鼠标悬停在某个部件上时,触发自定义的动画效果。以下是如何使用 hover_float_animation 插件的详细步骤:

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  hover_float_animation: ^0.1.0  # 请使用最新版本

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

2. 导入插件

在你的 Dart 文件中导入 hover_float_animation 插件:

import 'package:hover_float_animation/hover_float_animation.dart';

3. 使用 HoverFloatAnimation 部件

HoverFloatAnimation 是一个可以包裹任何 Flutter 部件的部件,当用户将鼠标悬停在该部件上时,它会触发悬浮动画。

以下是一个简单的示例,展示了如何使用 HoverFloatAnimation

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Hover Float Animation Example'),
        ),
        body: Center(
          child: HoverFloatAnimation(
            child: Container(
              width: 200,
              height: 200,
              color: Colors.blue,
              child: Center(
                child: Text(
                  'Hover Me!',
                  style: TextStyle(color: Colors.white, fontSize: 24),
                ),
              ),
            ),
          ),
        ),
      ),
    );
  }
}

4. 自定义动画

HoverFloatAnimation 提供了一些可选的参数,允许你自定义悬浮动画的行为。以下是一些常用的参数:

  • scale: 悬浮时的缩放比例(默认值为 1.1)。
  • duration: 动画的持续时间(默认值为 Duration(milliseconds: 200))。
  • curve: 动画的曲线(默认值为 Curves.easeInOut)。

例如,你可以这样自定义动画:

HoverFloatAnimation(
  scale: 1.2,
  duration: Duration(milliseconds: 300),
  curve: Curves.easeOut,
  child: Container(
    width: 200,
    height: 200,
    color: Colors.green,
    child: Center(
      child: Text(
        'Custom Hover!',
        style: TextStyle(color: Colors.white, fontSize: 24),
      ),
    ),
  ),
)

5. 处理悬浮事件

你还可以通过 onHoveronExit 回调来处理悬浮事件的开始和结束:

HoverFloatAnimation(
  onHover: () {
    print('Hover started');
  },
  onExit: () {
    print('Hover ended');
  },
  child: Container(
    width: 200,
    height: 200,
    color: Colors.red,
    child: Center(
      child: Text(
        'Callback Hover!',
        style: TextStyle(color: Colors.white, fontSize: 24),
      ),
    ),
  ),
)
回到顶部