【问题标题】:Flutter : Adding TextField and Getting Value From itFlutter:添加 TextField 并从中获取价值
【发布时间】:2021-03-08 17:30:24
【问题描述】:

我正在尝试添加两个 TextField,其中将有两个部分。其中一个是学生编号,第二个是学校编号。

当我在用于学生编号的文本字段中写入 1234 并在学校编号的文本字段中写入 4321 时,我必须获取它们并将它们放在代码中的某个位置,如此处所示;

这是我在这里使用的代码块;

        class DocUploadScreen extends StatefulWidget {
        createState() => _DocUploadScreenState();
            }

         class _DocUploadScreenState extends State<DocUploadScreen> {

         File _imageFile;

         Future<void> _pickImage(ImageSource source) async {
         File selected = await ImagePicker.pickImage(source: source);

         setState(() {
         _imageFile = selected;
          });
            }

         void _clear() {
         setState(() => _imageFile = null);
              }

         @override
         Widget build(BuildContext context) {
         return Scaffold(
         appBar: AppBar(
         title: Text("FÖY YÜKLEME EKRANI"),
           ),
           bottomNavigationBar: BottomAppBar(
           child: Row(
           crossAxisAlignment: CrossAxisAlignment.center,
           mainAxisAlignment: MainAxisAlignment.spaceEvenly,
           children: <Widget>[
             IconButton(
             icon: Icon(
             Icons.photo_camera,
             size: 30,
              ),
                onPressed: () => _pickImage(ImageSource.camera),
                color: Colors.blue,
              ),
                 IconButton(
                 icon: Icon(
                  Icons.photo_library,
                  size: 30,
                 ),
                    onPressed: () => _pickImage(ImageSource.gallery),
                    color: Colors.red,
                      ),
                         ],
                            ),
                                ),
                        body: ListView(
                        children: <Widget>[
                          if (_imageFile != null) ...[
                            Container(
                             padding: EdgeInsets.all(32), child: Image.file(_imageFile)),
                              Row(
                               mainAxisAlignment: MainAxisAlignment.spaceEvenly,
                               children: <Widget>[
                               FlatButton(
                               color: Colors.blueAccent,
                                textColor: Colors.white,
                                child: Icon(Icons.refresh),
                                 onPressed: _clear,
                                   ),
                                     ],
                                        ),
                                           Padding(
                                           padding: const EdgeInsets.all(32),
                                           child: Uploader(
                                           file: _imageFile,
                                            ),
                                                )
                                                   ]
                                                       ],
                                                            ),
                                                                );
                                                                   }
                                                                      }

            class Uploader extends StatefulWidget {
            final File file;

             Uploader({Key key, this.file}) : super(key: key);

             createState() => _UploaderState();
                }

               class _UploaderState extends State<Uploader> {
               final FirebaseStorage _storage =
                FirebaseStorage(storageBucket: 'gs://emo-is0.appspot.com');

                 StorageUploadTask _uploadTask;

                  _startUpload() async {

我将从文本字段(schoolno 和 studentno)获取值:

                   String filePath = 'schoolno/studentno/documents/${DateTime.now()}.png';



                   StorageUploadTask _uploadTask = 
                              _storage.ref().child(filePath).putFile(widget.file);

                      StorageTaskSnapshot taskSnapshot = await _uploadTask.onComplete;
                     Navigator.push(
                       context,
                           MaterialPageRoute(
                              builder: (context) =>
                                     (InvoiceUploadScreen())));
                                 }

我这里有 2 个问题;

  1. 我需要将 TextFields 放在哪里,以便我可以获取值并放在下面看到的位置,
  2. 如何从 TextFields 中获取值并将其放入?还有我如何在文本字段中使用验证器,因为学校和学生都不必提供才能用于上传到存储?

请指教!

【问题讨论】:

    标签: firebase flutter dart firebase-storage textfield


    【解决方案1】:

    如果您想从文本字段中检索值,最好的方法是使用 TextEditingController,您将控制器传递给 TextField,您可以通过使用带有文本值的控制器来访问文本。

    TextEditingController controller = TextEditingController():
    
    TextField(
     controller: controller,
    )
    

    要访问您使用 controller.text 的文本,您甚至可以根据需要更新文本的值。

    我不确定您对验证器的确切含义。

    【讨论】:

    • 在我的代码块中,我应该把这些代码放在哪里才能实现文本字段。使用验证器文本字段必须填充值。如果出现空文本字段,它应该给出错误提示文本字段不能为空
    【解决方案2】:

    您的第一个问题非常令人困惑。 TextField 是一个小部件,因此它将被放置在 Widget build() {} 中。

    如果您不了解小部件是什么,我建议您阅读docs。如果您想要的是“将 UI 放在哪里”,那么由您决定。

    对于您的第二个问题,作为@ayad 的回答,使用保存文本字段值的 TextEditingController。对于 TextField 的验证,还有一个关于它的 docs

    【讨论】:

      猜你喜欢
      • 2021-07-22
      • 1970-01-01
      • 1970-01-01
      • 2019-08-27
      • 2021-03-09
      • 2020-06-01
      • 1970-01-01
      • 2022-01-18
      • 2019-01-18
      相关资源
      最近更新 更多