Added option to sort unread chats to top
This commit is contained in:
parent
b94a3d33e9
commit
f8ac83a296
@ -14,12 +14,21 @@ class GetRoomResponse extends ApiResponse {
|
||||
factory GetRoomResponse.fromJson(Map<String, dynamic> json) => _$GetRoomResponseFromJson(json);
|
||||
Map<String, dynamic> toJson() => _$GetRoomResponseToJson(this);
|
||||
|
||||
List<GetRoomResponseObject> sortBy({bool lastActivity = true, bool favoritesToTop = false}) {
|
||||
List<GetRoomResponseObject> sorted = data.toList();
|
||||
if(lastActivity) sorted.sort((a, b) => -a.lastActivity.compareTo(b.lastActivity));
|
||||
if(favoritesToTop) sorted.sort((a, b) => b.isFavorite ? 1 : -1);
|
||||
List<GetRoomResponseObject> sortBy({bool lastActivity = true, required bool favoritesToTop, required bool unreadToTop}) {
|
||||
return data.toList()..sort((a, b) {
|
||||
|
||||
return sorted;
|
||||
// Unread messages
|
||||
if(unreadToTop) {
|
||||
int unreadStatus = b.unreadMessages.compareTo(a.unreadMessages);
|
||||
if(unreadStatus != 0) return unreadStatus;
|
||||
}
|
||||
|
||||
// Favorites
|
||||
if(favoritesToTop) if(a.isFavorite) return -1;
|
||||
|
||||
// Activity
|
||||
return b.lastActivity.compareTo(a.lastActivity);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -58,6 +58,7 @@ class SettingsProvider extends ChangeNotifier {
|
||||
),
|
||||
talkSettings: TalkSettings(
|
||||
sortFavoritesToTop: true,
|
||||
sortUnreadToTop: false,
|
||||
),
|
||||
);
|
||||
}
|
||||
|
@ -5,8 +5,9 @@ part 'talkSettings.g.dart';
|
||||
@JsonSerializable()
|
||||
class TalkSettings {
|
||||
bool sortFavoritesToTop;
|
||||
bool sortUnreadToTop;
|
||||
|
||||
TalkSettings({required this.sortFavoritesToTop});
|
||||
TalkSettings({required this.sortFavoritesToTop, required this.sortUnreadToTop});
|
||||
|
||||
factory TalkSettings.fromJson(Map<String, dynamic> json) => _$TalkSettingsFromJson(json);
|
||||
Map<String, dynamic> toJson() => _$TalkSettingsToJson(this);
|
||||
|
@ -8,9 +8,11 @@ part of 'talkSettings.dart';
|
||||
|
||||
TalkSettings _$TalkSettingsFromJson(Map<String, dynamic> json) => TalkSettings(
|
||||
sortFavoritesToTop: json['sortFavoritesToTop'] as bool,
|
||||
sortUnreadToTop: json['sortUnreadToTop'] as bool,
|
||||
);
|
||||
|
||||
Map<String, dynamic> _$TalkSettingsToJson(TalkSettings instance) =>
|
||||
<String, dynamic>{
|
||||
'sortFavoritesToTop': instance.sortFavoritesToTop,
|
||||
'sortUnreadToTop': instance.sortUnreadToTop,
|
||||
};
|
||||
|
@ -67,8 +67,10 @@ class _ChatListState extends State<ChatList> {
|
||||
|
||||
List<ChatTile> chats = [];
|
||||
for (var chatRoom in data.getRoomsResponse.sortBy(
|
||||
lastActivity: true,
|
||||
favoritesToTop: Provider.of<SettingsProvider>(context).val().talkSettings.sortFavoritesToTop)
|
||||
lastActivity: true,
|
||||
favoritesToTop: Provider.of<SettingsProvider>(context).val().talkSettings.sortFavoritesToTop,
|
||||
unreadToTop: Provider.of<SettingsProvider>(context).val().talkSettings.sortUnreadToTop,
|
||||
)
|
||||
) {
|
||||
chats.add(ChatTile(data: chatRoom, query: _query));
|
||||
}
|
||||
|
@ -104,6 +104,19 @@ class _SettingsState extends State<Settings> {
|
||||
),
|
||||
),
|
||||
|
||||
ListTile(
|
||||
leading: const Icon(Icons.mark_email_unread_outlined),
|
||||
title: const Text("Ungelesene Chats nach oben sortieren"),
|
||||
trailing: Checkbox(
|
||||
value: settings.val().talkSettings.sortUnreadToTop,
|
||||
onChanged: (e) {
|
||||
setState(() {
|
||||
settings.val(write: true).talkSettings.sortUnreadToTop = e!;
|
||||
});
|
||||
},
|
||||
),
|
||||
),
|
||||
|
||||
const Divider(),
|
||||
|
||||
ListTile(
|
||||
@ -150,7 +163,6 @@ class _SettingsState extends State<Settings> {
|
||||
leading: const Icon(Icons.developer_mode_outlined),
|
||||
title: const Text("Entwickleransicht"),
|
||||
trailing: Checkbox(
|
||||
visualDensity: const VisualDensity(horizontal: VisualDensity.minimumDensity),
|
||||
value: settings.val().devToolsEnabled,
|
||||
onChanged: (state) {
|
||||
changeView() => setState(() {
|
||||
|
Loading…
x
Reference in New Issue
Block a user