【发布时间】:2021-04-02 15:25:15
【问题描述】:
所以我正在尝试将数据保存到 Firestore,但我有一个要注册的课程,其中包含以下代码:
FirebaseAuth auth = FirebaseAuth.instance;
await auth.createUserWithEmailAndPassword(
email: emailController.text, password: passwordController.text)
.then((value) => {
Navigator.pushNamed(context, 'DialogFlow'),
user=auth.currentUser,
user.sendEmailVerification(),
DatabaseService(uid:user.uid).UpdateUserData("", emailController.text, ChatScreenState().mess)
这会将我导航到包含以下代码的对话框流:
@override
Widget build(BuildContext context) {
final firebaseUser = context.watch<User>();
FirebaseAuth auth = FirebaseAuth.instance;
user=auth.currentUser;
DatabaseService db = DatabaseService(uid: user.uid);
return StreamBuilder(
stream: db.userData,
builder: (context , snapshot){
Userdata userdata=snapshot.data;
print("====================================");
print(snapshot.data);
print("====================================");
if (userdata != null) {
this.userTestMessage = "";
shhh = pressed ? true : false;
flag = true;
if (!Retrieved_messages) {
this.messsages = userdata.messsages; //Retrieve user data from firebase only once.
// Retrieve user data from firebase only once.
Retrieved_messages = true;
}//load only 20 messages at once . When we scroll up load more.
db.UpdateUserData(
firebaseUser.displayName, firebaseUser.email, this.messsages);
print(userdata.messsages);
print(mess);
print(userdata.messsages);
print("==============================");
print(snapshot.data);
print("==============================");
}
if (db.getUserMessages() == null) {
if (firebaseUser != null) {
db.UpdateUserData(
firebaseUser.displayName, firebaseUser.email, this.messsages);
}
}
数据库类是
DatabaseService({this.uid, this.messsages});
final CollectionReference userCollection = FirebaseFirestore.instance
.collection('users');
UpdateUserData(String Username, String Email,
List messsages) async
{ try {
return await FirebaseFirestore.instance.collection("users").doc(uid).set({
'Username': Username,
'Email': Email,
'messsages': messsages,
}
);
}catch(e){
print(e+" this is the error");
}
}
Future getUserMessages() async
{
FirebaseFirestore.instance.collection(uid).snapshots();
}
Userdata _userDataFromSnapshot(DocumentSnapshot snapshot) {
return Userdata(uid: uid,
name: snapshot.data()['Username'],
email: snapshot.data()['Email'],
messsages: snapshot.data()['messsages']
);
}
Stream<Userdata> get userData {
return userCollection.doc(uid).snapshots().map(_userDataFromSnapshot);
}
}
我面临的问题是,每当我创建一个新用户并尝试保存新消息时,firestore 会不断保存和删除消息,所以它处于无限循环中,所以我希望有人能告诉我我怎样才能解决它保存消息而不删除它们。
注意:快照数据不会更新。
【问题讨论】:
标签: flutter