Flutter动画效果插件jelly_anim的使用

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

Flutter动画效果插件jelly_anim的使用

Jelly Animation

Jelly Animation 是一个用于渲染可移动的、类似果冻效果的对象的Flutter插件。它提供了高度可定制的动画效果,适用于创建独特的UI元素。

jelly_anim

此外,该插件还实现了类似于Dribbble上的登录流程动画效果。

主要特性

  • 高度可定制:支持自定义JellyAnim的渲染效果。
  • 多个实例:可以在同一页面中使用多个JellyAnim实例。
  • 重叠效果:可以创建多个果冻效果的重叠动画。
  • 形状和颜色过渡:支持形状之间的平滑过渡和颜色变化。
  • 自定义视口大小:可以通过viewPortSize参数设置果冻动画的显示区域。
  • 自定义半径:可以通过radius参数调整果冻的大小。
  • 自定义样式:通过paint参数为果冻添加自定义样式,如描边、描边宽度等。

开始使用

要在项目中使用jelly_anim插件,首先需要在pubspec.yaml文件中添加依赖:

dependencies:
  ...
  jelly_anim: any

然后在Dart代码中导入插件:

import 'package:jelly_anim/jelly_anim.dart';

使用示例

以下是一个完整的示例代码,展示了如何在Flutter应用中使用jelly_anim插件:

import 'package:flutter/material.dart';
import 'package:google_fonts/google_fonts.dart';
import 'package:jelly_anim/jelly_anim.dart';

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

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

class MyHomePage extends StatefulWidget {
  [@override](/user/override)
  State<StatefulWidget> createState() {
    return _MyHomePage();
  }
}

class _MyHomePage extends State<MyHomePage> {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return SafeArea(
      child: Scaffold(
        backgroundColor: Color.fromRGBO(40, 40, 40, 1),
        body: Column(
          children: [
            SizedBox(
              height: 500,
              child: Stack(
                children: [
                  // 第一个JellyAnim实例
                  Align(
                    alignment: Alignment.center,
                    child: JellyAnim(
                      jellyCount: 1,  // 果冻数量
                      radius: 160,    // 果冻半径
                      allowOverFlow: true,  // 是否允许超出视口
                      duration: Duration(milliseconds: 10),  // 动画持续时间
                      colors: [Color.fromRGBO(255, 237, 59, 1)],  // 果冻颜色
                      jellyCoordinates: 5,  // 果冻运动坐标
                    ),
                  ),
                  // 图片叠加
                  Align(
                    alignment: Alignment.topCenter,
                    child: Image.asset(
                      "asset/lady.png",  // 图片路径
                    ),
                  ),
                  // 第二个JellyAnim实例
                  Padding(
                    padding: EdgeInsets.only(top: 80),
                    child: JellyAnim(
                      radius: 100,  // 果冻半径
                      colors: [Color.fromRGBO(255, 237, 59, 1)],  // 果冻颜色
                      allowOverFlow: true,  // 是否允许超出视口
                      viewPortSize: Size(MediaQuery.of(context).size.width, MediaQuery.of(context).size.height),  // 视口大小
                      jellyPosition: JellyPosition.bottomCenter,  // 果冻位置
                    ),
                  )
                ],
              ),
            ),
            // 文本提示
            Padding(
              padding: EdgeInsets.only(right: 62, left: 62, top: 36),
              child: Text(
                "Feel less stressed & more mindful with meditation",
                style: TextStyle(
                  fontSize: 24,
                  fontWeight: FontWeight.w400,
                  color: Colors.white,
                ),
                textAlign: TextAlign.center,
              ),
            ),
            // 按钮
            GestureDetector(
              onTap: () {
                // 点击跳转到新的页面
                Navigator.push(
                  context,
                  MaterialPageRoute(builder: (context) => DemoScreen()),
                );
              },
              child: Padding(
                padding: EdgeInsets.only(top: 100),
                child: Text(
                  "Let’s Go",
                  textAlign: TextAlign.center,
                  style: GoogleFonts.roboto(
                    fontWeight: FontWeight.w500,
                    fontSize: 18,
                    color: Color.fromRGBO(16, 16, 16, 1),
                  ),
                ),
              ),
            )
          ],
        ),
      ),
    );
  }
}

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

1 回复

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


当然,以下是一个关于如何在Flutter项目中使用jelly_anim插件来实现果冻动画效果的代码案例。jelly_anim是一个用于创建果冻效果的动画库,可以让你的UI组件像果冻一样弹动。

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

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

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

接下来,你可以在你的Flutter项目中导入并使用jelly_anim。以下是一个简单的示例,展示如何使用Jelly组件来创建一个果冻动画效果:

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

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

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

class JellyAnimDemo extends StatefulWidget {
  @override
  _JellyAnimDemoState createState() => _JellyAnimDemoState();
}

class _JellyAnimDemoState extends State<JellyAnimDemo> 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('Jelly Anim Demo'),
      ),
      body: Center(
        child: Jelly(
          child: Container(
            width: 200,
            height: 200,
            color: Colors.blue,
            child: Center(
              child: Text(
                'Jelly!',
                style: TextStyle(color: Colors.white, fontSize: 24),
              ),
            ),
          ),
          animation: _controller,
          effect: JellyEffect.wave,
        ),
      ),
    );
  }
}

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

  1. 依赖管理:在pubspec.yaml中添加jelly_anim依赖。
  2. 动画控制器:在_JellyAnimDemoState中创建一个AnimationController,用于控制动画的持续时间和循环。
  3. Jelly组件:使用Jelly组件包裹一个Container,并应用动画控制器和果冻效果(这里使用的是JellyEffect.wave)。

运行这个代码,你将看到一个蓝色的容器在屏幕上像果冻一样波动。你可以根据需要调整动画效果(例如使用JellyEffect.bounce或其他效果)和动画参数(如持续时间、延迟等)。

希望这个示例能帮助你理解如何在Flutter项目中使用jelly_anim插件来实现果冻动画效果。

回到顶部