flutter firebase 实时数据库:如何将 orderByValue 的结果作为 List<String> 获取?
flutter firebase realtime database: how to get the result of orderByValue as a List<String>?
我在实时数据库中保留主题标签列表及其外观。
我想制作一项服务 class,它具有按出现的降序检索主题标签作为列表的功能。所以下面是首选结果。
List<String> expHashList = [개발자, 인사담당자, VC, 작가, 경영자];
List<String> topicList = [커리어, 채용, 이직, 리더십, 조직문화];
我在下面尝试过,但它 returns 空列表([]
)。
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>();
}
}
}
这是第二种方法,但我无法确定类型转换和排序比较功能是否正常工作。而这个版本 returns Future 代替。
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;});
但是这个returns Future<List<String>>
代替了。所以我不得不使用 FutureBuilder 来处理输出。
在 Firebase 的 FlutterFire 库的最新版本中,您应该能够使用 snapshot.value.values
获取查询结果快照的有序列表。
如果这不起作用,以前的方法是 or 或
我在实时数据库中保留主题标签列表及其外观。
我想制作一项服务 class,它具有按出现的降序检索主题标签作为列表的功能。所以下面是首选结果。
List<String> expHashList = [개발자, 인사담당자, VC, 작가, 경영자];
List<String> topicList = [커리어, 채용, 이직, 리더십, 조직문화];
我在下面尝试过,但它 returns 空列表([]
)。
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>();
}
}
}
这是第二种方法,但我无法确定类型转换和排序比较功能是否正常工作。而这个版本 returns Future 代替。
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;});
但是这个returns Future<List<String>>
代替了。所以我不得不使用 FutureBuilder 来处理输出。
在 Firebase 的 FlutterFire 库的最新版本中,您应该能够使用 snapshot.value.values
获取查询结果快照的有序列表。
如果这不起作用,以前的方法是