From 51dae022dcf9b4dcea7e7709ad0915c10977326a Mon Sep 17 00:00:00 2001 From: Akshay Nair Date: Wed, 3 Jun 2020 23:14:35 +0530 Subject: Add to favorite feature complete --- lib/data/favorites.dart | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) (limited to 'lib/data') diff --git a/lib/data/favorites.dart b/lib/data/favorites.dart index aad98ee..2e389b8 100644 --- a/lib/data/favorites.dart +++ b/lib/data/favorites.dart @@ -7,13 +7,26 @@ const String SEPERATOR = ','; StreamController> favorites_$ = StreamController>.broadcast(); +Future getApplication(String pkg) async { + if (pkg.length == 0) return null; + try { + return DeviceApps.getApp(pkg); + } catch(e) { + return null; + } +} + Future> getFavorites() async { final prefs = await SharedPreferences.getInstance(); String rawFavoritesList = prefs.getString(FAVORITES); List packageNames = rawFavoritesList?.split(SEPERATOR) ?? []; - return Future.wait(packageNames.map((String pkg) => DeviceApps.getApp(pkg))); + Iterable> futures = packageNames.map(getApplication); + + List result = await Future.wait(futures); + + return result.where((a) => a != null).toList(); } void initFavorites() async { @@ -28,7 +41,7 @@ Stream> getFavorites$() { void setFavorites(List favs) async { final prefs = await SharedPreferences.getInstance(); - String rawFavoritesList = favs.map((Application app) => app.packageName).join(SEPERATOR); + String rawFavoritesList = favs.map((Application app) => app.packageName).toList().join(SEPERATOR); prefs.setString(FAVORITES, rawFavoritesList); @@ -37,7 +50,12 @@ void setFavorites(List favs) async { void addToFavorites(Application app) async { List fs = await getFavorites(); - fs.add(app); + + var matching = fs.where((a) => a.packageName == app.packageName); + if(matching.length == 0) { + fs.add(app); + } + await setFavorites(fs); } -- cgit v1.3.1