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