From f32fc356efc57c3b5fbc46bb2d66d8543e576d90 Mon Sep 17 00:00:00 2001 From: franzap <_@franzap.com> Date: Thu, 9 May 2024 21:14:37 -0300 Subject: [PATCH] Fix app detail refresh, search bug and clear results --- lib/models/app.dart | 49 ++++++++++++++++++++++------------ lib/screens/search_screen.dart | 6 ++++- 2 files changed, 37 insertions(+), 18 deletions(-) diff --git a/lib/models/app.dart b/lib/models/app.dart index 9fab06d..bfea358 100644 --- a/lib/models/app.dart +++ b/lib/models/app.dart @@ -78,6 +78,23 @@ mixin AppAdapter on Adapter { super.dispose(); } + Future> loadAppModels(Map params) async { + final apps = await super.findAll(params: params); + final releases = + await ref.releases.findAll(params: {'#a': apps.map((app) => app.aTag)}); + final metadataIds = releases.map((r) => r.tagMap['e']!).expand((_) => _); + await ref.fileMetadata.findAll(params: { + 'ids': metadataIds, + '#m': [kAndroidMimeType] + }); + final userIds = { + for (final app in apps) app.signer.id, + for (final app in apps) app.developer.id + }.nonNulls; + await ref.users.findAll(params: {'authors': userIds}); + return apps; + } + @override Future> findAll( {bool? remote = true, @@ -90,23 +107,6 @@ mixin AppAdapter on Adapter { DataRequestLabel? label}) async { final map = await getInstalledAppsMap(); - loadAppModels(Map params) async { - final apps = await super.findAll(params: params); - final releases = await ref.releases - .findAll(params: {'#a': apps.map((app) => app.aTag)}); - final metadataIds = releases.map((r) => r.tagMap['e']!).expand((_) => _); - await ref.fileMetadata.findAll(params: { - 'ids': metadataIds, - '#m': [kAndroidMimeType] - }); - final userIds = { - for (final app in apps) app.signer.id, - for (final app in apps) app.developer.id - }.nonNulls; - await ref.users.findAll(params: {'authors': userIds}); - return apps; - } - if (params!.containsKey('installed')) { if (map.keys.isNotEmpty) { params['#d'] = map.keys; @@ -125,6 +125,21 @@ mixin AppAdapter on Adapter { return loadAppModels(params); } + @override + Future findOne(Object id, + {bool remote = true, + bool background = false, + Map? params = const {}, + Map? headers, + OnSuccessOne? onSuccess, + OnErrorOne? onError, + DataRequestLabel? label}) async { + final apps = await loadAppModels({ + '#d': [id] + }); + return apps.firstOrNull; + } + static AndroidPackageManager? _packageManager; Future> getInstalledAppsMap() async { diff --git a/lib/screens/search_screen.dart b/lib/screens/search_screen.dart index d217bee..90a75fe 100644 --- a/lib/screens/search_screen.dart +++ b/lib/screens/search_screen.dart @@ -60,7 +60,11 @@ class SearchScreen extends HookConsumerWidget { IconButton( hoverColor: Colors.transparent, onPressed: () { + // clear input and results, then return focus controller.clear(); + ref + .read(searchStateProvider.notifier) + .updateWith(model: []); focusNode.requestFocus(); }, icon: Icon(Icons.close), @@ -132,7 +136,7 @@ final searchStateProvider = StateNotifierProvider.autoDispose< (app.url ?? '').contains(r) || app.name!.contains(r) || app.content.contains(r) || - app.tags.any((e) => e.contains(r))) + app.tags.any((e) => e[1].contains(r))) .toList(); n.updateWith(model: apps, isLoading: false); }