[英]get all user name from all documents in Firestore flutter
長話短說,我需要獲取所有 todos 的 List<title>,但現在我只有一個 List<Todo>,那么如何返回這個 List?
獲取一個 Stream<List>
static Stream<List<Todo>> readTodos() => FirebaseFirestore.instance
.collection('todo')
.orderBy(TodoField.createdTime, descending: true)
.snapshots()
.transform(Utils.transformer(Todo.fromJson));
然后使用 StreamBuilder 我可以獲得一個列表,但是對於一個方法我只需要這些 todos 的所有名稱,所以我希望它最終看起來像這樣:
todoTitle: [
'eat',
'drink',
'run',
]
那我能做什么? 非常感謝!
更新我不知道以下是否是解決方案,但它還不起作用:
final provider = Provider.of<TodosProvider>(context);
final todos = provider.todos;
List<String> userTitle = todos.map['Todo'].where((todo) => todo['title'] != null).map((value) => value['title']).toList();
然后我從 map['Todo'] 得到一個錯誤,錯誤是( The operator '[]' isn't defined for the type 'Iterable<T> Function<T>(T Function(Todo))'.
) ,請幫忙TT謝謝!
有兩種解決方案(感謝弗蘭克從另一個堆棧的回復):
一個。 創建另一個只包含標題的集合,然后輕松獲取 List< Title >。
灣。 獲取所有數據作為當前解決方案,我使用 forEach 將值分隔到一個列表中(我仍然不知道如何在 map() 中執行此操作,如果有人有任何想法,請幫助我):
創建 List<String> 獲取所有標題
List< String > titles = [];
以StreamBuilder的方式獲取如上顯示的List<Todos>,然后獲取所有List with provider
final provider = Provider.of<TodosProvider>(context);
final todos = provider.todos;
todo.title
放入List< String > titles
getAllTitles(todos){
todos.forEach((todo) {
titles.add(todo.title);
});
}
我相信有一種像 h8moss 向我展示的聰明方法,可以創建另一個 Stream<List> todoTitles,但是我需要聽另一個 stream,我是 firestore 和 flutter 世界的新手,我不知道哪個更好或怎么做Stream<List> 以正確的方式.. 我只是把我的解決方案放在這里,以防我將來忘記。
如果您想要獲取Todo
class 的某些部分(在本例中為title
),您可以使用Stream.map
方法:
static Stream<List<String>> readTodoTitles() => FirebaseFirestore.instance
.collection('todo')
.orderBy(TodoField.createdTime, descending: true)
.snapshots()
.transform(Utils.transformer(Todo.fromJson))
.map<String>((element) => element.title);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.