Flutter动画效果插件flutter_animator_widgets的使用

Flutter动画效果插件flutter_animator_widgets的使用

flutter_animator_widgets 提供了各种炫酷可自定义样式的动画组件。目前只有一个主要组件 FlyOutMenu,但未来将会有更多的动画组件加入。

零安全支持

  • 对于零安全版本,请使用 flutter_animator_widgets: ^1.0.2
  • 对于非零安全版本,请使用 flutter_animator_widgets: 1.0.1

本项目使用了 flutter_animator 项目来实现动画效果。强烈建议你查看 flutter_animator 的文档。

入门指南

FlyOutMenu

FlyOutMenu 是一个可以展开和收起的菜单组件。

FlyOutMenu

基本示例
[@override](/user/override)
Widget build(BuildContext context) {
  return Scaffold(
    appBar: AppBar(
      title: Text(widget.title),
    ),
    body: Center(
      child: Text(pressedItem != null
          ? "Last pressed: $pressedItem"
          : "No items pressed"),
    ),
    floatingActionButton: FlyOutMenu(
      key: _flyoutMenuKey,
      /// 使用全局键以便在按钮点击时调用 _flyoutMenuKey.currentState.close()
      buttons: buttons,
      /// List<Widget>,你可以添加自己的组件并自行处理点击事件
      animation: FlyOutAnimation.flipperCard,
      /// 多种炫酷的动画可供选择
      defaultIcon: Icons.add,
      /// 标准(关闭)状态的图标
      activeIcon: Icons.close,
      /// 激活(打开)状态的图标
    ),
  );
}

完整示例代码

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

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(),
      home: MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key? key, this.title}) : super(key: key);

  final String? title;

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

class _MyHomePageState extends State<MyHomePage> {
  // 创建一个全局键以管理 FlyOutMenu 状态
  GlobalKey<FlyOutMenuState> _flyoutMenuKey = GlobalKey<FlyOutMenuState>();

  // 初始化按钮标签列表
  List<String> buttonLabels = List<String>.generate(4, (index) => "Button ${index + 1}");

  // 存储按钮列表
  List<Widget> buttons = [];

  // 存储最后点击的按钮标签
  String? pressedItem;

  [@override](/user/override)
  void initState() {
    // 在框架绘制后设置按钮列表
    WidgetsBinding.instance!.addPostFrameCallback((_) {
      setState(() {
        buttons = buttonLabels
            .map((label) => ElevatedButton(
                  style: ButtonStyle(
                      backgroundColor: MaterialStateColor.resolveWith(
                          (states) => Theme.of(context).buttonColor)),
                  onPressed: () {
                    setState(() {
                      pressedItem = label;
                    });
                    _flyoutMenuKey.currentState!.close();
                  },
                  child: Text(label),
                ))
            .toList();
      });
    });
    super.initState();
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title!),
      ),
      body: Center(
        child: Text(pressedItem != null
            ? "Last pressed: $pressedItem"
            : "No items pressed"),
      ),
      floatingActionButton: FlyOutMenu(
        key: _flyoutMenuKey,
        buttons: buttons,
        animation: FlyOutAnimation.flipperCard,
        defaultIcon: Icons.add,
        activeIcon: Icons.close,
      ),
    );
  }
}

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

1 回复

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


flutter_animator_widgets 是一个 Flutter 插件,它提供了多种预定义的动画效果,可以帮助开发者轻松地创建动画。这个插件简化了动画的实现过程,让开发者无需手动编写复杂的动画代码。

安装

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

dependencies:
  flutter:
    sdk: flutter
  flutter_animator_widgets: ^latest_version

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

使用示例

flutter_animator_widgets 提供了多种动画效果,以下是几个常见的使用示例。

1. FadeIn

FadeIn 是一个简单的淡入动画。

import 'package:flutter/material.dart';
import 'package:flutter_animator/widgets/fade_in.dart';

class MyHomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter Animator Widgets'),
      ),
      body: Center(
        child: FadeIn(
          child: Text('Hello, Flutter Animator!'),
        ),
      ),
    );
  }
}

2. BounceIn

BounceIn 是一个弹跳进入的动画。

import 'package:flutter/material.dart';
import 'package:flutter_animator/widgets/bounce_in.dart';

class MyHomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter Animator Widgets'),
      ),
      body: Center(
        child: BounceIn(
          child: Text('Bounce In!'),
        ),
      ),
    );
  }
}

3. SlideInLeft

SlideInLeft 是一个从左侧滑入的动画。

import 'package:flutter/material.dart';
import 'package:flutter_animator/widgets/slide_in_left.dart';

class MyHomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter Animator Widgets'),
      ),
      body: Center(
        child: SlideInLeft(
          child: Text('Slide In Left!'),
        ),
      ),
    );
  }
}

4. Combine Animations

你可以通过组合多个动画来创建更复杂的效果。例如,你可以同时使用 FadeInSlideInLeft

import 'package:flutter/material.dart';
import 'package:flutter_animator/widgets/fade_in.dart';
import 'package:flutter_animator/widgets/slide_in_left.dart';

class MyHomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter Animator Widgets'),
      ),
      body: Center(
        child: SlideInLeft(
          child: FadeIn(
            child: Text('Combined Animation!'),
          ),
        ),
      ),
    );
  }
}

其他动画

flutter_animator_widgets 还提供了许多其他动画效果,如 ZoomInFlipInXRotateIn 等。你可以查看 官方文档 来了解更多可用动画及其自定义选项。

自定义动画参数

大多数动画都允许你自定义一些参数,如 durationdelaycurve 等。例如:

FadeIn(
  duration: Duration(seconds: 2),
  delay: Duration(milliseconds: 500),
  curve: Curves.easeInOut,
  child: Text('Custom Fade In!'),
)
回到顶部