design: Hide unimportant state events instead of folding

This commit is contained in:
Christian Pauly 2022-10-15 10:38:06 +02:00
commit b642f89738
13 changed files with 125 additions and 161 deletions

View file

@ -28,7 +28,6 @@ import 'package:fluffychat/utils/platform_infos.dart';
import 'package:fluffychat/widgets/matrix.dart';
import '../../utils/account_bundles.dart';
import '../../utils/localized_exception_extension.dart';
import '../../utils/matrix_sdk_extensions.dart/filtered_timeline_extension.dart';
import '../../utils/matrix_sdk_extensions.dart/matrix_file_extension.dart';
import 'send_file_dialog.dart';
import 'send_location_dialog.dart';
@ -111,8 +110,6 @@ class ChatController extends State<Chat> {
List<Event> selectedEvents = [];
late List<Event> filteredEvents;
final Set<String> unfolded = {};
Event? replyEvent;
@ -184,22 +181,7 @@ class ChatController extends State<Chat> {
void updateView() {
if (!mounted) return;
setState(
() {
filteredEvents = timeline!.getFilteredEvents(unfolded: unfolded);
},
);
}
void unfold(String eventId) {
var i = filteredEvents.indexWhere((e) => e.eventId == eventId);
setState(() {
while (i < filteredEvents.length - 1 && filteredEvents[i].isState) {
unfolded.add(filteredEvents[i].eventId);
i++;
}
filteredEvents = timeline!.getFilteredEvents(unfolded: unfolded);
});
setState(() {});
}
Future<bool> getTimeline() async {
@ -225,7 +207,6 @@ class ChatController extends State<Chat> {
}
});
}
filteredEvents = timeline!.getFilteredEvents(unfolded: unfolded);
timeline!.requestKeys(onlineKeyBackupOnly: false);
return true;
}
@ -656,7 +637,7 @@ class ChatController extends State<Chat> {
}
void scrollToEventId(String eventId) async {
var eventIndex = filteredEvents.indexWhere((e) => e.eventId == eventId);
var eventIndex = timeline!.events.indexWhere((e) => e.eventId == eventId);
if (eventIndex == -1) {
// event id not found...maybe we can fetch it?
// the try...finally is here to start and close the loading dialog reliably
@ -693,7 +674,7 @@ class ChatController extends State<Chat> {
rethrow;
}
eventIndex =
filteredEvents.indexWhere((e) => e.eventId == eventId);
timeline!.events.indexWhere((e) => e.eventId == eventId);
}
});
}