flatter:Firebase从userID读取数据
我正在用flatter构建一个ToDo应用程序。现在我添加了一个匿名登录,这样每个设备都有自己的TODO。但所有设备仍显示相同的TODO。我试图添加.document(user.uid),但没有成功,因为“user”的下划线是红色的。那么,我如何读取该设备上一个用户的数据呢?我遇到的另一个问题是,ToDo不会添加到数据库中userID文档中的现有文档中,否则它只会更新“旧”文档。这是我的代码:(如果你需要代码的另一部分,请告诉我)flatter:Firebase从userID读取数据,firebase,flutter,google-cloud-firestore,Firebase,Flutter,Google Cloud Firestore,我正在用flatter构建一个ToDo应用程序。现在我添加了一个匿名登录,这样每个设备都有自己的TODO。但所有设备仍显示相同的TODO。我试图添加.document(user.uid),但没有成功,因为“user”的下划线是红色的。那么,我如何读取该设备上一个用户的数据呢?我遇到的另一个问题是,ToDo不会添加到数据库中userID文档中的现有文档中,否则它只会更新“旧”文档。这是我的代码:(如果你需要代码的另一部分,请告诉我) 类主页扩展StatefulWidget{ @凌驾 _HomePa
类主页扩展StatefulWidget{
@凌驾
_HomePageState createState()=>\u HomePageState();
}
类_HomePageState扩展状态{
字符串输入=”;
createTodos()异步{
FirebaseUser=等待FirebaseAuth.instance.currentUser();
文档参考文档参考=
Firestore.instance.collection(“MyTodos”).document(user.uid);
//地图
映射todos={“todoTitle”:input};
documentReference.setData(todos).完成时(){
打印(“$input created”);
});
}
删除TODOS(项目){
文档参考文档参考=
Firestore.instance.collection(“users”).document();
documentReference.delete()。当完成(){
打印(“$item deleted”);
});
}
移动待办事项(项目){
文档参考文档参考=
Firestore.instance.collection(“用户”).文档(项目);
//地图
映射todos={“todoMove”:item};
documentReference.setData(todos).完成时(){
打印(“$input moved”);
});
}
@凌驾
小部件构建(构建上下文){
返回脚手架(
浮动操作按钮:浮动操作按钮(
已按下:(){
显示对话框(
上下文:上下文,
生成器:(BuildContext上下文){
返回警报对话框(
背景颜色:颜色。灰色[300],
标题:文本('添加待办事项',
样式:TextStyle(fontWeight:fontWeight.bold),
形状:圆形矩形边框(
边界半径:边界半径。圆形(15)
),
内容:TextField(
onChanged:(字符串值){
输入=值;
},
),
行动:[
扁平按钮(
已按下:(){
createTodos();
Navigator.of(context.pop();
},
子项:文本('Add'))
],
);
});
},
子:容器(
宽度:200,
身高:200,
子项:图标(Icons.add,颜色:Colors.grey[700],),
装饰:盒子装饰(
颜色:颜色。灰色[300],
borderRadius:borderRadius.all(半径.圆形(50)),
boxShadow:[
箱形阴影(
颜色:颜色。灰色[500],
偏移量:偏移量(4.0,4.0),
半径:15.0,
扩展半径:1.0
),
箱形阴影(
颜色:颜色,白色,
偏移量:偏移量(-4.0,-4.0),
半径:15.0,
扩展半径:1.0
),
]
),
)
),
正文:StreamBuilder(
流:Firestore.instance.collection(“用户”).snapshots(),
生成器:(上下文、快照){
if(snapshots.data==null)返回CircularProgressIndicator();
返回ListView.builder(
收缩膜:对,
itemCount:snapshots.data.documents.length,
itemBuilder:(上下文,索引){
DocumentSnapshot DocumentSnapshot=snapshots.data.documents[索引];
可驳回的回报(
背景:集装箱(
颜色:颜色。绿色,
对齐:对齐(-0.9,0),
子:图标(Icons.check,颜色:Colors.white,),
),
第二背景:容器(
颜色:颜色,红色,
对齐:对齐(0.9,0),
子:图标(Icons.delete,颜色:Colors.white,),
),
onDismissed:(方向){
如果(方向==解除方向.开始结束){
moveTodos(documentSnapshot[“todoTitle”]);
deleteTodos(documentSnapshot[“todoTitle”]);
}否则
if(direction==DismissDirection.endToStart){
deleteTodos(documentSnapshot[“todoTitle”]);
}
},
key:key(documentSnapshot[“todoTitle”]),
子:容器(
保证金:全部(8),
孩子:卡片(
边距:EdgeInsets.zero,
形状:圆形矩形边框(
边界半径:边界半径。圆形(10)
),
颜色:颜色。灰色[300],
孩子:ListTile(
标题:文本(documentSnapshot[“待办事项”]??“还没有待办事项!”),
尾随:包裹(
儿童:[
图标按钮(
图标:图标(图标。检查),
颜色:颜色。绿色,
已按下:(){
moveTodos(documentSnapshot[“todoTitle”]);
deleteTodos(documentSnapshot[“todoTitle”]);
class HomePage extends StatefulWidget {
@override
_HomePageState createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> {
String input = "";
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");
});
}
deleteTodos(item) {
DocumentReference documentReference =
Firestore.instance.collection("users").document();
documentReference.delete().whenComplete(() {
print("$item deleted");
});
}
moveTodos(item) {
DocumentReference documentReference =
Firestore.instance.collection("users").document(item);
//Map
Map<String, String> todos = {"todoMove": item};
documentReference.setData(todos).whenComplete(() {
print("$input moved");
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
floatingActionButton: FloatingActionButton(
onPressed: () {
showDialog(
context: context,
builder: (BuildContext context) {
return AlertDialog(
backgroundColor: Colors.grey[300],
title: Text('Add ToDo',
style: TextStyle(fontWeight: FontWeight.bold),),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(15)
),
content: TextField(
onChanged: (String value) {
input = value;
},
),
actions: <Widget>[
FlatButton(
onPressed: () {
createTodos();
Navigator.of(context).pop();
},
child: Text('Add'))
],
);
});
},
child: Container(
width: 200,
height: 200,
child: Icon(Icons.add, color: Colors.grey[700],),
decoration: BoxDecoration(
color: Colors.grey[300],
borderRadius: BorderRadius.all(Radius.circular(50)),
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
),
]
),
)
),
body: StreamBuilder(
stream: Firestore.instance.collection("users").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
),
]
),
),
);
});
}),
backgroundColor: Colors.grey[300],
);
}
}
stream: Firestore.instance.collection("users").snapshots(),
stream: Firestore.instance.collection("users")
.where('userId', isEqualTo: user.uid)
.snapshots()