firebase - Cloud FireStore 具有相同 iD 的多个文档,即用户 UID
问题描述
我想知道如何显示与同一 USER UID 相关的多个文档
目前我的APP只显示一个pdf文档
我该怎么做才能显示同一用户的多个文档???我很困惑,这个逻辑应该如何工作,是否可以在没有 SQL 的情况下做到这一点?
我只知道如何使用用户 UID 获取单个文档。
我的代码:
class Home extends StatefulWidget {
@override
_HomeState createState() => _HomeState();
}
class _HomeState extends State<Home> {
FirebaseFirestore firestore = FirebaseFirestore.instance;
FirebaseAuth auth = FirebaseAuth.instance;
int _currentIndex = 0;
@override
Widget build(BuildContext context) {
final User user = auth.currentUser;
final uid = user.uid;
final tabs = [
Center(
child: (Scaffold(
body: FutureBuilder(
future: FirebaseFirestore.instance
.collection('users')
.doc(uid)
.get(),
builder: (context, AsyncSnapshot snapshot) {
if (snapshot.data == null)
return CircularProgressIndicator();
DocumentSnapshot manuais = snapshot.data;
if (snapshot.hasData) {
print('ok');
print(manuais.data()['nome']);
} else {
print('nopeeeee');
}
return Container(
padding: EdgeInsets.all(16),
child: ListView.builder(
itemCount : 1,
itemBuilder: (context, index) {
DocumentSnapshot manuais = snapshot.data;
return Card(
color: Colors.grey[250],
child: Container(
padding: EdgeInsets.all(10),
child: Column(
crossAxisAlignment:
CrossAxisAlignment.start,
children: <Widget>[
new Image.asset(
'Images/pdflogo.png',
width: 32,
),
Center(
child: Text(
(manuais.data()['nome'].toString()),
maxLines: 1,
overflow: TextOverflow.ellipsis,
style: TextStyle(fontSize: 16),
),
),
ButtonBar(
children: <Widget>[
FlatButton(
child: const Text(
'Compartilhar / Download'),
onPressed: () async {
var request = await HttpClient()
.getUrl(Uri.parse(manuais
.data()['documento']));
var response =
await request.close();
Uint8List bytes =
await consolidateHttpClientResponseBytes(
response);
await Share.file(
'ESYS AMLOG',
'Manual.pdf',
bytes,
'image/jpg');
}),
],
),
],
),
),
);
}),
);
})))),
解决方案
一个集合中不能有多个具有相同 ID 的文档:文档 ID 在集合中必须是唯一的。
在您的情况下,如果我理解正确,您可以为每个文档创建一个子集合,例如user
-- users (collection)
-- DTB2.... (user document)
-- pdfDocs (subcollection)
-- JH8766ng.... (pdf document, with auto-generated ID)
fields: nome: "PDF1", creationDate: ..., author: .... (for example)
-- 65rt6b8H.... (pdf document, with auto-generated ID)
fields: nome: "PDF2", creationDate: ..., author: ....
您将查询所有文档:
FirebaseFirestore.instance
.collection('users')
.doc(uid)
.collection('pdfDocs')
.get();
它返回一个QuerySnapshot
.
推荐阅读
- r - 如何通过 R 中列向量的数字或字母值对矩阵进行排序?
- java - Springboot 请求参数的 Bean 验证
- python - 如何在训练和测试数据中对齐 pandas get_dummies?
- javascript - 如何修复“jquery 追加某些内容,但其 javascript 函数仅在按钮的单击事件上不起作用”
- php - cron 作业创建文件夹 + 移动文件
- r - 在 R bookdown 中,如何为 pdf 和 html 输出编写一个非常大的表(120 行,8 列)?
- android - Android 应用程序在打开时关闭,但不会崩溃
- python-3.x - 在我的项目中,当我在不同系统中使用 Keras 库运行列出的代码时,我遇到了不同类型的错误
- python - 从瓶中的 for 循环中获取请求命令
- python - 单选按钮错误地写入 django 中的数据库