Flutter:外部条码扫描仪连续

问题描述 投票:0回答:2

我正在开发一个颤振应用程序,流程如下

  1. 扫描号码(外接蓝牙条码扫描仪)
  2. 上传条码数据
  3. 重复1,2步骤c

我可以扫描并上传第一个数据。然后我清除了文本。但我无法将光标放在 _text 控制器上。

我不想每次在扫描文本字段之前都按文本字段。

TextField(
                controller: _text,
                  textInputAction: TextInputAction.go,
                onSubmitted: (value) {
                  print(submit online using function");
                  _text.clear();
                  _text.selection= TextSelection.collapsed(offset: -1);

                },
                decoration: const InputDecoration(
                  icon: Icon(Icons.person),
                  hintText: 'Enter ID',
                  labelText: 'Enter ID',
                ),
                autofocus: true,
                keyboardType: TextInputType.number,
                inputFormatters: <TextInputFormatter>[
                  WhitelistingTextInputFormatter.digitsOnly
                ],
              ),
flutter dart barcode-scanner
2个回答
2
投票
   TextFormField(
          enabled: true,
          autofocus: true,
          autocorrect: false,
          textInputAction: TextInputAction.done,
          keyboardType: TextInputType.text,
          focusNode: focusBarCode,
          onFieldSubmitted: (val) {
            print(val); // the scan value
            //process the val
            barCodecontroller.text =""; // set to blank again
            focusBarCode.requestFocus();//set focus again, so u can 
                                        //scan again
       `enter code here`},
       controller: barCodecontroller,
    ),

0
投票

外部条形码扫描仪的工作原理如下: 用户界面上的第一个字段将被点击或发生什么...所以请确保将该字段放置在布局的顶部...因此,当条形码数据进入该字段时,您所要做的就是清除该字段并将焦点重置到字段上(编辑文本).. 在这些情况下,更建议使用编辑文本。还可以尝试使用延迟最多 1.5 秒的 Looper 来清除编辑文本中的文本。

// Define the TextEditingController
final TextEditingController barcodeTextController = TextEditingController();

EditText(
  autofocus: true,
  keyboardType: TextInputType.text,
  focusNode: focusBarCode,
  onSubmitted: (val) async {
    print(val); // the scan value
    await Future.delayed(Duration(milliseconds: 1500)); // Delay for 1.5 seconds
    barCodeController.clear(); // Clear the text
    focusBarCode.requestFocus(); // Set focus again for the next scan
  },
  controller: barCodeController,
),
© www.soinside.com 2019 - 2024. All rights reserved.