Flutter动画效果插件tdk_bouncingwidget的使用

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

Flutter动画效果插件tdk_bouncingwidget的使用

简介

tdk_bouncingwidget 是一个用于在点击时使小部件(如容器、卡片等)产生弹跳效果的Flutter插件。本文将详细介绍如何使用该插件。

特性

  • 通过包裹现有的小部件(例如 Container, Card 等),可以在点击时为它们添加弹入和弹出的效果。
  • 提供了不同的弹跳类型,包括“仅弹入”、“仅弹出”或“先弹入再弹出”。

开始使用

首先,需要在项目的 pubspec.yaml 文件中添加依赖项:

dependencies:
  tdk_bouncingwidget: ^latest_version

或者运行以下命令来添加依赖:

flutter pub add tdk_bouncingwidget

使用方法

只需将你的小部件包裹在 BouncingWidgetInOut 小部件中即可实现弹跳效果:

BouncingWidgetInOut(
    onPressed: () {},
    bouncingType: BouncingType.bounceInAndOut,
    child: Container(
        height: 60,
        width: 200,
        child: const Text('click to bounce')
    )
)

参数说明

  • bouncingType: 指定弹跳类型,默认值是 bounceInOnly
    • bounceInOnly: 小部件会根据缩放因子值缩小然后放大。
    • bounceOutOnly: 小部件会根据缩放因子值放大然后缩小。
    • bounceInAndOut: 小部件首先会根据缩放因子值缩小然后放大,接着再放大然后缩小。

你还可以自定义动画持续时间和缩放比例:

BouncingWidgetInOut(
    onPressed: () {},
    duration: Duration(milliseconds: 500),
    scaleFactor: 1.2,
    bouncingType: BouncingType.bounceInAndOut,
    child: Container(
        height: 60,
        width: 200,
        child: const Text('Customized bounce')
    )
)

完整示例代码

下面是一个完整的示例程序,展示了如何使用不同类型的弹跳效果:

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

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

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  [@override](/user/override)
  Widget build(BuildContext context) {
    return const MaterialApp(
      title: 'Flutter Bouncing widget Demo',
      home: MyHomePage(title: 'Bouncing widget'),
    );
  }
}

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

  final String title;

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

class _MyHomePageState extends State<MyHomePage> {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            // Bouncing Wiget only Bouncing IN
            BouncingWidgetInOut(
              onPressed: () {},
              bouncingType: BouncingType.bounceInOnly,
              child: Container(
                margin: const EdgeInsets.all(10),
                height: 60,
                width: 200,
                child: const Card(
                  color: Colors.red,
                  child: Center(
                    child: Text("Bouncing In only",
                        style: TextStyle(color: Colors.white, fontWeight: FontWeight.bold)),
                  ),
                ),
              ),
            ),
            // Bouncing Wiget only Bouncing OUT
            BouncingWidgetInOut(
              onPressed: () {},
              bouncingType: BouncingType.bounceOutOnly,
              child: Container(
                margin: const EdgeInsets.all(10),
                height: 60,
                width: 200,
                child: const Card(
                  color: Colors.blue,
                  child: Center(
                    child: Text("Bouncing out only",
                        style: TextStyle(color: Colors.white, fontWeight: FontWeight.bold)),
                  ),
                ),
              ),
            ),
            // Bouncing Wiget  Bouncing both IN and OUT
            BouncingWidgetInOut(
              onPressed: () {},
              bouncingType: BouncingType.bounceInAndOut,
              child: Container(
                margin: const EdgeInsets.all(10),
                height: 60,
                width: 200,
                child: const Card(
                  color: Colors.green,
                  child: Center(
                    child: Text(
                      "Bouncing In and out",
                      style: TextStyle(color: Colors.white, fontWeight: FontWeight.bold),
                    ),
                  ),
                ),
              ),
            ),
          ],
        ),
      ),
    );
  }
}

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

1 回复

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


当然,以下是如何在Flutter项目中使用tdk_bouncingwidget插件来实现动画效果的代码示例。这个插件允许你创建一个带有弹跳动画效果的Widget。

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

dependencies:
  flutter:
    sdk: flutter
  tdk_bouncingwidget: ^最新版本号 # 请替换为实际发布的最新版本号

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

以下是一个完整的Flutter应用示例,展示了如何使用tdk_bouncingwidget

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: '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;
  late Animation<double> _animation;

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

    _animation = Tween<double>(begin: 0, end: 1).animate(_controller);
  }

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

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('tdk_bouncingwidget Demo'),
      ),
      body: Center(
        child: BouncingWidget(
          child: Container(
            width: 100,
            height: 100,
            color: Colors.blue,
            child: Center(
              child: Text(
                'Bounce',
                style: TextStyle(color: Colors.white),
              ),
            ),
          ),
          animationValue: _animation.value,
          onBounceCompleted: () {
            print('Bounce completed!');
          },
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: () {
          // Trigger a reset of the animation if needed
          _controller.reset();
          _controller.forward();
        },
        tooltip: 'Restart Animation',
        child: Icon(Icons.replay),
      ),
    );
  }
}

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

  1. 添加依赖:在pubspec.yaml中添加tdk_bouncingwidget依赖。
  2. 创建主应用MyApp是我们的主应用Widget,它包含了一个MaterialApp
  3. 创建首页MyHomePage是我们的首页Widget,它是一个有状态的Widget,因为我们需要使用AnimationController来控制动画。
  4. 初始化动画控制器:在initState方法中,我们初始化了一个AnimationController并设置了一个重复的动画。
  5. 使用BouncingWidget:在build方法中,我们创建了一个BouncingWidget,将动画值传递给它,并设置了一个onBounceCompleted回调。
  6. 重置动画:在floatingActionButtononPressed回调中,我们重置动画并重新开始它。

请确保你已经正确安装并导入了tdk_bouncingwidget包,并根据需要调整动画的持续时间和效果。这个示例只是一个基础实现,你可以根据需求进一步自定义动画效果。

回到顶部