[英]Firestore data change results is null in flutter
Collection name is userInfo & the data I want to update is name.集合名称是 userInfo & 我要更新的数据是名称。 But when I do that using textfield onChanged value, then the update method changes the value in the collection document to null value.但是当我使用文本字段 onChanged 值执行此操作时,更新方法会将集合文档中的值更改为 null 值。
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:flutter/material.dart';
import 'package:hindusofindia/model/user.dart';
import 'package:hindusofindia/screens/user/UserProfile.dart';
class EditName extends StatefulWidget {
EditName({this.email});
final String email;
@override
_EditNameState createState() => _EditNameState();
}
class _EditNameState extends State<EditName> {
void _changeName(String value) async {
Firestore.instance
.collection("userInfo")
.document(widget.email)
.updateData({"name": value});
}
@override
Widget build(BuildContext context) {
String nameChange='6767';
return Scaffold(
appBar: AppBar(
title: Text('Edit Name'),
flexibleSpace: Container(
decoration: BoxDecoration(
gradient: LinearGradient(
begin: Alignment.topLeft,
end: Alignment.bottomRight,
colors: <Color>[
Colors.orange,
Colors.red,
],
),
),
),
),
body: Column(
children: <Widget>[
TextField(
decoration: InputDecoration(
border: OutlineInputBorder(),
labelText: 'Edit Name',
),
onChanged: (text) {
setState(() {
nameChange = text;
});
},
),
FlatButton(
onPressed: () {
if (nameChange != '6767') {
_changeName(nameChange);
}
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => UserScreen(
currentUser: User(email: widget.email),
),
),
);
},
child: Text('Apply changes'),
)
],
),
);
}
}
But what is supposed to happen is that the textfield name changes results in updating the name value in firebase document collection to the textfield value.但应该发生的是文本字段名称更改导致将 firebase 文档集合中的名称值更新为文本字段值。 Changes will occur after flatbutton is pressed later.稍后按下 flatbutton 后会发生变化。
onChanged: (text) {
setState(() {
nameChange = text;
});
setState()
will call the build()
method again to rebuild the widget tree, but since you declared nameChange
inside the build()
method it will have the same initial value when clicking FlatButton
. setState()
将再次调用build()
方法来重建小部件树,但是由于您在build()
方法中声明了nameChange
,因此在单击FlatButton
时它将具有相同的初始值。 You should declare as an instance variable under the class:你应该在class下声明为一个实例变量:
class _EditNameState extends State<EditName> {
String nameChange = "6767";
//...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.