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

2023-12-11 20:35:14 浏览数 (2)

之前开发时发现,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
代码语言:javascript复制
dependencies:
  flutter_tts: ^3.1.0
  • 添加初始化插件类
代码语言:javascript复制
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();
  }
}
  • 初始化并使用,建议使用缓存保存对象,全局使用。
代码语言:javascript复制
var Ttser = new TTSUtil();
Ttser.initTTS();

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

0 人点赞