diff options
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/data/favorites.dart | 24 | ||||
| -rw-r--r-- | lib/main.dart | 26 | ||||
| -rw-r--r-- | lib/pages/Home.dart | 11 |
3 files changed, 54 insertions, 7 deletions
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<List<Application>> favorites_$ = StreamController<List<Application>>.broadcast(); +Future<Application> getApplication(String pkg) async { + if (pkg.length == 0) return null; + try { + return DeviceApps.getApp(pkg); + } catch(e) { + return null; + } +} + Future<List<Application>> getFavorites() async { final prefs = await SharedPreferences.getInstance(); String rawFavoritesList = prefs.getString(FAVORITES); List<String> packageNames = rawFavoritesList?.split(SEPERATOR) ?? <String>[]; - return Future.wait(packageNames.map((String pkg) => DeviceApps.getApp(pkg))); + Iterable<Future<Application>> futures = packageNames.map(getApplication); + + List<Application> result = await Future.wait(futures); + + return result.where((a) => a != null).toList(); } void initFavorites() async { @@ -28,7 +41,7 @@ Stream<List<Application>> getFavorites$() { void setFavorites(List<Application> 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<Application> favs) async { void addToFavorites(Application app) async { List<Application> 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<MyApp> { Stream.periodic(Duration(seconds: 1), (_x) => DateTime.now()).asBroadcastStream(); // State - StreamStateValue<Config> config = StreamStateValue<Config>(stream$: getConfig$(), value: Config()); + final config = StreamStateValue<Config>( + stream$: getConfig$(), + value: Config(), + ); + final favoriteApps = StreamStateValue<List<Application>>( + 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<MyApp> { 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<DateTime> time$; DateTime defaultTime; + List<Application> 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), + )), ], ) ); |
