queries method
Future<List<UnpuberPackage> >
queries({
- required int size,
- required int page,
- required String sort,
- required String keyword,
- String? uploader,
- String? dependency,
override
Implementation
@override
Future<List<UnpuberPackage>> queries(
{required int size,
required int page,
required String sort,
required String keyword,
String? uploader,
String? dependency}) async {
var query = "SELECT record FROM meta WHERE 1=1";
final params = <dynamic>[];
query += " AND LOWER(json_extract(record, '\$.name')) LIKE LOWER(?)";
params.add('%$keyword%');
if (uploader != null && uploader.isNotEmpty) {
query +=
" AND EXISTS (SELECT 1 FROM json_each(record, '\$.uploaders') WHERE value LIKE ?)";
params.add('%$uploader%');
}
if (dependency != null && dependency.isNotEmpty) {
query +=
" AND json_extract(record, '\$.versions[0].pubspec.dependencies.$dependency') IS NOT NULL";
}
switch (sort) {
case 'download':
query += " ORDER BY json_extract(record, '\$.downloads') DESC";
break;
case 'createdAt':
query += " ORDER BY json_extract(record, '\$.createdAt') DESC";
break;
default: // 默认按名称排序
query += " ORDER BY json_extract(record, '\$.name') ASC";
}
query += " LIMIT ? OFFSET ?";
params.add(size);
params.add(page * size);
final result = _db.select(query, params);
if (result.isEmpty) return [];
return result.map((row) {
final record = jsonDecode(row['record']) as Map<String, dynamic>;
return UnpuberPackage.fromJson(record);
}).toList();
}