我正在开发一个颤振应用程序,流程如下
我可以扫描并上传第一个数据。然后我清除了文本。但我无法将光标放在 _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
],
),
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,
),
外部条形码扫描仪的工作原理如下: 用户界面上的第一个字段将被点击或发生什么...所以请确保将该字段放置在布局的顶部...因此,当条形码数据进入该字段时,您所要做的就是清除该字段并将焦点重置到字段上(编辑文本).. 在这些情况下,更建议使用编辑文本。还可以尝试使用延迟最多 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,
),