Flutter 如何使用flatter将值从firebase设置为TextFieldForm
我正在使用StreamBuilder从Firestore获取数据。 但是,我不知道如何在TextFormField上设置特定数据。 我正在尝试使用TextEditingController将文本放在TextFormField上 我可以获取firestore的文档IDFlutter 如何使用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
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子句。