filter - 使用文本到语音进行搜索仅适用于语音或文本字段
问题描述
所以我有一个普通的 TextField ,我用它过滤一个列表
children: products.map((doc) => _buildSingleProduct(doc)).toList(),
,它可以正常工作,然后我向它添加了一个文本到语音的插件speech_recognition:
,并将它与过滤功能结合起来,它工作得很好。问题是当我完成语音过滤时,例如我想通过写入不再过滤的 TextField 来添加或更正它。
文本域
child: TextField(
controller: controller,
decoration: InputDecoration(
labelText: allTranslations.text(StringConstant.search),
prefixIcon: Icon(Icons.search),
suffixIcon: IconButton(
icon: Icon(Icons.mic),
onPressed: () {
if (_isAvailable && !_isListening)
_speechRecognition
.listen(locale: "en_US")
.then((result) => print('$result'));
},
),
),
),
正如你所看到的,有controller
一个我用来过滤的,然后是麦克风图标将结果从语音传递到控制器,如下所示:
_speechRecognition
.setRecognitionResultHandler((String result) => setState(() {
controller = TextEditingController(text: resultText = result);
}));
在这里,我从语音中获取结果并将其添加到过滤器和控制器的 resultText 中,以便它出现在 textField 中。
如果我这样做:
_speechRecognition
.setRecognitionResultHandler((String speech) => setState(() => resultText = speech));
它工作得很好,但文本显然没有出现在文本字段中。
对于 textField 过滤,我初始化状态以将其添加到 resultText:
initState() {
initSpeechRecognizer();
controller.addListener(() {
setState(() {
resultText = controller.text;
});
});
super.initState();
}
这就是我从数据库返回结果的方式:
return resultText == null || resultText == ""
? buildProducts(id, title, favorite, message, price, doc)
: doc.data['title'].toLowerCase().contains(resultText.toLowerCase())
? buildProducts(id, title, favorite, message, price, doc)
: Container();
正如您可能看到的那样,我搜索了标题。
于是问题又来了一次,
1.语音搜索
它出现在 textField 并过滤列表
当我按 textField 更改查询时,它不再过滤。
但反过来也行
用文本过滤列表
它过滤列表
我激活了语音到文本,它会更改查询并使用新查询过滤列表。
解决方案
所以对于需要解决方案的人
_speechRecognition
.setRecognitionResultHandler((String result) => setState(() {
resultText = result;
controller.text = resultText;
}));
您从语音中获得结果,将其添加到处理变量中,但您也可以将该结果添加到控制器中,以便在 textField 中获得结果。
推荐阅读
- ms-access - 使用组合框值过滤 VBA 中的查询时出现语法错误
- runtime-error - 清单合并失败并出现多个错误,请参阅 Android Studio 中的日志
- performance - 如何在 DO 循环中优化 Fortran IF-ELSE?
- javascript - 获取函数参数的名称
- sql - 获取平均天数
- java - 在独立的 MockMvc 中测试 @Validated RestController 不起作用
- wso2 - WSO2 IS:多租户模式下基于角色的身份验证/授权
- android - Android - 如何将 startForegroundService() 和 startForeground() 用于 API-28?
- javascript - 在 VueJs 上方打开 Select2 下拉菜单时搜索框位置错误
- python - 计算每分钟的列值总和