簡體   English   中英

從 Firestore flutter 中的所有文檔中獲取所有用戶名

[英]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() 中執行此操作,如果有人有任何想法,請幫助我):

  1. 創建 List<String> 獲取所有標題

    List< String > titles = [];

  2. 以StreamBuilder的方式獲取如上顯示的List<Todos>,然后獲取所有List with provider

final provider = Provider.of<TodosProvider>(context);
final todos = provider.todos;
  1. 用戶 forEach 僅將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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM