gpt4 book ai didi

firebase - Firebase:让用户分别与服务器通信

转载 作者:行者123 更新时间:2023-12-03 03:35:16 26 4
gpt4 key购买 nike

我已经用Flutter和Firebase构建了一个ToDo应用程序,但是现在我遇到的问题是,每个设备都显示相同的ToDos。 那么,如何让他们每个人分别与服务器通信,以便每个设备/用户都可以拥有自己的ToDos?那是我的代码。我还使用FloatingAciontbutton创建ToDos。

String input = "";


createTodos() {
DocumentReference documentReference =
Firestore.instance.collection("MyTodos").document(input);

//Map
Map<String, String> todos = {"todoTitle": input};

documentReference.setData(todos).whenComplete(() {
print("$input created");
});
}

deleteTodos(item) {
DocumentReference documentReference =
Firestore.instance.collection("MyTodos").document(item);


documentReference.delete().whenComplete(() {
print("$item deleted");
});
}

moveTodos(item) {
DocumentReference documentReference =
Firestore.instance.collection("MoveTodos").document(item);

//Map
Map<String, String> todos = {"todoMove": item};

documentReference.setData(todos).whenComplete(() {
print("$input moved");
});
}




@override
Widget build(BuildContext context) {
return Scaffold(
body: StreamBuilder(
stream: Firestore.instance.collection("MyTodos").snapshots(),
builder: (context, snapshots){

if(snapshots.data == null) return CircularProgressIndicator();

return ListView.builder(
shrinkWrap: true,
itemCount: snapshots.data.documents.length,
itemBuilder: (context, index) {
DocumentSnapshot documentSnapshot = snapshots.data.documents[index];
return Dismissible(
background: Container(
color: Colors.green,
alignment: Alignment(-0.9, 0),
child: Icon(Icons.check, color: Colors.white,),
),
secondaryBackground: Container(
color: Colors.red,
alignment: Alignment(0.9, 0),
child: Icon(Icons.delete, color: Colors.white,),
),
onDismissed: (direction) {
if (direction == DismissDirection.startToEnd) {
moveTodos(documentSnapshot["todoTitle"]);
deleteTodos(documentSnapshot["todoTitle"]);
} else
if (direction == DismissDirection.endToStart) {
deleteTodos(documentSnapshot["todoTitle"]);
}
},
key: Key(documentSnapshot["todoTitle"]),
child: Container(
margin: EdgeInsets.all(8),
child: Card(
margin: EdgeInsets.zero,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(10)
),
color: Colors.grey[300],
child: ListTile(
title: Text(documentSnapshot["todoTitle"] ?? "No ToDos yet!"),
trailing: Wrap(
children: <Widget>[
IconButton(
icon: Icon(Icons.check),
color: Colors.green,
onPressed: (){
moveTodos(documentSnapshot["todoTitle"]);
deleteTodos(documentSnapshot["todoTitle"]);
} ),
IconButton(
icon: Icon(Icons.delete),
color: Colors.red,
onPressed: (){
deleteTodos(documentSnapshot["todoTitle"]);
} ),
],
)
),
),
decoration: BoxDecoration(
color: Colors.grey[300],
borderRadius: BorderRadius.all(Radius.circular(10)),
boxShadow: [
BoxShadow(
color: Colors.grey[500],
offset: Offset(4.0, 4.0),
blurRadius: 15.0,
spreadRadius: 1.0
),
BoxShadow(
color: Colors.white,
offset: Offset(-4.0, -4.0),
blurRadius: 15.0,
spreadRadius: 1.0
),
]
),
),
);
});
}),

最佳答案

您需要创建一个用户集合:

users(collection) --> userId(document) -> userData

然后,您可以创建一个待办事项集合:
myTodos(collection) --> userId(document) --> todoData

因此,在创建时,您可以执行以下操作:
  createTodos() async{
FirebaseUser user = await FirebaseAuth.instance.currentUser;
DocumentReference documentReference =
Firestore.instance.collection("MyTodos").document(user.uid);

//Map
Map<String, String> todos = {"todoTitle": input};

documentReference.setData(todos).whenComplete(() {
print("$input created");
});
}

使用 uid,您可以检索每个用户的待办事项

关于firebase - Firebase:让用户分别与服务器通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61497267/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com