我有一部连接了条形码扫描仪的手机。扫描仪读取条形码时,必须将其记录在屏幕上所需的字段中。如果该字段最初是通过点击它来激活的,则此方法有效。但扫描的条形码必须适合该字段,即使它尚未被用户激活。也就是说,您需要创建某种事件,期望某些文本到达并在自动字段中输入此文本。请告诉我如何做到这一点?或者也许已经有现成的插件?
更新1:扫描字段时,需要barcode
写入一个字符串,即使该字段未激活(未选中焦点)
class DocumentsScreen extends StatefulWidget {
final DocumentsModel documentInfo;
const DocumentsScreen({Key key, this.documentInfo})
: super(key: key);
@override
_DocumentsScreen createState() =>
_DocumentsScreen(documentInfo);
}
class _DocumentsScreen extends State<DocumentsScreen> {
final DocumentsModel documentInfo;
_DocumentsScreen(this.documentInfo);
TextEditingController barcode = new TextEditingController();
FocusNode barcodeFocus = new FocusNode();
DocumentInfoModel arrivalDocumentInfo =
new DocumentInfoModel(documentItems: new List<DocumentItems>());
int _sortIndex;
bool _sortAscending = false;
@override
void initState() {
onRefresh();
super.initState();
}
@override
Widget build(BuildContext context) {
return new Scaffold(
appBar: new AppBar(
title: new TextLeft(
'${documentInfo.documentName}', TextStyleBase.whiteSize15),
),
body: new RefreshIndicator(
child: new Column(
children: <Widget>[
new Row(
children: <Widget>[
new Expanded(
child: new TextField(
controller: barcode,
focusNode: barcodeFocus,
decoration: new InputDecoration(
hintText: 'Просканируйте штрих-код'),
onEditingComplete: () {
if (barcode.text != '') {
// Some code...
}
},
),
),
new VoidIconButton(Icons.clear, Colors.red, () {
barcode.clear();
}),
],
),
new Expanded(
child: new ListView(
children: <Widget>[
// Some code...
],
),
),
// Some code...
],
),
onRefresh: onRefresh),
);
}
Future onRefresh() async {
documentService
.documentItemsByDocumentId(documentInfo.documentId)
.then((document) {
setState(() {
arrivalDocumentInfo = document;
barcode.clear();
barcodeFocus.requestFocus();
});
});
}
// Some code...
}