Added option to sort talk favorites to top
This commit is contained in:
parent
a32e70109e
commit
a922e0f8ae
@ -14,12 +14,13 @@ class GetRoomResponse extends ApiResponse {
|
|||||||
factory GetRoomResponse.fromJson(Map<String, dynamic> json) => _$GetRoomResponseFromJson(json);
|
factory GetRoomResponse.fromJson(Map<String, dynamic> json) => _$GetRoomResponseFromJson(json);
|
||||||
Map<String, dynamic> toJson() => _$GetRoomResponseToJson(this);
|
Map<String, dynamic> toJson() => _$GetRoomResponseToJson(this);
|
||||||
|
|
||||||
List<GetRoomResponseObject> sortByLastActivity() {
|
List<GetRoomResponseObject> sortBy({bool lastActivity = true, bool favoritesToTop = false}) {
|
||||||
List<GetRoomResponseObject> sorted = data.toList();
|
List<GetRoomResponseObject> sorted = data.toList();
|
||||||
sorted.sort((a, b) => -a.lastActivity.compareTo(b.lastActivity));
|
if(lastActivity) sorted.sort((a, b) => -a.lastActivity.compareTo(b.lastActivity));
|
||||||
|
if(favoritesToTop) sorted.sort((a, b) => b.isFavorite ? 1 : -1);
|
||||||
|
|
||||||
return sorted;
|
return sorted;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@JsonSerializable(explicitToJson: true)
|
@JsonSerializable(explicitToJson: true)
|
||||||
|
@ -29,7 +29,7 @@ class TimetableProps extends DataHolder {
|
|||||||
late DateTime endDate = getDate(_queryWeek.add(Duration(days: DateTime.daysPerWeek - _queryWeek.weekday)));
|
late DateTime endDate = getDate(_queryWeek.add(Duration(days: DateTime.daysPerWeek - _queryWeek.weekday)));
|
||||||
|
|
||||||
GetTimetableResponse? _getTimetableResponse;
|
GetTimetableResponse? _getTimetableResponse;
|
||||||
GetTimetableResponse get getTimetableResponse => _getTimetableResponse!; //TODO failed null check when no cache
|
GetTimetableResponse get getTimetableResponse => _getTimetableResponse!;
|
||||||
|
|
||||||
GetRoomsResponse? _getRoomsResponse;
|
GetRoomsResponse? _getRoomsResponse;
|
||||||
GetRoomsResponse get getRoomsResponse => _getRoomsResponse!;
|
GetRoomsResponse get getRoomsResponse => _getRoomsResponse!;
|
||||||
|
@ -2,6 +2,7 @@ import 'package:flutter/material.dart';
|
|||||||
import 'package:json_annotation/json_annotation.dart';
|
import 'package:json_annotation/json_annotation.dart';
|
||||||
|
|
||||||
import '../gradeAverages/gradeAveragesSettings.dart';
|
import '../gradeAverages/gradeAveragesSettings.dart';
|
||||||
|
import '../talk/talkSettings.dart';
|
||||||
import '../timetable/timetableSettings.dart';
|
import '../timetable/timetableSettings.dart';
|
||||||
|
|
||||||
part 'settings.g.dart';
|
part 'settings.g.dart';
|
||||||
@ -17,12 +18,14 @@ class Settings {
|
|||||||
|
|
||||||
GradeAveragesSettings gradeAveragesSettings;
|
GradeAveragesSettings gradeAveragesSettings;
|
||||||
TimetableSettings timetableSettings;
|
TimetableSettings timetableSettings;
|
||||||
|
TalkSettings talkSettings;
|
||||||
|
|
||||||
Settings({
|
Settings({
|
||||||
required this.appTheme,
|
required this.appTheme,
|
||||||
required this.devToolsEnabled,
|
required this.devToolsEnabled,
|
||||||
required this.gradeAveragesSettings,
|
required this.gradeAveragesSettings,
|
||||||
required this.timetableSettings
|
required this.timetableSettings,
|
||||||
|
required this.talkSettings,
|
||||||
});
|
});
|
||||||
|
|
||||||
static String _themeToJson(ThemeMode m) => m.name;
|
static String _themeToJson(ThemeMode m) => m.name;
|
||||||
|
@ -13,6 +13,8 @@ Settings _$SettingsFromJson(Map<String, dynamic> json) => Settings(
|
|||||||
json['gradeAveragesSettings'] as Map<String, dynamic>),
|
json['gradeAveragesSettings'] as Map<String, dynamic>),
|
||||||
timetableSettings: TimetableSettings.fromJson(
|
timetableSettings: TimetableSettings.fromJson(
|
||||||
json['timetableSettings'] as Map<String, dynamic>),
|
json['timetableSettings'] as Map<String, dynamic>),
|
||||||
|
talkSettings:
|
||||||
|
TalkSettings.fromJson(json['talkSettings'] as Map<String, dynamic>),
|
||||||
);
|
);
|
||||||
|
|
||||||
Map<String, dynamic> _$SettingsToJson(Settings instance) => <String, dynamic>{
|
Map<String, dynamic> _$SettingsToJson(Settings instance) => <String, dynamic>{
|
||||||
@ -20,4 +22,5 @@ Map<String, dynamic> _$SettingsToJson(Settings instance) => <String, dynamic>{
|
|||||||
'devToolsEnabled': instance.devToolsEnabled,
|
'devToolsEnabled': instance.devToolsEnabled,
|
||||||
'gradeAveragesSettings': instance.gradeAveragesSettings.toJson(),
|
'gradeAveragesSettings': instance.gradeAveragesSettings.toJson(),
|
||||||
'timetableSettings': instance.timetableSettings.toJson(),
|
'timetableSettings': instance.timetableSettings.toJson(),
|
||||||
|
'talkSettings': instance.talkSettings.toJson(),
|
||||||
};
|
};
|
||||||
|
@ -4,6 +4,7 @@ import 'package:flutter/material.dart';
|
|||||||
import 'package:shared_preferences/shared_preferences.dart';
|
import 'package:shared_preferences/shared_preferences.dart';
|
||||||
|
|
||||||
import '../gradeAverages/gradeAveragesSettings.dart';
|
import '../gradeAverages/gradeAveragesSettings.dart';
|
||||||
|
import '../talk/talkSettings.dart';
|
||||||
import '../timetable/timetableSettings.dart';
|
import '../timetable/timetableSettings.dart';
|
||||||
import 'settings.dart';
|
import 'settings.dart';
|
||||||
|
|
||||||
@ -55,6 +56,9 @@ class SettingsProvider extends ChangeNotifier {
|
|||||||
timetableSettings: TimetableSettings(
|
timetableSettings: TimetableSettings(
|
||||||
zoom: 40,
|
zoom: 40,
|
||||||
),
|
),
|
||||||
|
talkSettings: TalkSettings(
|
||||||
|
sortFavoritesToTop: true,
|
||||||
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
13
lib/storage/talk/talkSettings.dart
Normal file
13
lib/storage/talk/talkSettings.dart
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
import 'package:json_annotation/json_annotation.dart';
|
||||||
|
|
||||||
|
part 'talkSettings.g.dart';
|
||||||
|
|
||||||
|
@JsonSerializable()
|
||||||
|
class TalkSettings {
|
||||||
|
bool sortFavoritesToTop;
|
||||||
|
|
||||||
|
TalkSettings({required this.sortFavoritesToTop});
|
||||||
|
|
||||||
|
factory TalkSettings.fromJson(Map<String, dynamic> json) => _$TalkSettingsFromJson(json);
|
||||||
|
Map<String, dynamic> toJson() => _$TalkSettingsToJson(this);
|
||||||
|
}
|
16
lib/storage/talk/talkSettings.g.dart
Normal file
16
lib/storage/talk/talkSettings.g.dart
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||||
|
|
||||||
|
part of 'talkSettings.dart';
|
||||||
|
|
||||||
|
// **************************************************************************
|
||||||
|
// JsonSerializableGenerator
|
||||||
|
// **************************************************************************
|
||||||
|
|
||||||
|
TalkSettings _$TalkSettingsFromJson(Map<String, dynamic> json) => TalkSettings(
|
||||||
|
sortFavoritesToTop: json['sortFavoritesToTop'] as bool,
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> _$TalkSettingsToJson(TalkSettings instance) =>
|
||||||
|
<String, dynamic>{
|
||||||
|
'sortFavoritesToTop': instance.sortFavoritesToTop,
|
||||||
|
};
|
@ -4,6 +4,7 @@ import 'package:flutter/material.dart';
|
|||||||
import 'package:provider/provider.dart';
|
import 'package:provider/provider.dart';
|
||||||
|
|
||||||
import '../../../model/chatList/chatListProps.dart';
|
import '../../../model/chatList/chatListProps.dart';
|
||||||
|
import '../../../storage/base/settingsProvider.dart';
|
||||||
import 'chatTile.dart';
|
import 'chatTile.dart';
|
||||||
import 'joinChat.dart';
|
import 'joinChat.dart';
|
||||||
import 'searchChat.dart';
|
import 'searchChat.dart';
|
||||||
@ -65,7 +66,10 @@ class _ChatListState extends State<ChatList> {
|
|||||||
latestData = data;
|
latestData = data;
|
||||||
|
|
||||||
List<ChatTile> chats = [];
|
List<ChatTile> chats = [];
|
||||||
for (var chatRoom in data.getRoomsResponse.sortByLastActivity()) {
|
for (var chatRoom in data.getRoomsResponse.sortBy(
|
||||||
|
lastActivity: true,
|
||||||
|
favoritesToTop: Provider.of<SettingsProvider>(context).val().talkSettings.sortFavoritesToTop)
|
||||||
|
) {
|
||||||
chats.add(ChatTile(data: chatRoom, query: _query));
|
chats.add(ChatTile(data: chatRoom, query: _query));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -91,6 +91,21 @@ class _SettingsState extends State<Settings> {
|
|||||||
|
|
||||||
const Divider(),
|
const Divider(),
|
||||||
|
|
||||||
|
ListTile(
|
||||||
|
leading: const Icon(Icons.star_border),
|
||||||
|
title: const Text("Favoriten im Talk nach oben sortieren"),
|
||||||
|
trailing: Checkbox(
|
||||||
|
value: settings.val().talkSettings.sortFavoritesToTop,
|
||||||
|
onChanged: (e) {
|
||||||
|
setState(() {
|
||||||
|
settings.val(write: true).talkSettings.sortFavoritesToTop = 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