Flutter 从某些结果中预填充文本字段

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

我有一些表格,我可以在其中填写一些详细信息,例如标题和描述,然后保存。

我还可以扫描一些二维码,如果已知的话,它会搜索该项目。我想要的是,如果二维码无法识别,有一个选项可以添加项目并使用扫描的二维码(名称)预填充标题字段..

我这里有表格:

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,
flutter forms dart textfield
1个回答
0
投票

在 Setstate 中我尝试了一些方法并且有效,按下按钮时我想要填充的字段被填充。然后才填写的tekst是_scanBarcode,因为它是Text。我可以更改一些内容以便填写 _scanBarcode 扫描结果吗?:

setState(() {
      _scanBarcode = barcodeScanRes;
      _runFilter(_scanBarcode);
      _titleController.value = const TextEditingValue(text: "_scanBarcode");
    });
  }
© www.soinside.com 2019 - 2024. All rights reserved.