Flutter动画效果插件fly_animation的使用

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

Flutter动画效果插件fly_animation的使用

fly_animation 插件用于实现单个或多个小部件从一个位置移动到另一个位置的动画效果。

使用

首先,确保在 pubspec.yaml 文件中添加 fly_animation 依赖项:

dependencies:
  fly_animation: ^1.0.0

然后,你可以按照以下示例来使用该插件:

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

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      title: 'Fly Animation Example',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: FlyAnimationExample(),
    );
  }
}

final _animationEndWidgetKey = GlobalKey();
int starsCount = 6;

///Fly animation example widget
class FlyAnimationExample extends StatefulWidget {
  [@override](/user/override)
  _FlyAnimationExampleState createState() => _FlyAnimationExampleState();
}

class _FlyAnimationExampleState extends State<FlyAnimationExample> {

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Fly Animation Example'),
      ),
      body: FlyAnimationWidget(
        animationEndKey: _animationEndWidgetKey,
        countOfAnimationWidgets: starsCount,
        topPosition: 300.0,
        childWidget: ChildWidget(),
        animationWidget: Image.asset(
          'assets/star.png',
          height: 24,
          width: 24,
        ),
        animationWidgetWidth: 30,
        animationWidgetHeight: 30,
        animationDurationInMillis: 700,
        hideAnimationWidgetOnComplete: true,
      ),
    );
  }
}

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

class _ChildWidgetState extends State<ChildWidget> {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Container(
      margin: EdgeInsets.all(16),
      child: Column(
        children: [
          Row(
            mainAxisAlignment: MainAxisAlignment.end,
            children: [
              Container(
                key: _animationEndWidgetKey,
                child: Image.asset(
                  'assets/star.png',
                  height: 36,
                  width: 36,
                ),
              ),
              SizedBox(
                width: 8,
              ),
              Text(
                'Total stars: $starsCount',
                textAlign: TextAlign.center,
                style: TextStyle(
                  fontWeight: FontWeight.bold,
                  fontSize: 20
                ),
              ),
            ],
          ),
          SizedBox(height: 200),
          Visibility(
            visible: starsCount == 0 ? false : true,
            child: Padding(
              padding: const EdgeInsets.all(16),
              child: Text(
                'You won $starsCount stars',
                textAlign: TextAlign.center,
                style: TextStyle(
                    fontWeight: FontWeight.bold,
                    fontSize: 15
                ),
              ),
            ),
          ),
        ],
      ),
    );
  }
}

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

1 回复

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


当然,以下是如何在Flutter中使用fly_animation插件来实现动画效果的代码示例。fly_animation是一个流行的Flutter插件,它允许开发者轻松地为小部件添加飞入和飞出动画。

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

dependencies:
  flutter:
    sdk: flutter
  fly_animation: ^0.3.0  # 请注意版本号,根据实际情况更新

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

接下来,我们来看一个完整的示例,展示如何使用fly_animation来实现一个简单的飞入动画。

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

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

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

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

class _MyHomePageState extends State<MyHomePage> with SingleTickerProviderStateMixin {
  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('Fly Animation Demo'),
      ),
      body: Center(
        child: FlyAnimation(
          from: Offset(-1.0, 0.0), // 动画开始的偏移量
          to: Offset(0.0, 0.0),    // 动画结束的偏移量
          child: Container(
            width: 200,
            height: 200,
            color: Colors.blue,
            child: Center(
              child: Text(
                'Fly Me!',
                style: TextStyle(color: Colors.white, fontSize: 24),
              ),
            ),
          ),
          animation: _controller,
        ),
      ),
    );
  }
}

在这个示例中,我们创建了一个简单的Flutter应用,其中包含一个动画的容器。FlyAnimation小部件接受几个参数:

  • from:动画开始的偏移量。
  • to:动画结束的偏移量。
  • child:要动画化的子小部件。
  • animation:控制动画的AnimationController

initState方法中,我们初始化了一个AnimationController并设置其持续时间为2秒。然后,我们使用..repeat(reverse: true)让动画反复播放,正向和反向。

dispose方法中,我们确保在组件被销毁时释放AnimationController资源。

运行这个示例,你将看到一个蓝色的容器从屏幕左侧飞入到中心位置,然后动画反复播放。

这只是一个简单的示例,fly_animation插件还提供了更多的自定义选项,你可以根据需要进行调整。

回到顶部