我在實時數據庫中保留主題標籤及其外觀的列表。
我想創建一個帶有函數的服務類,以按出現的降序將主題標籤檢索為列表。所以下面是首選結果。
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] 删除。
我来说两句