Android flatter,按Enter键后,RawKeyboardListener获取文本
我有一个flutter应用程序,在条形码扫描到TextFormField(使用一个物理Android移动设备)后,我需要在其中查找详细信息。扫描仪只是将条形码作为键盘输入发送(末尾有“\n”) 我使用的是RawKeyboardListener,当我手动输入文本并按enter键时,它可以正常工作。然而,当enter键到达RawKeyboardListener时,扫描仪以更高的速率发送击键,TextEditingController仍然为空 我目前正在使用Future.delayed,在尝试阅读文本之前等待500毫秒,此方法有效,但我不太喜欢此解决方案(太脆弱):Android flatter,按Enter键后,RawKeyboardListener获取文本,android,flutter,Android,Flutter,我有一个flutter应用程序,在条形码扫描到TextFormField(使用一个物理Android移动设备)后,我需要在其中查找详细信息。扫描仪只是将条形码作为键盘输入发送(末尾有“\n”) 我使用的是RawKeyboardListener,当我手动输入文本并按enter键时,它可以正常工作。然而,当enter键到达RawKeyboardListener时,扫描仪以更高的速率发送击键,TextEditingController仍然为空 我目前正在使用Future.delayed,在尝试阅读文本
handleKey(RawKeyEvent事件){
var isEnter=event.logicalKey.keyId==LogicalKeyboardKey.enter.keyId | | event.logicalKey.keyId==1108101563381;
if(event.runtimeType.toString()='RawKeyDownEvent'&&isCenter){
打印('-Text:'+_textController.Text);_MyHomePageState();
}
类_MyHomePageState扩展状态{
TextEditingController_textController=新的TextEditingController();
FocusNode_textNode=新的FocusNode();
handleKey(RawKeyEvent事件){
var isEnter=event.logicalKey.keyId==LogicalKeyboardKey.enter.keyId | | event.logicalKey.keyId==1108101563381;
if(event.runtimeType.toString()='RawKeyDownEvent'&&isCenter){
打印('-Text:'+_textController.Text);
未来延迟(常量持续时间(毫秒:500),(){
打印('-Text延迟后:'+_textController.Text);
});
}
}
@凌驾
小部件构建(构建上下文){
返回脚手架(
正文:中(
孩子:大小盒子(
宽度:double.infinity,
身高:300,
子:RawKeyboardListener(
focusNode:focusNode(),
onKey:(事件)=>handleKey(事件),
子项:TextFormField(
控制器:_textController,
focusNode:_textNode,
),
),
),
),
);
}
}
注意:此方法不适用于我(因为它会使文本字段增长):我将撤回我的答案,因为它无法解决您的问题。但是,我建议您使用问题跟踪的链接更新问题,并解释您正在寻找解决方法,因为api有一个bug,而不是它应该以正式方式工作。
handleKey(RawKeyEvent event) {
var isEnter = event.logicalKey.keyId == LogicalKeyboardKey.enter.keyId || event.logicalKey.keyId == 1108101563381;
if (event.runtimeType.toString() == 'RawKeyDownEvent' && isEnter) {
print('- Text: ' + _textController.text); <--- Empty here
Future.delayed(const Duration(milliseconds: 500), () {
print('- Text after delay: ' + _textController.text); <--- '013803266986' here
});
}
}
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
MyHomePage({Key key}) : super(key: key);
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
TextEditingController _textController = new TextEditingController();
FocusNode _textNode = new FocusNode();
handleKey(RawKeyEvent event) {
var isEnter = event.logicalKey.keyId == LogicalKeyboardKey.enter.keyId || event.logicalKey.keyId == 1108101563381;
if (event.runtimeType.toString() == 'RawKeyDownEvent' && isEnter) {
print('- Text: ' + _textController.text);
Future.delayed(const Duration(milliseconds: 500), () {
print('- Text after delay: ' + _textController.text);
});
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: SizedBox(
width: double.infinity,
height: 300,
child: RawKeyboardListener(
focusNode: FocusNode(),
onKey: (event) => handleKey(event),
child: TextFormField(
controller: _textController,
focusNode: _textNode,
),
),
),
),
);
}
}