Added App sorting

This commit is contained in:
Imran Remtulla
2022-09-17 01:41:38 -04:00
parent 05f5590e7d
commit 5fc79af960
3 changed files with 90 additions and 5 deletions

View File

@@ -16,7 +16,23 @@ class _AppsPageState extends State<AppsPage> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
var appsProvider = context.watch<AppsProvider>(); var appsProvider = context.watch<AppsProvider>();
var settingsProvider = context.watch<SettingsProvider>();
var existingUpdateAppIds = appsProvider.getExistingUpdates(); var existingUpdateAppIds = appsProvider.getExistingUpdates();
var sortedApps = appsProvider.apps.values.toList();
sortedApps.sort((a, b) {
int result = 0;
if (settingsProvider.sortColumn == SortColumnSettings.authorName) {
result =
(a.app.author + a.app.name).compareTo(b.app.author + b.app.name);
} else if (settingsProvider.sortColumn == SortColumnSettings.nameAuthor) {
result =
(a.app.name + a.app.author).compareTo(b.app.name + b.app.author);
}
return result;
});
if (settingsProvider.sortOrder == SortOrderSettings.ascending) {
sortedApps = sortedApps.reversed.toList();
}
return Scaffold( return Scaffold(
floatingActionButton: existingUpdateAppIds.isEmpty floatingActionButton: existingUpdateAppIds.isEmpty
@@ -26,10 +42,7 @@ class _AppsPageState extends State<AppsPage> {
? null ? null
: () { : () {
HapticFeedback.heavyImpact(); HapticFeedback.heavyImpact();
context settingsProvider.getInstallPermission().then((_) {
.read<SettingsProvider>()
.getInstallPermission()
.then((_) {
appsProvider.downloadAndInstallLatestApp( appsProvider.downloadAndInstallLatestApp(
existingUpdateAppIds, context); existingUpdateAppIds, context);
}); });
@@ -50,7 +63,7 @@ class _AppsPageState extends State<AppsPage> {
return appsProvider.checkUpdates(); return appsProvider.checkUpdates();
}, },
child: ListView( child: ListView(
children: appsProvider.apps.values children: sortedApps
.map( .map(
(e) => ListTile( (e) => ListTile(
title: Text('${e.app.author}/${e.app.name}'), title: Text('${e.app.author}/${e.app.name}'),

View File

@@ -112,6 +112,54 @@ class _SettingsPageState extends State<SettingsPage> {
const SizedBox( const SizedBox(
height: 16, height: 16,
), ),
DropdownButtonFormField(
decoration:
const InputDecoration(labelText: 'App Sort By'),
value: settingsProvider.sortColumn,
items: const [
DropdownMenuItem(
value: SortColumnSettings.authorName,
child: Text('Author/Name'),
),
DropdownMenuItem(
value: SortColumnSettings.nameAuthor,
child: Text('Name/Author'),
),
DropdownMenuItem(
value: SortColumnSettings.added,
child: Text('As Added'),
)
],
onChanged: (value) {
if (value != null) {
settingsProvider.sortColumn = value;
}
}),
const SizedBox(
height: 16,
),
DropdownButtonFormField(
decoration:
const InputDecoration(labelText: 'App Sort Order'),
value: settingsProvider.sortOrder,
items: const [
DropdownMenuItem(
value: SortOrderSettings.ascending,
child: Text('Ascending'),
),
DropdownMenuItem(
value: SortOrderSettings.descending,
child: Text('Descending'),
),
],
onChanged: (value) {
if (value != null) {
settingsProvider.sortOrder = value;
}
}),
const SizedBox(
height: 16,
),
Row( Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween, mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [ children: [

View File

@@ -9,6 +9,10 @@ enum ThemeSettings { system, light, dark }
enum ColourSettings { basic, materialYou } enum ColourSettings { basic, materialYou }
enum SortColumnSettings { added, nameAuthor, authorName }
enum SortOrderSettings { ascending, descending }
class SettingsProvider with ChangeNotifier { class SettingsProvider with ChangeNotifier {
SharedPreferences? prefs; SharedPreferences? prefs;
@@ -49,6 +53,26 @@ class SettingsProvider with ChangeNotifier {
notifyListeners(); notifyListeners();
} }
SortColumnSettings get sortColumn {
return SortColumnSettings
.values[prefs?.getInt('sortColumn') ?? SortColumnSettings.added.index];
}
set sortColumn(SortColumnSettings s) {
prefs?.setInt('sortColumn', s.index);
notifyListeners();
}
SortOrderSettings get sortOrder {
return SortOrderSettings.values[
prefs?.getInt('sortOrder') ?? SortOrderSettings.descending.index];
}
set sortOrder(SortOrderSettings s) {
prefs?.setInt('sortOrder', s.index);
notifyListeners();
}
bool checkAndFlipFirstRun() { bool checkAndFlipFirstRun() {
bool result = prefs?.getBool('firstRun') ?? true; bool result = prefs?.getBool('firstRun') ?? true;
if (result) { if (result) {