Имя коллекции - userInfo, а данные, которые я хочу обновить, - это имя. Но когда я делаю это с использованием значения onChanged текстового поля, тогда метод обновления изменяет значение в документе коллекции на нулевое значение.
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'),
)
],
),
);
}
}
Но что должно произойти, так это то, что изменение имени текстового поля приводит к обновлению значение имени в коллекции документов firebase к значению текстового поля. Изменения произойдут после нажатия плоской кнопки позже.