Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/178.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android flatter,按Enter键后,RawKeyboardListener获取文本_Android_Flutter - Fatal编程技术网

Android flatter,按Enter键后,RawKeyboardListener获取文本

Android flatter,按Enter键后,RawKeyboardListener获取文本,android,flutter,Android,Flutter,我有一个flutter应用程序,在条形码扫描到TextFormField(使用一个物理Android移动设备)后,我需要在其中查找详细信息。扫描仪只是将条形码作为键盘输入发送(末尾有“\n”) 我使用的是RawKeyboardListener,当我手动输入文本并按enter键时,它可以正常工作。然而,当enter键到达RawKeyboardListener时,扫描仪以更高的速率发送击键,TextEditingController仍然为空 我目前正在使用Future.delayed,在尝试阅读文本

我有一个flutter应用程序,在条形码扫描到TextFormField(使用一个物理Android移动设备)后,我需要在其中查找详细信息。扫描仪只是将条形码作为键盘输入发送(末尾有“\n”)

我使用的是RawKeyboardListener,当我手动输入文本并按enter键时,它可以正常工作。然而,当enter键到达RawKeyboardListener时,扫描仪以更高的速率发送击键,TextEditingController仍然为空

我目前正在使用Future.delayed,在尝试阅读文本之前等待500毫秒,此方法有效,但我不太喜欢此解决方案(太脆弱):

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,
            ),
          ),
        ),
      ),
    );
  }
}