Support for loading history and marking read
This commit is contained in:
parent
200ce2285c
commit
c4255f340a
1 changed files with 25 additions and 18 deletions
|
|
@ -7,6 +7,7 @@ import "package:nexus/controllers/account_data_controller.dart";
|
||||||
import "package:nexus/controllers/client_controller.dart";
|
import "package:nexus/controllers/client_controller.dart";
|
||||||
import "package:nexus/controllers/client_state_controller.dart";
|
import "package:nexus/controllers/client_state_controller.dart";
|
||||||
import "package:nexus/controllers/power_level_controller.dart";
|
import "package:nexus/controllers/power_level_controller.dart";
|
||||||
|
import "package:nexus/controllers/rooms_controller.dart";
|
||||||
import "package:nexus/controllers/selected_room_controller.dart";
|
import "package:nexus/controllers/selected_room_controller.dart";
|
||||||
import "package:nexus/controllers/room_chat_controller.dart";
|
import "package:nexus/controllers/room_chat_controller.dart";
|
||||||
import "package:nexus/controllers/via_controller.dart";
|
import "package:nexus/controllers/via_controller.dart";
|
||||||
|
|
@ -45,13 +46,6 @@ class RoomChat extends HookConsumerWidget {
|
||||||
|
|
||||||
final memberListOpened = useState<bool>(showMembersByDefault);
|
final memberListOpened = useState<bool>(showMembersByDefault);
|
||||||
|
|
||||||
final listController = useRef(ListController());
|
|
||||||
final scrollController = useScrollController(
|
|
||||||
onAttach: (position) => position.addListener(() {
|
|
||||||
// TODO: Do things on scroll to top or bottom
|
|
||||||
}),
|
|
||||||
);
|
|
||||||
|
|
||||||
final userId = ref.watch(ClientStateController.provider)?.userId;
|
final userId = ref.watch(ClientStateController.provider)?.userId;
|
||||||
final roomId = ref.watch(
|
final roomId = ref.watch(
|
||||||
SelectedRoomController.provider.select((value) => value?.metadata?.id),
|
SelectedRoomController.provider.select((value) => value?.metadata?.id),
|
||||||
|
|
@ -78,6 +72,21 @@ class RoomChat extends HookConsumerWidget {
|
||||||
final controllerProvider = RoomChatController.provider(roomId);
|
final controllerProvider = RoomChatController.provider(roomId);
|
||||||
final notifier = ref.watch(controllerProvider.notifier);
|
final notifier = ref.watch(controllerProvider.notifier);
|
||||||
|
|
||||||
|
final client = ref.watch(ClientController.provider.notifier);
|
||||||
|
|
||||||
|
final listController = useRef(ListController());
|
||||||
|
final scrollController = useScrollController();
|
||||||
|
scrollController.addListener(() async {
|
||||||
|
if (!scrollController.position.atEdge) return;
|
||||||
|
|
||||||
|
if (scrollController.position.pixels == 0) {
|
||||||
|
final room = ref.watch(RoomsController.provider)[roomId];
|
||||||
|
if (room != null) client.markRead(room);
|
||||||
|
} else {
|
||||||
|
await notifier.loadOlder();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
final composerNode = useFocusNode(
|
final composerNode = useFocusNode(
|
||||||
onKeyEvent: (_, event) {
|
onKeyEvent: (_, event) {
|
||||||
if (event is KeyDownEvent &&
|
if (event is KeyDownEvent &&
|
||||||
|
|
@ -269,17 +278,15 @@ class RoomChat extends HookConsumerWidget {
|
||||||
),
|
),
|
||||||
TextButton(
|
TextButton(
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
ref
|
client.reportEvent(
|
||||||
.watch(ClientController.provider.notifier)
|
ReportRequest(
|
||||||
.reportEvent(
|
roomId: roomId,
|
||||||
ReportRequest(
|
eventId: event.eventId,
|
||||||
roomId: roomId,
|
reason: reasonController.text.isEmpty
|
||||||
eventId: event.eventId,
|
? null
|
||||||
reason: reasonController.text.isEmpty
|
: reasonController.text,
|
||||||
? null
|
),
|
||||||
: reasonController.text,
|
);
|
||||||
),
|
|
||||||
);
|
|
||||||
Navigator.of(context).pop();
|
Navigator.of(context).pop();
|
||||||
},
|
},
|
||||||
child: Text("Report"),
|
child: Text("Report"),
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue