Я пытаюсь получить documentId
из документа в ListView.builder
.
Вот что я получил:
У меня есть database.dart
, где я собираюсь к таким документам:
// get user posts doc stream
Stream<List<Post>> get userPosts {
final CollectionReference userPostsCollectionPosts = Firestore.instance.collection('user_posts').document('XdJXkE9ijma7ep1KLXHFLlbXsf43').collection('posts');
return userPostsCollectionPosts.snapshots()
.map(_userPostsFromSnapshot);
}
List<Post> _userPostsFromSnapshot(QuerySnapshot snapshot) {
return snapshot.documents.map((doc) {
return Post(
postCreator: doc.data['postCreator'] ?? '',
postDateCreated: doc.data['postDateCreated'].toDate() ?? DateTime.now(),
postTitle: doc.data['postTitle'] ?? '',
postText: doc.data['postText'] ?? '',
postCategories: doc.data['postCategories'] ?? '',
postPublic: doc.data['postPublic'] ?? false,
postViews: doc.data['postViews'] ?? 0,
postLikes: doc.data['postLikes'] ?? 0,
);
}).toList();
}
Затем у меня есть страница профиля, где я буду перечислять каждое сообщение, используя StreamProvider следующим образом:
return StreamProvider<List<Post>>.value(
value: DatabaseService().userPosts,
child: Scaffold(
...
Внутри этого виджета у меня есть потомок виджета с именем ProfileUserPosts (), в котором у меня есть ListView.builder, подобный этому:
//First, I get the userPosts like this
final userPosts = Provider.of<List<Post>>(context) ?? [];
//Then, I use a ListView.builder to list the userPosts like this:
child: ListView.builder(
itemCount: userPosts.length,
itemBuilder: (context, index) {
return Container(
...
Моя текущая проблема заключается в том, что в каждом сообщении "плитка" есть кнопка для удаления и обновления. Но чтобы выполнять эти действия, мне нужно знать, какой документ обновлять или удалять, основываясь на documentId
. Эти функции также помещены в файл database.dart
.
Я пытался вызвать
userPosts[0].documentId
, но из этого получаю только 'null'.
Я строю эта структура / логика c неверна с самого начала, которая вызывает эту проблему, когда я заблокировал себе доступ к documentId
или есть пропущенный шаг?
Редактировать
Это был я не такой умный и не думал здраво. В своем классе Post () я добавил еще одно поле String, например: final String documentId; затем в возвращаемом снимке я просто добавил еще одну строку, подобную этой: documentId: do c .documentId; и тогда я мог легко получить к нему доступ в ListView.builder для обновления и удаления функций.