Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 如何使用flatter将值从firebase设置为TextFieldForm_Flutter_Dart - Fatal编程技术网

Flutter 如何使用flatter将值从firebase设置为TextFieldForm

Flutter 如何使用flatter将值从firebase设置为TextFieldForm,flutter,dart,Flutter,Dart,我正在使用StreamBuilder从Firestore获取数据。 但是,我不知道如何在TextFormField上设置特定数据。 我正在尝试使用TextEditingController将文本放在TextFormField上 我可以获取firestore的文档ID import 'package:cloud_firestore/cloud_firestore.dart'; import 'package:flutter/material.dart'; class EditPage exten

我正在使用StreamBuilder从Firestore获取数据。 但是,我不知道如何在TextFormField上设置特定数据。 我正在尝试使用TextEditingController将文本放在TextFormField上

我可以获取firestore的文档ID

import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:flutter/material.dart';

class EditPage extends StatefulWidget {
  final String memberID;

  EditPage({Key key, @required this.memberID});

  @override
  _EditPageState createState() => _EditPageState();
}

class _EditPageState extends State<EditPage> {
  TextEditingController lastNameController = TextEditingController();
  TextEditingController firstNameController = TextEditingController();

  void _editMember() {
    Firestore.instance.collection('members').document('cGbVJaL7Ib4S3cKXBQmE').updateData({
      'last_name': lastNameController.text,
    });

    setState(() {
    });
  }

  @override
  void initState(){
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    final _formKey = GlobalKey<FormState>();
    return Scaffold(
      appBar: AppBar(
        title: Text('Update Member'),
      ),
      body: Form(
        key: _formKey,
        child: new StreamBuilder <QuerySnapshot>(
              stream: Firestore.instance.collection('members').snapshots(),
              builder: (BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot) {
                if(snapshot.hasError){
                  return new Text('Error: ${snapshot.error}');
                }
                switch (snapshot.connectionState){
                  case ConnectionState.waiting:
                    return new Text('Loading...');
                  default:
                    return Column(
                      mainAxisAlignment: MainAxisAlignment.center,
                      children: <Widget> [
                        Text('${widget.memberID}'),
                        TextFormField(
                          controller: lastNameController,
                          decoration: const InputDecoration(
                            contentPadding: EdgeInsets.symmetric(vertical: 10),
                            border: OutlineInputBorder(),
                            filled: true,
                            icon: Icon(Icons.account_circle),
                            labelText: 'Name',
                          ),
                          validator: (value){
                            if(value.isEmpty){
                              return 'Requierd';
                            }
                            return null;
                          },
                        ),
                        new GestureDetector(
                          onTap: (){
                            print('Register!!');
                            _editMember();
                            Navigator.pop(context);
                          },
                          child:
                          new Container(
                            height: 54.00,
                            width: 311.00,
                            child: new Row(
                                crossAxisAlignment: CrossAxisAlignment.center,
                                mainAxisAlignment: MainAxisAlignment.center,
                                children: <Widget>[
                                  Text('Update'),
                                ]
                            ),
                            decoration: BoxDecoration(
                              color: Color(0xffffa031),borderRadius: BorderRadius.circular(27.00),
                            ),
                          ),
                        ),
                      ],
                    );
                }
              }
            ),
        ),
      );
  }
}
你能给我一些建议吗

您可以使用TextEditingController并基于Firestore更新initState中TextFormField的值

  // Declare your controller and set the initial value
  TextEditingController firstNameController = TextEditingController(text: 'initial value');

  @override
  initState() {
    Firestore.instance
        .collection('members')
        .snapshots()
        .listen((QuerySnapshot snapshot) {
      // Update the TextFormField value here
      firstNameController.text = snapshot.documents.first['something'];
    });
    super.initState();
  }

它使用了我期望的以下代码

Firestore.instance.collection("members").document("docID").get().then((value){
      print(value.data);
});

谢谢你的建议。

是的。使用TextEditingController是一个正确的选择。你的建议是什么意思?当我在StreamBuilder范围内使用TextEditingController实例时,它超出了范围。你能发布完整的代码吗?我上传了这里来展示你是如何使用TextEditingContoller的。是的,我知道当TextFormField值改变时,setState会导致。我的问题是如何在第一次调用页面时设置值,然后在Firebase的TextFormField上设置值。我想我就快到了。在这种情况下,我只能获取集合中的第一个数据。如何从firebase中的文档ID中获取?这是一个示例。如果只想通过id查询一个文档,则需要使用where子句。