Flutter语音输入插件phonetic_typing的使用

Flutter语音输入插件phonetic_typing的使用

Phonetic typing 是一个支持在桌面和手机上使用英文键盘进行印地语转写的包。

开始使用

Phonetic typing 是一个用于将英语转换为印地语的Flutter项目。

功能

  • 将英语单词转换为印地语。
  • 提供方便的建议以帮助用户在TextField中输入。

示例项目中的功能

当你按下空格键时,它会自动选择并转换你输入的单词。当你输入单词且未选择任何建议时,它会自动选取并替换建议列表中的第一个单词。例如,你可以通过点击建议并附加字符串来创建复杂的单词,如 सामा +न्+य 将生成 सामान्य

安装

请查看 安装指南

使用方法

// 当有任何建议被点击时执行此函数
onSuggsnSelected(suggestion) {
  sugSelected = suggestion.toString();  // 选中的建议
  
  String attch = transliterate.word(name);  // 获取 'name'(你的文本)的最后一个单词
  
  int start = name.length - attch.length;  // 要替换的英文单词的起始长度
  int end = name.length;                   // 要替换的英文单词的结束长度
  
  inputController.text = name.replaceRange(start, end, sugSelected); 
  // 替换英文单词为所选的印地语单词
}
// 生成建议词的函数
suggsnCallBack(pattern) {
  if (name != "") {
    if (totalSuggestions.first != "") {
      // 从建议列表中选择第一个单词
      sugFirst = totalSuggestions.first;
    }
    // 要替换的英文单词的起始长度
    int start = name.length - (inputChar.length + 1);
    int end = name.length;  // 要替换的英文单词的结束长度
    
    if (name.length > 1 && (name.split("").last == " ") && transliterate.isVC(name)) {  // 检查是否包含英文字符
      if (sugFirst != " ") {
        // 如果第一个建议单词不是空白,用选中的建议单词替换
        name = name.replaceRange(start, end, sugFirst) + " ";
        setState(() {});
      }
      final val = TextSelection.collapsed(offset: name.length);
      // 把光标位置移到末尾
      inputController.selection = val;                 
    }
  }
  // 获取传入的 'name' 或输入的单词的预期印地语输出
  totalSuggestions = transliterate.suggestions(
    name: name, sugg: sugSelected
  );
  // 返回期望的建议列表
  return totalSuggestions;
}

材料示例 1

import 'package:flutter/material.dart';

import 'HomePage.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatefulWidget {
  const MyApp({Key? key}) : super(key: key);

  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(routes: {
      "/": (context) => HomePage(),
      "/homePage1": (context) => HomePage(),
      // "/txtFieldPage":(context)=>TxtFieldSugges(),
    });
  }
}

常见问题解决

如果桌面应用不能正确渲染印地语单词,请在 web/index.html 文件中插入以下脚本:

<script type="text/javascript">
    let useHtml = // ...
    if(useHtml) {
      window.flutterWebRenderer = "html";  
    } else {
      window.flutterWebRenderer = "canvaskit";
    }
  </script>
<script src="main.dart.js" type="application/javascript"></script>

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

1 回复

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


phonetic_typing 是一个 Flutter 插件,用于实现语音输入功能。它允许用户通过语音输入文本,并将其转换为文字。以下是如何使用 phonetic_typing 插件的基本步骤:

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  phonetic_typing: ^0.0.1  # 请检查最新版本

然后运行 flutter pub get 来获取依赖。

2. 导入插件

在你的 Dart 文件中导入 phonetic_typing 插件:

import 'package:phonetic_typing/phonetic_typing.dart';

3. 初始化语音识别

在使用语音输入功能之前,你需要初始化语音识别器:

PhoneticTyping phoneticTyping = PhoneticTyping();

4. 开始语音识别

你可以通过调用 startListening 方法开始语音识别:

await phoneticTyping.startListening();

5. 监听语音识别结果

你可以通过监听 onResult 流来获取语音识别的结果:

phoneticTyping.onResult.listen((result) {
  print("识别结果: $result");
});

6. 停止语音识别

当你想要停止语音识别时,可以调用 stopListening 方法:

await phoneticTyping.stopListening();

7. 处理错误

你可以通过监听 onError 流来处理语音识别过程中可能出现的错误:

phoneticTyping.onError.listen((error) {
  print("识别错误: $error");
});

8. 释放资源

当你不再需要使用语音识别功能时,记得释放资源:

phoneticTyping.dispose();

完整示例

以下是一个完整的示例,展示了如何使用 phonetic_typing 插件实现语音输入功能:

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

class VoiceInputScreen extends StatefulWidget {
  [@override](/user/override)
  _VoiceInputScreenState createState() => _VoiceInputScreenState();
}

class _VoiceInputScreenState extends State<VoiceInputScreen> {
  PhoneticTyping phoneticTyping = PhoneticTyping();
  String recognizedText = "点击按钮开始语音输入";

  [@override](/user/override)
  void initState() {
    super.initState();
    phoneticTyping.onResult.listen((result) {
      setState(() {
        recognizedText = result;
      });
    });

    phoneticTyping.onError.listen((error) {
      setState(() {
        recognizedText = "识别错误: $error";
      });
    });
  }

  [@override](/user/override)
  void dispose() {
    phoneticTyping.dispose();
    super.dispose();
  }

  Future<void> startListening() async {
    await phoneticTyping.startListening();
  }

  Future<void> stopListening() async {
    await phoneticTyping.stopListening();
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("语音输入示例"),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(recognizedText),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: startListening,
              child: Text("开始语音输入"),
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: stopListening,
              child: Text("停止语音输入"),
            ),
          ],
        ),
      ),
    );
  }
}

void main() {
  runApp(MaterialApp(
    home: VoiceInputScreen(),
  ));
}
回到顶部