mirror of
https://github.com/ImranR98/Obtainium.git
synced 2025-08-19 05:00:21 +02:00
Added App sorting
This commit is contained in:
@@ -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}'),
|
||||||
|
@@ -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: [
|
||||||
|
@@ -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) {
|
||||||
|
Reference in New Issue
Block a user