Flutter滚动动画插件flutter_animate_on_scroll的使用

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

Flutter滚动动画插件flutter_animate_on_scroll的使用

flutter_animate_on_scroll 是一个强大的Flutter插件,它允许你通过简单的配置来创建滚动时触发的动画效果。这个插件不仅提供了默认的动画效果,还支持自定义动画,帮助开发者更快速、高效地实现复杂的动画效果。

Features

  • Stunning default animation: 提供了多种预设的动画效果,如淡入淡出(Fade)、滑动(Slide)、旋转(Rotate)和缩放(Zoom)等。
  • Customizable animation: 支持自定义动画,允许开发者根据需求调整动画的延迟、曲线、持续时间等参数。

Getting Started

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

dependencies:
  flutter_animate_on_scroll: ^latest_version

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

Usage

基本用法

以下是一个基本的示例,展示了如何使用 flutter_animate_on_scroll 创建滚动动画:

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

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

  @override
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: SingleChildScrollView(
        child: Padding(
          padding: const EdgeInsets.symmetric(horizontal: 20).copyWith(top: 80),
          child: Column(
            children: [
              FadeIn(
                config: BaseAnimationConfig(
                  child: const Text('Fade In'),
                ),
              ),
              const SizedBox(height: 20),
              FadeInDown(
                config: BaseAnimationConfig(
                  delay: 200.ms,
                  child: const Text('Fade In Down'),
                ),
              ),
              const SizedBox(height: 20),
              FadeInUp(
                config: BaseAnimationConfig(
                  delay: 400.ms,
                  child: const Text('Fade In Up'),
                ),
              ),
              const SizedBox(height: 20),
              FadeInLeft(
                config: BaseAnimationConfig(
                  delay: 600.ms,
                  child: const Text('Fade In Left'),
                ),
              ),
              const SizedBox(height: 20),
              FadeInRight(
                config: BaseAnimationConfig(
                  delay: 200.ms,
                  child: const Text('Fade In Right'),
                ),
              ),
              const SizedBox(height: 20),
              const Divider(),
              FadeOut(
                config: BaseAnimationConfig(
                  delay: 400.ms,
                  child: const Text('Fade Out'),
                ),
              ),
              const SizedBox(height: 20),
              FadeOutUp(
                config: BaseAnimationConfig(
                  delay: 600.ms,
                  child: const Text('Fade Out Up'),
                ),
              ),
              const SizedBox(height: 20),
              FadeOutDown(
                config: BaseAnimationConfig(
                  delay: 800.ms,
                  child: const Text('Fade Out Down'),
                ),
              ),
              const SizedBox(height: 20),
              FadeOutLeft(
                config: BaseAnimationConfig(
                  delay: 400.ms,
                  child: const Text('Fade Out Left'),
                ),
              ),
              const SizedBox(height: 20),
              FadeOutRight(
                config: BaseAnimationConfig(
                  delay: 600.ms,
                  child: const Text('Fade Out Right'),
                ),
              ),
              const SizedBox(height: 220),
            ],
          ),
        ),
      ),
    );
  }
}

自定义动画

如果你需要更复杂的动画效果,可以使用 CustomAnimated 组件,并结合 AnimationControllerTween 来实现自定义动画:

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

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

  @override
  State<CustomAnimationExample> createState() => _CustomAnimationExampleState();
}

class _CustomAnimationExampleState extends State<CustomAnimationExample>
    with SingleTickerProviderStateMixin {
  late AnimationController _animationController;
  late Animation<double> _animation;

  @override
  void initState() {
    _animationController = AnimationController(vsync: this, duration: 600.ms);
    _animation = Tween<double>(begin: 0.3, end: 1.0).animate(
      CurvedAnimation(parent: _animationController, curve: Curves.bounceInOut),
    );
    super.initState();
  }

  @override
  void dispose() {
    _animationController.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: SingleChildScrollView(
        child: Padding(
          padding: const EdgeInsets.symmetric(horizontal: 20).copyWith(top: 80),
          child: Column(
            children: [
              CustomAnimated(
                animationController: _animationController,
                animation: _animation,
                child: ScaleTransition(
                  scale: _animation,
                  child: const Text('Custom Animation'),
                ),
              ),
              const SizedBox(height: 20),
              const Divider(),
              const SizedBox(height: 220),
            ],
          ),
        ),
      ),
    );
  }
}

文本动画

flutter_animate_on_scroll 还提供了文本动画的支持,例如打字机效果和波浪效果:

TextTyperAnimation(
  config: BaseTextAnimationConfig(
    repeat: true,
    duration: 4.seconds,
    text: 'Exploring the world of Flutter On Scroll Animation without fade effect',
    curves: Curves.easeInOut,
    textAlign: TextAlign.center,
  ),
  fade: false,
),

TextTyperWavyAnimation(
  config: BaseTextAnimationConfig(
    repeat: true,
    duration: 4.seconds,
    text: 'Exploring the world of Flutter On Scroll Animation with wavy effect',
    curves: Curves.easeInOut,
  ),
),

Default Animations

flutter_animate_on_scroll 提供了多种默认动画效果,包括:

  • Fade Animation: 淡入淡出效果
  • Slide Animation: 滑动效果
  • Rotate Animation: 旋转效果
  • Zoom Animation: 缩放效果
  • Text Animation: 文本动画效果

每个动画都有对应的组件可以直接使用,例如 FadeInSlideInDownRotateInUpLeft 等。

Video Demo

你可以通过 视频演示 查看插件的实际效果。

希望这些内容能帮助你更好地理解和使用 flutter_animate_on_scroll 插件!如果有任何问题或需要进一步的帮助,请随时提问。


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

1 回复

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


当然,以下是一个关于如何在Flutter项目中使用flutter_animate_on_scroll插件来实现滚动动画的示例代码。这个插件允许你根据滚动位置触发动画效果。

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

dependencies:
  flutter:
    sdk: flutter
  flutter_animate_on_scroll: ^3.0.0  # 请检查最新版本号

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

接下来,在你的Flutter应用中,你可以按照以下步骤使用flutter_animate_on_scroll插件:

  1. 导入必要的包
import 'package:flutter/material.dart';
import 'package:flutter_animate_on_scroll/flutter_animate_on_scroll.dart';
  1. 创建滚动视图和动画
void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Flutter Animate On Scroll Example'),
        ),
        body: SingleChildScrollView(
          child: Column(
            children: <Widget>[
              // 占位内容,用于滚动
              SizedBox(height: 200),
              
              // 触发动画的动画目标组件
              AnimatedOnScrollWidget(
                // 定义动画配置
                animation: AnimationConfiguration.staggeredList(
                  position: 200, // 动画开始时的滚动位置
                  duration: Duration(milliseconds: 500), // 动画持续时间
                  child: SlideAnimation(
                    // 这里定义要动画的组件
                    slides: 1,
                    child: Container(
                      width: double.infinity,
                      height: 100,
                      color: Colors.blue,
                      child: Center(
                        child: Text(
                          'Animated Widget',
                          style: TextStyle(color: Colors.white),
                        ),
                      ),
                    ),
                  ),
                ),
              ),
              
              // 更多占位内容
              SizedBox(height: 800),
            ],
          ),
        ),
      ),
    );
  }
}

在这个示例中:

  • 我们使用了SingleChildScrollView来创建一个可滚动的视图。
  • AnimatedOnScrollWidgetflutter_animate_on_scroll插件提供的一个组件,用于根据滚动位置触发动画。
  • AnimationConfiguration.staggeredList定义了一个动画配置,包括动画开始时的滚动位置(position)和动画持续时间(duration)。
  • SlideAnimation是一个具体的动画效果,这里我们让容器在滚动到指定位置时滑动进入视图。

你可以根据需要调整动画配置和效果,flutter_animate_on_scroll提供了多种动画效果,如FadeAnimation, OpacityAnimation, ScaleAnimation等,你可以根据具体需求选择合适的动画效果。

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

回到顶部