Flutter动画效果插件animated_widgets_flutter的使用

Flutter动画效果插件animated_widgets_flutter的使用

animated_widgets_flutter 是一个用于在Flutter应用中轻松添加动画效果的插件。该插件基于另一个名为 Animated_widgets 的包,并进行了一些修复和优化。

通过 animated_widgets_flutter 插件,你可以轻松地为屏幕上的各种控件添加动画效果。支持的动画类型包括平移 (TranslationAnimatedWidget)、透明度 (OpacityAnimatedWidget)、旋转 (RotationAnimatedWidget)、缩放 (ScaleAnimatedWidget) 和大小 (SizeAnimatedWidget) 等。

示例代码

以下是一个完整的示例代码,展示了如何使用 animated_widgets_flutter 插件来实现不同类型的动画效果。

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

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  [@override](/user/override)
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  bool _display = false;

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('动画效果示例'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            // 平移动画
            TranslationAnimatedWidget(
              enabled: _display,
              values: [
                Offset(0, 200), // 禁用时的位置
                Offset(0, 0), // 启用时的位置
              ],
              child: Container(
                height: 100,
                width: 100,
                color: Colors.blue,
                child: Center(child: Text('平移动画')),
              ),
            ),
            SizedBox(height: 20),
            // 透明度动画
            OpacityAnimatedWidget(
              enabled: _display,
              opacityEnabled: 1.0, // 启用时的透明度
              opacityDisabled: 0.0, // 禁用时的透明度
              child: Container(
                height: 100,
                width: 100,
                color: Colors.red,
                child: Center(child: Text('透明度动画')),
              ),
            ),
            SizedBox(height: 20),
            // 旋转动画
            RotationAnimatedWidget(
              enabled: _display,
              rotationEnabled: Rotation.deg(z: 90), // 启用时的角度
              child: Container(
                height: 100,
                width: 100,
                color: Colors.green,
                child: Center(child: Text('旋转动画')),
              ),
            ),
            SizedBox(height: 20),
            // 缩放动画
            ScaleAnimatedWidget(
              enabled: _display,
              scaleEnabled: 1.5, // 启用时的缩放比例
              scaleDisabled: 1.0, // 禁用时的缩放比例
              child: Container(
                height: 100,
                width: 100,
                color: Colors.yellow,
                child: Center(child: Text('缩放动画')),
              ),
            ),
            SizedBox(height: 20),
            // 大小动画
            SizeAnimatedWidget(
              enabled: _display,
              values: [Size(100, 100), Size(200, 200)], // 启用和禁用时的尺寸
              child: Container(
                decoration: BoxDecoration(
                  border: Border.all(color: Colors.black),
                ),
                child: Center(child: Text('大小动画')),
              ),
            ),
            SizedBox(height: 20),
            // 自定义动画
            CustomAnimatedWidget(
              enabled: _display,
              duration: Duration(seconds: 3),
              curve: Curves.easeOut,
              builder: (context, percent) {
                return Text(
                  '当前值: ${percent.toStringAsFixed(2)}',
                  style: TextStyle(fontSize: 20),
                );
              },
            ),
            SizedBox(height: 20),
            // 触发动画按钮
            ElevatedButton(
              onPressed: () {
                setState(() {
                  _display = !_display;
                });
              },
              child: Text(_display ? '隐藏动画' : '显示动画'),
            ),
          ],
        ),
      ),
    );
  }
}

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

1 回复

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


当然,以下是如何在Flutter应用中使用animated_widgets_flutter插件来实现动画效果的一个示例代码案例。animated_widgets_flutter插件提供了一系列预定义的动画小部件,可以方便地集成到你的Flutter应用中。

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

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

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

接下来,在你的Flutter应用中,你可以使用animated_widgets_flutter提供的小部件。以下是一个简单的示例,展示了如何使用AnimatedFadeIn小部件:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Animated Widgets Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> 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 Scaffold(
      appBar: AppBar(
        title: Text('Animated Widgets Flutter Demo'),
      ),
      body: Center(
        child: AnimatedFadeIn(
          animation: _controller,
          child: Container(
            width: 200,
            height: 200,
            color: Colors.blue,
            child: Center(
              child: Text(
                'Fade In Animation',
                style: TextStyle(color: Colors.white, fontSize: 24),
              ),
            ),
          ),
        ),
      ),
    );
  }
}

在这个示例中,我们做了以下几件事:

  1. 导入必要的包:我们导入了flutter/material.dartanimated_widgets_flutter包。
  2. 创建应用入口MyApp是一个无状态小部件,它定义了应用的主题和主页面。
  3. 定义主页面MyHomePage是一个有状态小部件,它包含了动画逻辑。
  4. 初始化动画控制器:在initState方法中,我们创建了一个AnimationController,并设置它的持续时间为2秒。我们还让动画控制器在正向和反向之间重复。
  5. 使用AnimatedFadeIn小部件:我们将AnimatedFadeIn小部件作为子部件添加到Center小部件中,并将动画控制器传递给AnimatedFadeInanimation属性。AnimatedFadeIn小部件会根据动画控制器的状态进行淡入动画。

你可以根据需要调整动画的持续时间、触发条件以及其他属性,以实现不同的动画效果。animated_widgets_flutter插件还提供了其他多种动画小部件,如AnimatedSlideInAnimatedBounceIn等,你可以参考插件的文档来了解更多详情和使用方法。

回到顶部