aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAkshay Nair <phenax5@gmail.com>2020-06-03 23:14:35 +0530
committerAkshay Nair <phenax5@gmail.com>2020-06-03 23:14:35 +0530
commit51dae022dcf9b4dcea7e7709ad0915c10977326a (patch)
tree53d1dab344fd157e0a8ea4238bb98df976e3f547
parent620f9ea0516d951e1d21793a5bb22e05a5c56949 (diff)
downloaddaft-launcher-51dae022dcf9b4dcea7e7709ad0915c10977326a.tar.gz
daft-launcher-51dae022dcf9b4dcea7e7709ad0915c10977326a.zip
Add to favorite feature complete
Diffstat (limited to '')
-rw-r--r--lib/data/favorites.dart24
-rw-r--r--lib/main.dart26
-rw-r--r--lib/pages/Home.dart11
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),
+ )),
],
)
);