Added option to show folders always on top in files
This commit is contained in:
		@@ -1,6 +1,7 @@
 | 
				
			|||||||
import 'package:flutter/material.dart';
 | 
					import 'package:flutter/material.dart';
 | 
				
			||||||
import 'package:json_annotation/json_annotation.dart';
 | 
					import 'package:json_annotation/json_annotation.dart';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import '../file/fileSettings.dart';
 | 
				
			||||||
import '../gradeAverages/gradeAveragesSettings.dart';
 | 
					import '../gradeAverages/gradeAveragesSettings.dart';
 | 
				
			||||||
import '../talk/talkSettings.dart';
 | 
					import '../talk/talkSettings.dart';
 | 
				
			||||||
import '../timetable/timetableSettings.dart';
 | 
					import '../timetable/timetableSettings.dart';
 | 
				
			||||||
@@ -19,6 +20,7 @@ class Settings {
 | 
				
			|||||||
  GradeAveragesSettings gradeAveragesSettings;
 | 
					  GradeAveragesSettings gradeAveragesSettings;
 | 
				
			||||||
  TimetableSettings timetableSettings;
 | 
					  TimetableSettings timetableSettings;
 | 
				
			||||||
  TalkSettings talkSettings;
 | 
					  TalkSettings talkSettings;
 | 
				
			||||||
 | 
					  FileSettings fileSettings;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  Settings({
 | 
					  Settings({
 | 
				
			||||||
    required this.appTheme,
 | 
					    required this.appTheme,
 | 
				
			||||||
@@ -26,6 +28,7 @@ class Settings {
 | 
				
			|||||||
    required this.gradeAveragesSettings,
 | 
					    required this.gradeAveragesSettings,
 | 
				
			||||||
    required this.timetableSettings,
 | 
					    required this.timetableSettings,
 | 
				
			||||||
    required this.talkSettings,
 | 
					    required this.talkSettings,
 | 
				
			||||||
 | 
					    required this.fileSettings,
 | 
				
			||||||
  });
 | 
					  });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  static String _themeToJson(ThemeMode m) => m.name;
 | 
					  static String _themeToJson(ThemeMode m) => m.name;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -15,6 +15,8 @@ Settings _$SettingsFromJson(Map<String, dynamic> json) => Settings(
 | 
				
			|||||||
          json['timetableSettings'] as Map<String, dynamic>),
 | 
					          json['timetableSettings'] as Map<String, dynamic>),
 | 
				
			||||||
      talkSettings:
 | 
					      talkSettings:
 | 
				
			||||||
          TalkSettings.fromJson(json['talkSettings'] as Map<String, dynamic>),
 | 
					          TalkSettings.fromJson(json['talkSettings'] as Map<String, dynamic>),
 | 
				
			||||||
 | 
					      fileSettings:
 | 
				
			||||||
 | 
					          FileSettings.fromJson(json['fileSettings'] as Map<String, dynamic>),
 | 
				
			||||||
    );
 | 
					    );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Map<String, dynamic> _$SettingsToJson(Settings instance) => <String, dynamic>{
 | 
					Map<String, dynamic> _$SettingsToJson(Settings instance) => <String, dynamic>{
 | 
				
			||||||
@@ -23,4 +25,5 @@ Map<String, dynamic> _$SettingsToJson(Settings instance) => <String, dynamic>{
 | 
				
			|||||||
      'gradeAveragesSettings': instance.gradeAveragesSettings.toJson(),
 | 
					      'gradeAveragesSettings': instance.gradeAveragesSettings.toJson(),
 | 
				
			||||||
      'timetableSettings': instance.timetableSettings.toJson(),
 | 
					      'timetableSettings': instance.timetableSettings.toJson(),
 | 
				
			||||||
      'talkSettings': instance.talkSettings.toJson(),
 | 
					      'talkSettings': instance.talkSettings.toJson(),
 | 
				
			||||||
 | 
					      'fileSettings': instance.fileSettings.toJson(),
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,7 @@
 | 
				
			|||||||
import 'dart:convert';
 | 
					import 'dart:convert';
 | 
				
			||||||
import 'dart:developer';
 | 
					import 'dart:developer';
 | 
				
			||||||
import 'package:flutter/material.dart';
 | 
					import 'package:flutter/material.dart';
 | 
				
			||||||
 | 
					import 'package:marianum_mobile/storage/file/fileSettings.dart';
 | 
				
			||||||
import 'package:shared_preferences/shared_preferences.dart';
 | 
					import 'package:shared_preferences/shared_preferences.dart';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import '../gradeAverages/gradeAveragesSettings.dart';
 | 
					import '../gradeAverages/gradeAveragesSettings.dart';
 | 
				
			||||||
@@ -60,6 +61,9 @@ class SettingsProvider extends ChangeNotifier {
 | 
				
			|||||||
        sortFavoritesToTop: true,
 | 
					        sortFavoritesToTop: true,
 | 
				
			||||||
        sortUnreadToTop: false,
 | 
					        sortUnreadToTop: false,
 | 
				
			||||||
      ),
 | 
					      ),
 | 
				
			||||||
 | 
					      fileSettings: FileSettings(
 | 
				
			||||||
 | 
					        sortFoldersToTop: true,
 | 
				
			||||||
 | 
					      ),
 | 
				
			||||||
    );
 | 
					    );
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
							
								
								
									
										13
									
								
								lib/storage/file/fileSettings.dart
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								lib/storage/file/fileSettings.dart
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,13 @@
 | 
				
			|||||||
 | 
					import 'package:json_annotation/json_annotation.dart';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					part 'fileSettings.g.dart';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@JsonSerializable()
 | 
				
			||||||
 | 
					class FileSettings {
 | 
				
			||||||
 | 
					  bool sortFoldersToTop;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  FileSettings({required this.sortFoldersToTop});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  factory FileSettings.fromJson(Map<String, dynamic> json) => _$FileSettingsFromJson(json);
 | 
				
			||||||
 | 
					  Map<String, dynamic> toJson() => _$FileSettingsToJson(this);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										16
									
								
								lib/storage/file/fileSettings.g.dart
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								lib/storage/file/fileSettings.g.dart
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,16 @@
 | 
				
			|||||||
 | 
					// GENERATED CODE - DO NOT MODIFY BY HAND
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					part of 'fileSettings.dart';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// **************************************************************************
 | 
				
			||||||
 | 
					// JsonSerializableGenerator
 | 
				
			||||||
 | 
					// **************************************************************************
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					FileSettings _$FileSettingsFromJson(Map<String, dynamic> json) => FileSettings(
 | 
				
			||||||
 | 
					      sortFoldersToTop: json['sortFoldersToTop'] as bool,
 | 
				
			||||||
 | 
					    );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Map<String, dynamic> _$FileSettingsToJson(FileSettings instance) =>
 | 
				
			||||||
 | 
					    <String, dynamic>{
 | 
				
			||||||
 | 
					      'sortFoldersToTop': instance.sortFoldersToTop,
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
@@ -4,6 +4,8 @@ import 'dart:io';
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import 'package:flutter/material.dart';
 | 
					import 'package:flutter/material.dart';
 | 
				
			||||||
import 'package:loader_overlay/loader_overlay.dart';
 | 
					import 'package:loader_overlay/loader_overlay.dart';
 | 
				
			||||||
 | 
					import 'package:marianum_mobile/storage/base/settingsProvider.dart';
 | 
				
			||||||
 | 
					import 'package:provider/provider.dart';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import '../../../api/marianumcloud/webdav/queries/listFiles/cacheableFile.dart';
 | 
					import '../../../api/marianumcloud/webdav/queries/listFiles/cacheableFile.dart';
 | 
				
			||||||
import '../../../api/marianumcloud/webdav/queries/listFiles/listFilesCache.dart';
 | 
					import '../../../api/marianumcloud/webdav/queries/listFiles/listFilesCache.dart';
 | 
				
			||||||
@@ -93,7 +95,11 @@ class _FilesState extends State<Files> {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  @override
 | 
					  @override
 | 
				
			||||||
  Widget build(BuildContext context) {
 | 
					  Widget build(BuildContext context) {
 | 
				
			||||||
    List<CacheableFile> files = (data?.files.toList() ?? List.empty())..sort(SortOptions.getOption(currentSort).compare);
 | 
					    List<CacheableFile> files = (data?.files.toList() ?? List.empty())..sort((a, b) {
 | 
				
			||||||
 | 
					      int directorySort = Provider.of<SettingsProvider>(context).val().fileSettings.sortFoldersToTop ? a.isDirectory ? b.isDirectory ? 0 : 1 : -1 : 0;
 | 
				
			||||||
 | 
					      if(directorySort == 0) return SortOptions.getOption(currentSort).compare(a, b);
 | 
				
			||||||
 | 
					      return directorySort;
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
    if(currentSortDirection) files = files.reversed.toList();
 | 
					    if(currentSortDirection) files = files.reversed.toList();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return Scaffold(
 | 
					    return Scaffold(
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -119,6 +119,21 @@ class _SettingsState extends State<Settings> {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
            const Divider(),
 | 
					            const Divider(),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            ListTile(
 | 
				
			||||||
 | 
					              leading: const Icon(Icons.drive_folder_upload_outlined),
 | 
				
			||||||
 | 
					              title: const Text("Ordner in Dateien nach oben sortieren"),
 | 
				
			||||||
 | 
					              trailing: Checkbox(
 | 
				
			||||||
 | 
					                value: settings.val().fileSettings.sortFoldersToTop,
 | 
				
			||||||
 | 
					                onChanged: (e) {
 | 
				
			||||||
 | 
					                  setState(() {
 | 
				
			||||||
 | 
					                    settings.val(write: true).fileSettings.sortFoldersToTop = e!;
 | 
				
			||||||
 | 
					                  });
 | 
				
			||||||
 | 
					                },
 | 
				
			||||||
 | 
					              ),
 | 
				
			||||||
 | 
					            ),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            const Divider(),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            ListTile(
 | 
					            ListTile(
 | 
				
			||||||
              leading: const Icon(Icons.live_help_outlined),
 | 
					              leading: const Icon(Icons.live_help_outlined),
 | 
				
			||||||
              title: const Text("Informationen und Lizenzen"),
 | 
					              title: const Text("Informationen und Lizenzen"),
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user