Flutter键盘音效插件clackety的使用

Flutter键盘音效插件clackety的使用

clackety 是一个轻量级的 Flutter 包(无外部依赖),用于模拟文本输入(类似于打字机/打字员)。你可以通过控制器提供新的输入目标,并且 clackety 将会更新已经写入的文本。

特性

  • 实时纠正文本,当新的输入目标被提供时
  • 无需控制器即可轻松使用
  • 无依赖,轻量且优化
  • 点击以快速前进
  • 支持 onComplete 回调

开始使用

首先,在你的项目中安装该包:

flutter pub add clackety

基本用法

作为 Text() 小部件的替代品:

Clackety.text("Clackety Example")

高级用法

使用 Clackety 控制器:

// 创建一个 ClacketyController
_clacketyController = ClacketyController(value: '');

// 在你的 UI 小部件树中添加 Clackety 小部件
Clackety(
    controller: _clacketyController,
    builder: (context, text) => Text(text)),

// 当需要时输入新文本!
_clacketyController.type('... Happy clacking!');

完整示例

以下是一个完整的示例代码,展示了如何使用 clackety 插件:

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

void main() {
  WidgetsFlutterBinding.ensureInitialized();

  runApp(MaterialApp(
      title: 'Clackety Example',
      theme: ThemeData.dark().copyWith(
        appBarTheme: const AppBarTheme(color: Colors.pink),
        textTheme: ThemeData.dark().textTheme.copyWith(
            bodyMedium: const TextStyle(color: Colors.white, fontSize: 24)),
      ),
      home: ClacketyExample()));
}

class ClacketyExample extends StatelessWidget {
  final _clacketyController = ClacketyController(value: '');

  ClacketyExample({super.key}) {
    WidgetsBinding.instance.addPostFrameCallback((_) => _startTyping());
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      floatingActionButton: FloatingActionButton(
          child: Icon(Icons.restart_alt),
          onPressed: () {
            _startTyping();
          }),
      // 你可以在任何小部件中使用 Clackety,甚至是在应用栏中!
      appBar: AppBar(
        title: Clackety.text(
          "Clackety Example",
        ),
        actions: [
          IconButton(onPressed: () {}, icon: const Icon(Icons.settings))
        ],
      ),

      body: Padding(
        padding: const EdgeInsets.all(48),
        // 这演示了一个更高级的用例,使用了控制器
        child: Clackety(
            controller: _clacketyController,
            builder: (context, text) => Text(text)),
      ),
    );
  }

  // 示例:使用控制器输入文本
  Future _startTyping() async {
    // 你不会像这样使用,但只是为了演示!
    _clacketyController.type(
      'Hello World!',
      onComplete: () async {
        _clacketyController.type("Hello, I'm Clackety!",
            onComplete: _asyncSimulation);
      },
    );
  }

  /// 这只是模拟使用 clackety 更新进度
  Future _asyncSimulation([int? step]) async {
    final progress = ((step ?? 0) + 1) * 10;

    _clacketyController.type(
        step == null ? 'Progress simulation...' : 'Progress $progress%',
        onComplete:
            progress >= 100 ? _bye : () => _asyncSimulation((step ?? 0) + 1));
  }

  Future _bye() async {
    _clacketyController.type('... Happy clacking!');
  }
}

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

1 回复

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


clackety 是 Flutter 中的一个键盘音效插件,专门用于在用户输入时播放类似机械键盘的音效。它可以为你的应用增添一些趣味性和互动性,尤其是在需要用户频繁输入的场景中。

安装 clackety 插件

首先,你需要在 pubspec.yaml 文件中添加 clackety 依赖:

dependencies:
  flutter:
    sdk: flutter
  clackety: ^1.0.0  # 请确保使用最新版本

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

使用 clackety 插件

  1. 导入包:在需要使用 clackety 的地方导入包。
import 'package:clackety/clackety.dart';
  1. 初始化 Clackety:在应用的初始阶段初始化 Clackety
void main() {
  WidgetsFlutterBinding.ensureInitialized();
  Clackety.initialize();
  runApp(MyApp());
}
  1. 在输入时播放音效:你可以在 TextFieldTextFormFieldonChanged 回调中调用 Clackety.play() 来播放音效。
TextField(
  decoration: InputDecoration(
    labelText: '输入文本',
  ),
  onChanged: (text) {
    Clackety.play(); // 在每次输入时播放音效
  },
);
  1. 自定义音效clackety 允许你自定义音效的音量和音调。
Clackety.play(volume: 0.8, pitch: 1.2); // 调整音量和音调
  1. 停止音效:如果你需要在某些情况下停止音效,可以调用 Clackety.stop()
Clackety.stop();

注意事项

  • 性能考虑:频繁播放音效可能会对应用性能产生影响,尤其是在低端设备上。建议在高频输入场景中进行测试,确保用户体验流畅。
  • 用户体验:虽然键盘音效可以增加趣味性,但也可能让某些用户感到不适。建议为用户提供关闭音效的选项。

示例代码

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

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

void main() {
  WidgetsFlutterBinding.ensureInitialized();
  Clackety.initialize();
  runApp(MyApp());
}

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

class ClacketyDemo extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Clackety Demo'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          children: [
            TextField(
              decoration: InputDecoration(
                labelText: '输入文本',
              ),
              onChanged: (text) {
                Clackety.play(); // 在每次输入时播放音效
              },
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: () {
                Clackety.stop(); // 停止音效
              },
              child: Text('停止音效'),
            ),
          ],
        ),
      ),
    );
  }
}
回到顶部