Added option to show folders always on top in files
This commit is contained in:
parent
213c815eee
commit
2c10b02e53
@ -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"),
|
||||||
|
Loading…
x
Reference in New Issue
Block a user