之前开发时发现,Flutter 原生的 showDialog 虽然挺方便,但是仅适用于提示或者关闭后不用做任何处理的时候,如果增加一些事件或者需要传递结果判断时,就很容易因为结果为null而出现bug,所以我进行了一层比较不理智的封装哈哈。
另外记录一下 flutter_tts 的简单使用,后面用到比较多。
showDialog Dialog
代码语言:javascript复制/// showDialog 不理智封装 (╯‵□′)╯︵┻━┻
static Future showConfirm({
BuildContext context,
String title,
Widget content,
String cancelText,
String confirmText,
Function onCancel,
Function onConfirm,
AlertDialog Function(BuildContext context) builder
}) async {
var flag = await showDialog(
context: context,
builder: (BuildContext context) {
return AlertDialog(
title: title != null && title.isNotEmpty ? Text(title) : null,
content: content,
actions: <Widget>[
TextButton(
onPressed: () => Navigator.of(context).pop(false),
child: Text(cancelText ?? 'Cancel'),
),
TextButton(
onPressed: () => Navigator.of(context).pop(true),
child: Text(confirmText ?? 'Confirm'),
)
]
);
}
);
if (flag != null && flag) {
onConfirm();
} else if (onCancel != null) {
onCancel();
}
}
flutter_tts plugin TTS
- 首先在
pubspec.yaml
配置插件 flutter_tts
dependencies:
flutter_tts: ^3.1.0
- 添加初始化插件类
import 'package:flutter_tts/flutter_tts.dart';
class TTSUtil {
TTSUtil._();
static TTSUtil _manager;
factory TTSUtil() {
if (_manager == null) {
_manager = TTSUtil._();
}
return _manager;
}
FlutterTts flutterTts;
initTTS() {
flutterTts = FlutterTts();
}
Future speak(String text) async {
/// 设置语言
await flutterTts.setLanguage("zh-CN");
// 需配置中文语音包,若没有请自行下载,讯飞语音包亲测可用。
// 本站下载地址 {root}/dart_tts_confirm/kdxf_tts.apk
/// 设置音量
await flutterTts.setVolume(0.8);
/// 设置语速
await flutterTts.setSpeechRate(0.5);
/// 音调
await flutterTts.setPitch(1.0);
if (text != null) {
if (text.isNotEmpty) {
await _stop();
await flutterTts.speak(text);
}
}
}
/// 暂停
Future _pause() async {
await flutterTts.pause();
}
/// 结束
Future _stop() async {
await flutterTts.stop();
}
}
- 初始化并使用,建议使用缓存保存对象,全局使用。
var Ttser = new TTSUtil();
Ttser.initTTS();
Ttser.speak('你好,世界!hello world!');