mirror of
				https://github.com/ImranR98/Obtainium.git
				synced 2025-10-30 21:13:28 +01: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