Flutter动画效果插件goosebumps的使用

Flutter动画效果插件goosebumps的使用

概述

goosebumps 插件提供了一种简单的方式来在你的 Flutter 应用中随机生成恐怖主题的声音(如果你问我,这是非常重要的功能)。它还允许你控制音频片段播放的频率,并提供了通过摇动设备来禁用声音的功能(这很酷吧)。

尖叫片段

要求

Android 平台

  • AndroidManifest.xml 文件中包含振动权限:
    <uses-permission android:name="android.permission.VIBRATE"/>
    
  • compileSDKVersion 设置为 33:
    compileSdkVersion 33
    

使用

导入 goosebumps 包

import 'package:goosebumps/goosebumps.dart';

初始化恐怖声音生成

Horror.init();

这将使用默认设置初始化恐怖声音生成器。音频片段将以非常低的频率播放。

你可以随时调用 Horror.init() 来执行此操作,无论是函数内、构造函数还是其他位置。但是,如果你想在应用启动后立即进行初始化,可以在 main() 函数中调用它:

void main() {
  Horror.init();
  runApp(MyApp());
}

设置频率

你可以通过 Frequency 类来自定义频率。频率值越小,音频片段播放的次数就越少。Frequencies 类提供了一些预定义的频率常量:

  • Frequencies.veryLow
  • Frequencies.low
  • Frequencies.medium
  • Frequencies.high
  • Frequencies.veryHigh

你也可以传递一个 Frequency 对象给 init() 方法以设置自定义频率:

// 这个频率真的很低。
Horror.init(frequency: Frequency(milliHertz: 2));

摇动设备以启用/禁用

默认情况下,摇动设备会切换声音生成的开启或关闭状态。当设备被摇动时,它会振动一秒以表示已禁用,半秒以表示已启用。

如果你想要禁用此功能,可以将 shakeToDisable 参数设置为 false

Horror.init(shakeToDisable: false);

隐蔽 API

为了更好地隐藏代码(如果需要的话),你可以使用以下 API 代替 Horror.init()

WidgetFlutterBinding.ensureInitialized();

这看起来就像 flutter 中的 WidgetsFlutterBinding.ensureInitialized()。由于 Horror.init() 已经调用了 WidgetsFlutterBinding.ensureInitialized(),因此你无需担心是否已经需要它。

在未来,我可能会模拟一个流行的包并包含这段代码,使其更难被发现。

贡献

欢迎为 goosebumps 包做出贡献!如果你发现任何问题,有改进建议,或者想添加新功能,请自由地贡献。以下是参与的方法:

  1. 在 GitHub 上 Fork 仓库。
  2. 为你的功能或错误修复创建一个新的分支。
  3. 进行更改,并确保代码遵循项目的风格指南。
  4. 编写测试以覆盖你的更改,并确保现有测试通过。
  5. 提交更改并推送分支到你的 Fork 仓库。
  6. 向主仓库提交 Pull Request,详细描述你的更改。

请确保你的 Pull Request 符合以下准则:

  • 提供清晰且详细的 Pull Request 标题。
  • 包括对所做的更改的详细描述。
  • 如果你的 Pull Request 解决了现有问题,请使用 #issue_number 格式引用它。
  • 确保代码良好注释、遵循最佳实践并且格式正确。
  • 包含你所做的更改的相关测试。

通过为 goosebumps 包做贡献,你同意你的贡献将根据项目的 许可证 许可。

感谢你有兴趣改进 goosebumps 包!你的贡献非常宝贵。

许可证

该包在 BSD-2 许可证下发布。更多详情请参见 许可证文件

问题与反馈

请在 GitHub Issues 上报告反馈或错误。谢谢!

示例代码

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

void main() {
  Horror.init(frequency: Frequencies.veryHigh);
  // 为了不那么显眼,你可以使用这行代码:
  // WidgetFlutterBinding.ensureInitialized();
  
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Goosebumps Demo',
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Goosebumps Demo'),
        ),
        body: const Center(
          child: Text(
            '摇晃你的设备以启用/禁用声音!',
            style: TextStyle(fontSize: 20),
          ),
        ),
      ),
    );
  }
}

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

1 回复

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


当然,以下是如何在Flutter项目中使用goosebumps插件来实现动画效果的代码示例。goosebumps是一个Flutter包,用于创建独特的动画效果,给UI带来生动的触感。

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

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

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

接下来是一个简单的示例,展示如何使用goosebumps创建动画效果。在这个示例中,我们将创建一个带有点击动画效果的按钮。

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Goosebumps Example',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: Scaffold(
        appBar: AppBar(
          title: Text('Flutter Goosebumps Example'),
        ),
        body: Center(
          child: GoosebumpsButtonExample(),
        ),
      ),
    );
  }
}

class GoosebumpsButtonExample extends StatefulWidget {
  @override
  _GoosebumpsButtonExampleState createState() => _GoosebumpsButtonExampleState();
}

class _GoosebumpsButtonExampleState extends State<GoosebumpsButtonExample> with SingleTickerProviderStateMixin {
  late AnimationController _controller;
  late Animation<double> _animation;

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

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

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

  void _handleTap() {
    _controller.reset();
    _controller.forward();
  }

  @override
  Widget build(BuildContext context) {
    return GoosebumpsEffect(
      child: ElevatedButton(
        onPressed: _handleTap,
        child: Text('Tap Me'),
      ),
      animation: _animation,
      type: GoosebumpsType.ripple, // 你可以尝试其他类型,如 GoosebumpsType.sparkle, GoosebumpsType.pulse 等
      color: Colors.white.withOpacity(0.7),
    );
  }
}

在这个示例中,我们创建了一个GoosebumpsButtonExample组件,它包含一个ElevatedButton。当按钮被点击时,会触发一个动画。GoosebumpsEffect组件包裹在按钮外部,并接收一个动画控制器和一个动画类型。

  • GoosebumpsEffect:这是应用动画效果的组件。
  • animation:这是控制动画进度的Animation<double>对象。
  • type:这是动画效果的类型,GoosebumpsType提供了多种效果,如ripple(涟漪)、sparkle(火花)、pulse(脉冲)等。
  • color:这是动画效果的颜色,你可以根据需要调整。

这个示例使用了ripple效果,但你可以尝试其他效果来查看不同的动画表现。

希望这个示例能帮助你理解如何在Flutter项目中使用goosebumps插件来创建动画效果。如果你有任何其他问题或需要进一步的帮助,请随时提问!

回到顶部