flutter firebase 實時數據庫:如何將 orderByValue 的結果作為 List<String> 獲取?

張永學

我在實時數據庫中保留主題標籤及其外觀的列表。

在此處輸入圖片說明

我想創建一個帶有函數的服務類,以按出現的降序將主題標籤檢索為列表。所以下面是首選結果。

List<String> expHashList = [개발자, 인사담당자, VC, 작가, 경영자];
List<String> topicList = [커리어, 채용, 이직, 리더십, 조직문화];

我在下面嘗試過,但它返回空列表([])。

class HashtagService {
  static final HashtagService _instance = HashtagService._internal();
  factory HashtagService() => _instance;

  late final DatabaseReference _database;

  HashtagService._internal() {
    _database = FirebaseDatabase.instance.reference().child('/hashtags');
  }

  List<String> getSuggestion(String type) {
    if (type == 'exp') {
      var query = _database.child('expHash').orderByValue().limitToLast(10);
      return FirebaseList(query: query).cast<String>();
    } else {
      var query = _database.child('topic').orderByValue().limitToLast(10);
      return FirebaseList(query: query).cast<String>();
    }
  }
}

這是第二種方法,但我無法弄清楚類型轉換和排序比較功能是否正常工作。而這個版本返回 Future<List> 代替。

  Future<List<String>> getSuggestion() async {
    return await _database.child('expHash').get().then((snapshot) {
      Map<String, int> map = snapshot.value;   // type error -> <dynamic, dynamic>
      List<String> hashtagList = map.keys.toList();   
      hashtagList.sort((k1, k2) => map[k1]! > map[k2]! ? 1 : -1);   // is this right?
      return hashtagList;
    });
  }

將 orderByValue(或 orderByKey 或 orderByChild)的結果作為列表或列表獲取的最佳方法是什麼?


編輯(答案)

List<String?> _resultList = [];

var query = _database.child('topic').orderByValue().limitToLast(10);
query.onChildAdded.listen((Event event) {
    _resultList.add(event.snapshot.key);
});
return await query.get().then((snapshot) {return _resultList;});

但這Future<List<String>>反而返回了所以我不得不使用 FutureBuilder 來處理輸出。

弗蘭克·範·普費倫

在 Firebase 的 FlutterFire 庫的最新版本中,您應該能夠使用它snapshot.value.values來獲取查詢結果快照的有序列表。

如果這不起作用,則之前的方法是Flutter: Firebase Real-Time database orderByChild 對查詢結果沒有影響Flutter Firebase Database 錯誤的時間戳順序

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Flutter 在獲取數據時拋出錯誤。我該如何解決?

Firebase 實時數據庫事務

我應該將哪些 Firebase 數據庫用於實時投票平台?

如何獲取智能合約結果數據?

如何在firebase flutter中將數據作為子集合添加到所有用戶的文檔中?

如何使用顫振實時數據庫中的條件獲取特定文檔

為什麼我的獲取數據查看舊的數據庫數據而不是數據庫的更新數據?

從數據庫獲取 List()

無法使用 Android 將數據寫入 Firebase 數據庫時如何獲取錯誤消息

如何從 Firebase Firestore 獲取數據

比較兩個 Maps<String, List<String>> 並獲取 map key + map value 作為差異

如何在flutter中從json獲取數據

如何獲取 userId 作為 ClientId?

Firebase 實時數據庫正在 Unity3d 中添加額外的結果元素

Firebase 數據庫是否獲取所有數據然後限制它?

如何從 Firebase 實時數據庫讀取孩子的值?

是否可以使用 IF 語句從數據庫中獲取數據並將其保存到 String 中?

如何在不從參考節點獲取所有數據的情況下獲取 Firebase 數據庫中的隨機鍵?

獲取 IllegalArgumentException:嘗試添加包含 AtomicInteger int redis 緩存的數據時,無法將 String 轉換為 AtomicInteger

將瀏覽器窗口中 API 獲取的結果替換為新調用 (JavaScript) 的結果

從 Firebase 實時數據庫中獲取數據的保證順序

Flutter 從 BLE 獲取數據

如何將數據值屬性作為字符串獲取?

如何從 Firebase Firestore 獲取數據並將其存儲在 List 中以在 Flutter Widgets 中使用?

從 Flutter 中的 List 中獲取一個 children

如何在flutter中從firebase中獲取排序的數據

如何僅從 Firebase 實時數據庫獲取密鑰

當 API 請求尚未完成保存到 Flutter 中的數據庫時,如何處理從數據庫讀取?

從 Api 獲取數據並將 Html 替換為 Api 數據 Nodejs