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 +++++++++++++++++++++--- lib/main.dart | 26 ++++++++++++++++++++++++-- lib/pages/Home.dart | 11 +++++++++-- 3 files changed, 54 insertions(+), 7 deletions(-) (limited to 'lib') 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); } diff --git a/lib/main.dart b/lib/main.dart index a7800da..b11886a 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,11 +1,14 @@ import 'dart:async'; import 'package:flutter/material.dart'; +import 'package:device_apps/device_apps.dart'; import 'pages/Home.dart'; import 'pages/Apps.dart'; import 'data/config.dart'; +import 'data/favorites.dart'; import 'helpers/StreamState.dart'; +import 'package:shared_preferences/shared_preferences.dart'; void main() { runApp(MyApp()); @@ -17,10 +20,25 @@ class MyAppState extends StreamState { Stream.periodic(Duration(seconds: 1), (_x) => DateTime.now()).asBroadcastStream(); // State - StreamStateValue config = StreamStateValue(stream$: getConfig$(), value: Config()); + final config = StreamStateValue( + stream$: getConfig$(), + value: Config(), + ); + final favoriteApps = StreamStateValue>( + stream$: getFavorites$(), + value: [], + ); void initState() { super.initState(); initStateValue(config); + initConfig(); + initStateValue(favoriteApps); + initFavorites(); + + SharedPreferences.getInstance().then((instance) { + var val = instance.getString('favorites'); + debugPrint('Hello |${val}| ${val.length}'); + }); } @override @@ -70,7 +88,11 @@ class MyAppState extends StreamState { body: PageView( controller: PageController(keepPage: true), children: [ - HomeView(time$, defaultTime: DateTime.now()), + HomeView( + time$: time$, + defaultTime: DateTime.now(), + favoriteApps: favoriteApps.value, + ), AppsView(), ], ), diff --git a/lib/pages/Home.dart b/lib/pages/Home.dart index b9663fd..1309596 100644 --- a/lib/pages/Home.dart +++ b/lib/pages/Home.dart @@ -1,7 +1,9 @@ import 'dart:async'; import 'package:flutter/material.dart'; import 'package:intl/intl.dart'; +import 'package:device_apps/device_apps.dart'; +import '../components/AppList.dart'; import '../components/FixedContainer.dart'; import '../data/config.dart'; @@ -85,8 +87,11 @@ class StatusInfoCard extends StatelessWidget { class HomeView extends StatelessWidget { Stream time$; DateTime defaultTime; + List favoriteApps; - HomeView(this.time$, { this.defaultTime }): super(); + HomeView({ this.time$, this.defaultTime, this.favoriteApps }): super(); + + void noop(Application app) {} @override Widget build(BuildContext ctx) { @@ -95,7 +100,9 @@ class HomeView extends StatelessWidget { child: Column( children: [ StatusInfoCard(time$, defaultTime: defaultTime), - Expanded(child: Text('Content')), + Expanded(child: Container( + child: AppList(appList: favoriteApps, openApp: noop, openOptionsMenu: noop), + )), ], ) ); -- cgit v1.3.1