Flutter自动动画插件auto_animated的使用

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

Flutter自动动画插件auto_animated的使用

简介

auto_animated 是一个用于Flutter应用中轻松实现滚动时自动动画效果的插件。它可以让你在两分钟内创建出带有滚动动画效果的小部件,非常简单易用。

展示

ListView GridView Sliver
ListView GridView Sliver

入门指南

在你的Flutter项目中添加依赖:

dependencies:
  auto_animated: any

API概览

  • List
    • LiveList
    • LiveSliverList
  • Grid
    • LiveGrid
    • LiveSliverGrid
  • 所有(为所有滚动视图中的小部件设置动画)
    • AnimateIfVisibleWrapper
    • AnimateIfVisible
  • 其他动画小部件
    • LiveIconButton

示例代码

初始化配置

定义全局使用的动画选项和构建动画项的函数:

final options = LiveOptions(
  delay: Duration(seconds: 1),
  showItemInterval: Duration(milliseconds: 500),
  showItemDuration: Duration(seconds: 1),
  visibleFraction: 0.05,
  reAnimateOnVisibility: false,
);

Widget buildAnimatedItem(
  BuildContext context,
  int index,
  Animation<double> animation,
) =>
    FadeTransition(
      opacity: Tween<double>(
        begin: 0,
        end: 1,
      ).animate(animation),
      child: SlideTransition(
        position: Tween<Offset>(
          begin: Offset(0, -0.1),
          end: Offset.zero,
        ).animate(animation),
        child: YouWidgetHere(),
      ),
    );

List 使用示例

LiveList.options(
  options: options,
  itemBuilder: buildAnimatedItem,
  scrollDirection: Axis.horizontal,
  itemCount: 10,
);

Grid 使用示例

LiveGrid.options(
  options: options,
  itemBuilder: buildAnimatedItem,
  itemCount: itemsCount,
  gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
    crossAxisCount: 3,
    crossAxisSpacing: 16,
    mainAxisSpacing: 16,
  ),
);

Slivers 使用示例

CustomScrollView(
  controller: scrollController,
  slivers: <Widget>[
    LiveSliverList(
      controller: scrollController,
      showItemDuration: listShowItemDuration,
      itemCount: listItemCount,
      itemBuilder: buildAnimatedItem,
    ),
    LiveSliverGrid(
      controller: scrollController,
      delay: listShowItemDuration * (listItemCount + 1),
      itemCount: 12,
      itemBuilder: buildAnimatedItem,
      gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
        crossAxisCount: 3,
        crossAxisSpacing: 16,
        mainAxisSpacing: 16,
      ),
    ),
  ],
);

在滚动时为所有小部件设置动画

AnimateIfVisibleWrapper(
  showItemInterval: Duration(milliseconds: 150),
  child: SingleChildScrollView(
    child: Column(
      children: <Widget>[
        AnimateIfVisible(
          key: Key('item.1'),
          duration: Duration(milliseconds: 500),
          builder: (
            BuildContext context,
            int index,
            Animation<double> animation,
          ) =>
              FadeTransition(
                opacity: Tween<double>(
                  begin: 0,
                  end: 1,
                ).animate(animation),
                child: YouFirstWidget(),
              ),
        ),
        AnimateIfVisible(
          key: Key('item.2'),
          duration: Duration(milliseconds: 350),
          builder: (
            BuildContext context,
            int index,
            Animation<double> animation,
          ) =>
              SlideTransition(
                position: Tween<Offset>(
                  begin: Offset(0, -0.1),
                  end: Offset.zero,
                ).animate(animation),
                child: YouSecondWidget(),
              ),
        ),
      ],
    ),
  ),
);

LiveIconButton 使用示例

LiveIconButton(
  icon: AnimatedIcons.arrow_menu,
  onPressed: () {},
);

LiveIconButton(
  icon: AnimatedIcons.arrow_menu,
  firstTooltip: 'Event',
  secondTooltip: 'Add',
  onPressed: () {},
);

通过以上内容,你可以快速上手并使用 auto_animated 插件来为你的Flutter应用添加丰富的动画效果。希望这些信息对你有所帮助!


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

1 回复

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


当然,以下是一个关于如何在Flutter中使用auto_animated插件来实现自动动画的示例代码。auto_animated插件是一个强大的工具,可以帮助你轻松地在Flutter应用中实现复杂的动画效果。

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

dependencies:
  flutter:
    sdk: flutter
  auto_animated: ^3.0.1  # 请根据需要检查最新版本号

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

下面是一个完整的示例代码,展示了如何使用auto_animated来创建一个简单的动画效果:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Auto Animated Example'),
        ),
        body: Center(
          child: AnimatedWidgetDemo(),
        ),
      ),
    );
  }
}

class AnimatedWidgetDemo extends StatefulWidget {
  @override
  _AnimatedWidgetDemoState createState() => _AnimatedWidgetDemoState();
}

class _AnimatedWidgetDemoState extends State<AnimatedWidgetDemo> with SingleTickerProviderStateMixin {
  late AnimationController _controller;

  @override
  void initState() {
    super.initState();
    _controller = AnimationController(
      duration: const Duration(seconds: 2),
      vsync: this,
    )..repeat(reverse: true);
  }

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

  @override
  Widget build(BuildContext context) {
    return AutoAnimatedContainer(
      duration: const Duration(seconds: 2),
      curve: Curves.easeInOut,
      width: 200.0,
      height: _controller.value * 100.0, // 高度随动画值变化
      color: _controller.value > 0.5 ? Colors.blue : Colors.red, // 颜色根据动画值变化
      child: Center(
        child: AutoAnimatedText(
          'Flutter Auto Animated',
          style: TextStyle(fontSize: 24.0, color: Colors.white),
          duration: const Duration(seconds: 2),
          curve: Curves.easeInOut,
          alignment: Alignment.center,
          textStyleBuilder: (context, value, textStyle) {
            // 这里可以进一步自定义文本样式,根据动画值
            return textStyle.copyWith(
              fontSize: 24.0 + (value * 10.0), // 字体大小随动画值变化
            );
          },
        ),
      ),
    );
  }
}

在这个示例中,我们创建了一个AnimatedWidgetDemo组件,它包含一个AutoAnimatedContainer和一个AutoAnimatedTextAutoAnimatedContainer的高度和颜色会随着动画控制器的值变化而变化,而AutoAnimatedText的字体大小也会随着动画值变化。

  • AutoAnimatedContainerdurationcurve属性定义了动画的时长和曲线。
  • widthheight属性可以根据动画控制器的值动态变化。
  • color属性同样可以根据动画值动态变化。
  • AutoAnimatedTexttextStyleBuilder允许你根据动画值进一步自定义文本样式。

这个示例展示了auto_animated插件的基本用法,你可以根据实际需求进一步扩展和自定义动画效果。

回到顶部