我有一些表格,我可以在其中填写一些详细信息,例如标题和描述,然后保存。
我还可以扫描一些二维码,如果已知的话,它会搜索该项目。我想要的是,如果二维码无法识别,有一个选项可以添加项目并使用扫描的二维码(名称)预填充标题字段..
我这里有表格:
void _showFormadd(int? id) async {
if (id != null) {
// id == null -> create new item
// id != null -> update an existing item
final existingJournal =
_journals.firstWhere((element) => element['id'] == id);
_titleController.text = existingJournal['title'];
_descriptionController.text = existingJournal['description'];
_aantalController.text = existingJournal['aantal'];
}
showModalBottomSheet(
context: context,
elevation: 5,
isScrollControlled: true,
builder: (_) => Container(
padding: EdgeInsets.only(
top: 15,
left: 15,
right: 15,
// this will prevent the soft keyboard from covering the text fields
bottom: MediaQuery.of(context).viewInsets.bottom + 120,
),
child: Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.end,
children: [
TextField(
controller: _titleController,
),
const SizedBox(
height: 10,
),
TextField(
controller: _descriptionController,
decoration: const InputDecoration(hintText: 'Description'),
),
const SizedBox(
height: 20,
),
TextField(
controller: _aantalController,
decoration: const InputDecoration(hintText: 'Aantal'),
),
const SizedBox(
height: 10,
),
ElevatedButton(
onPressed: () async {
// Save new journal
if (id == null) {
await _addItem();
}
if (id != null) {
await _updateItem(id);
}
// Clear the text fields
_titleController.text = '';
_descriptionController.text = '';
_aantalController.text = '';
// Close the bottom sheet
Navigator.of(context).pop();
},
child: Text(id == null ? 'Create New' : 'Update'),
)
],
),
));
}
当我扫描但未找到该项目时,扫描的代码将在字段中可见:
Text('Scan result : $_scanBarcode\n',
textAlign: TextAlign.center,
style: const TextStyle(fontSize: 20, height: 30)
我的问题是,有什么方法可以改变 Textfield _titleController 中的某些内容,以便结果也可以像上面的文本一样已经存在?
TextField(
controller: _titleController,
在 Setstate 中我尝试了一些方法并且有效,按下按钮时我想要填充的字段被填充。然后才填写的tekst是_scanBarcode,因为它是Text。我可以更改一些内容以便填写 _scanBarcode 扫描结果吗?:
setState(() {
_scanBarcode = barcodeScanRes;
_runFilter(_scanBarcode);
_titleController.value = const TextEditingValue(text: "_scanBarcode");
});
}