Flutter动画效果插件animated_neumorphic的使用

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

Flutter动画效果插件 animated_neumorphic 的使用

animated_neumorphic 是一个用于创建新拟态风格(Neumorphism)主题容器的Flutter插件。通过该插件,你可以轻松实现具有动画效果的新拟态UI组件。

动画效果示例

新拟态按钮示例

开始使用

添加依赖

在你的Flutter项目的 pubspec.yaml 文件中添加以下依赖项:

dependencies:
  ...
  animated_neumorphic: "^0.1.0"

导入库

在你的Dart文件中导入该库:

import 'package:animated_neumorphic/animated_neumorphic.dart';

对于Flutter新手,可以参考官方文档来快速上手。

使用方法

下面是一个简单的按钮示例:

class NeumorphicButton extends StatefulWidget {
  const NeumorphicButton({Key? key}) : super(key: key);

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

class _NeumorphicButtonState extends State<NeumorphicButton> {
  bool _isActive = false;

  [@override](/user/override)
  Widget build(BuildContext context) {
    return GestureDetector(
      onTap: () {
        setState(() {
          _isActive = !_isActive;
        });
      },
      child: AnimatedNeumorphicContainer(
        depth: _isActive ? 0.0 : 1.0,
        color: Color(0xFFF2F2F2),
        width: 60,
        height: 60,
        radius: 16,
        child: Icon(Icons.access_time),
      ),
    );
  }
}

这是一个更完整的示例demo,它展示了如何在应用中使用 AnimatedNeumorphicContainer 来创建带有滑块控制尺寸和深度的动态新拟态组件:

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

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      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> {
  double _width = 60.0;
  double _height = 60.0;
  double _depth = 0.0;

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title!),
      ),
      backgroundColor: Color(0xFFF2F2F2),
      body: Center(
        child: Column(
          children: <Widget>[
            SizedBox(height: 32),
            NeumorphicButton(),
            SizedBox(height: 32),
            AnimatedNeumorphicContainer(
              depth: _depth,
              width: _width,
              height: _height,
              color: Color(0xFFF2F2F2),
              child: Icon(Icons.timeline),
            ),
            SizedBox(height: 16),
            Slider(
              value: _width,
              min: 60,
              max: 180,
              onChanged: (v) {
                setState(() => _width = v);
              },
            ),
            Slider(
              value: _height,
              min: 60,
              max: 180,
              onChanged: (v) {
                setState(() => _height = v);
              },
            ),
            Slider(
              value: _depth,
              min: 0.0,
              max: 1.0,
              onChanged: (v) {
                setState(() => _depth = v);
              },
            ),
          ],
        ),
      ),
    );
  }
}

// 定义一个新拟态按钮
class NeumorphicButton extends StatefulWidget {
  const NeumorphicButton({Key? key}) : super(key: key);

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

class _NeumorphicButtonState extends State<NeumorphicButton> {
  bool _isActive = false;

  [@override](/user/override)
  Widget build(BuildContext context) {
    return GestureDetector(
      onTap: () {
        setState(() {
          _isActive = !_isActive;
        });
      },
      child: AnimatedNeumorphicContainer(
        depth: _isActive ? 0.0 : 1.0,
        color: Color(0xFFF2F2F2),
        width: 60,
        height: 60,
        radius: 16,
        child: Icon(Icons.access_time),
      ),
    );
  }
}

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

1 回复

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


当然,animated_neumorphic 是一个在 Flutter 中用于创建具有新拟物风格(Neumorphism)动画效果的插件。这种风格的设计通过光与影的巧妙运用,创造出具有深度和立体感的界面元素。

以下是一个简单的代码示例,展示了如何使用 animated_neumorphic 插件来创建一个带有动画效果的新拟物风格按钮:

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

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

然后,运行 flutter pub get 来获取依赖。

接下来,在你的 Dart 文件中使用 AnimatedNeumorphicButton 创建一个按钮,并添加动画效果:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Animated Neumorphic Button Example'),
        ),
        body: Center(
          child: AnimatedNeumorphicButton(
            onPressed: () {
              // 按钮点击事件
              print('Button pressed!');
            },
            child: Text('Press Me'),
            style: NeumorphicStyle(
              depth: 5,
              intensity: 0.5,
              color: Colors.blue,
              shape: NeumorphicShape.convex,
            ),
            animationCurve: Curves.easeInOutQuad,
            animationDuration: Duration(milliseconds: 300),
          ),
        ),
      ),
    );
  }
}

在这个示例中:

  • AnimatedNeumorphicButton 是一个带有动画效果的新拟物风格按钮。
  • onPressed 属性定义了按钮点击时的回调。
  • child 属性定义了按钮内部的文本或图标。
  • style 属性定义了按钮的新拟物风格参数,包括深度 (depth)、强度 (intensity)、颜色 (color) 和形状 (shape)。
  • animationCurve 属性定义了动画的曲线,这里使用了 Curves.easeInOutQuad
  • animationDuration 属性定义了动画的持续时间。

你可以根据需要调整这些参数,以创建符合你设计要求的动画效果。animated_neumorphic 插件还提供了其他新拟物风格的组件,你可以参考其文档了解更多详情。

回到顶部