0%

Flutter-Dart Dialog的简单封装与TTS的使用

之前开发时发现,Flutter 原生的 showDialog 虽然挺方便,但是仅适用于提示或者关闭后不用做任何处理的时候,如果增加一些事件或者需要传递结果判断时,就很容易因为结果为null而出现bug,所以我进行了一层比较不理智的封装哈哈。

另外记录一下 flutter_tts 的简单使用,后面用到比较多。

showDialog Dialog

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
/// 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
1
2
dependencies:
flutter_tts: ^3.1.0
  • 添加初始化插件类
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
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();
}
}
  • 初始化并使用,建议使用缓存保存对象,全局使用。
1
2
3
4
var Ttser = new TTSUtil();
Ttser.initTTS();

Ttser.speak('你好,世界!hello world!');
bulb