只为记录的用户在Flutter中获取Firestore数据



我是StackOverFlow和Flutter的新手。我正在Flutter中开发我的第一个应用程序,我成功地将AUTH firebase连接到了登录和注册表单。现在我在应用程序中创建了另一个表单,它从用户那里收集其他详细信息,这是一个地址簿。这个地址簿在firestore中创建了一个新的集合,在flutter的另一个屏幕中,我想获取这些数据,但仅针对登录的用户,目前我可以使用streambuilder检索数据,但我从firestore中的所有文档中获取数据。我想我需要在字段中使用一个名为user_id的东西,以便只导入来自特定用户的数据。这里有什么好的开发人员愿意帮助我吗?在用户下方创建。。。

try {
final newUser =
await _auth.createUserWithEmailAndPassword(
email: email, password: password);
if (newUser != null) {
Navigation..);
}

这是为了在消防仓库中创建一个新的集合

void createRecord() async {
await databaseReference.collection("shippingAddress").add({
'alias': '$alias',
'shippingName': '$shippingName',
'shippinglastName': '$shippinglastName',
'street': '$street',
'streetNumber': '$streetNumber',
'zipNumber': '$zipNumber',
'phoneNumber': '$phoneNumber',
'textMessage': '$textMessage',
'totalQuantity': '$totalQuantity',
'totalWeight': '$totalWeight',
}).then((value) {
print(value.documentID);
});
}

现在我需要获得上面的集合,但只针对登录的用户,我使用了以下代码:

return StreamBuilder(
stream: Firestore.instance.collection('shippingAddress').snapshots(),
builder: (context, snapshot) {
if (!snapshot.hasData) return Text('Loading data please Wait');
return Column(
children: <Widget>[
Container(
height: 350,
child: ListView.builder(
shrinkWrap: true,
itemCount: snapshot.data.documents.length,
itemBuilder: (BuildContext context, int index) {
return Card(
color: Color(0xFF1f2032),
elevation: 15,
child: Container(
width: 60,
height: 60,
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceAround,
children: <Widget>[
Card(
color: Color(0xfffeaf0d),
child: Container(
height: 40,
width: 40,
child: Icon(
Icons.local_shipping,
color: Colors.white,
size: 25,
)),
),
Text(
snapshot.data.documents[index]['alias'],

使用上面的代码,我将所有数据都放入小部件中,但不是针对特定用户。这里是获取代码

class CollectData extends StatefulWidget {
@override
_CollectDataState createState() => _CollectDataState();
}
class _CollectDataState extends State<CollectData> {
String phone, wifeName, preferredLocation;
_CollectDataState({this.phone,this.wifeName,this.preferredLocation});

Stream<DocumentSnapshot> getData() async* {
FirebaseUser user = await FirebaseAuth.instance.currentUser();
yield* Firestore.instance.collection('shippingAddress').document(user.uid).snapshots();
}
@override
Widget build(BuildContext context,) {
return StreamBuilder(
stream: getData(),
builder: (context, snapshot){
return Column(
children: [
Text(phone),
Text(wifeName),
Text(preferredLocation),
],
);
},
);
}
}

我得到一个非空字符串必须提供给一个文本小部件。

请帮助

创建新文档时,可以使用userId作为文档id:

void createRecord() async {
FirebaseUser user = await FirebaseAuth.instance.currentUser();
await databaseReference.collection("shippingAddress").document(user.uid).setData({
'alias': '$alias',
'shippingName': '$shippingName',
'shippinglastName': '$shippinglastName',
'street': '$street',
'streetNumber': '$streetNumber',
'zipNumber': '$zipNumber',
'phoneNumber': '$phoneNumber',
'textMessage': '$textMessage',
'totalQuantity': '$totalQuantity',
'totalWeight': '$totalWeight',
}).then((value) {
});
}

然后,当使用StreamBuilder时,您可以从登录用户检索数据,创建一个返回Stream:的方法

Stream<DocumentSnapshot> getData()async*{
FirebaseUser user = await FirebaseAuth.instance.currentUser();
yield* Firestore.instance.collection('shippingAddress').document(user.uid).snapshots();
}

在`StreamBuilder:中

return StreamBuilder(
stream: getData(),
builder: (context, snapshot) {

最新更新