diff --git a/lib/controllers/jump_to_event.dart b/lib/controllers/jump_to_event.dart index 389f077..da42cf9 100644 --- a/lib/controllers/jump_to_event.dart +++ b/lib/controllers/jump_to_event.dart @@ -1,6 +1,6 @@ import "package:flutter_riverpod/flutter_riverpod.dart"; -class JumpToEventController extends Notifier { +class JumpToEventController(String? _) extends Notifier { @override String? build() => null; @@ -9,7 +9,8 @@ class JumpToEventController extends Notifier { @override bool updateShouldNotify(_, _) => true; - static final provider = NotifierProvider( - JumpToEventController.new, - ); + static final provider = NotifierProvider.family + .autoDispose( + JumpToEventController.new, + ); } diff --git a/lib/widgets/pages/chat.dart b/lib/widgets/pages/chat.dart index 34efe5c..186dfa2 100644 --- a/lib/widgets/pages/chat.dart +++ b/lib/widgets/pages/chat.dart @@ -30,7 +30,7 @@ class const ChatPage({super.key}) extends HookConsumerWidget { child: Consumer( builder: (context, ref, _) { final initialHighlight = ref.watch( - JumpToEventController.provider, + JumpToEventController.provider(roomId), ); return RoomChat( key: ValueKey((roomId, initialHighlight)), diff --git a/lib/widgets/pages/notifications.dart b/lib/widgets/pages/notifications.dart index c8cfe76..2ad8930 100644 --- a/lib/widgets/pages/notifications.dart +++ b/lib/widgets/pages/notifications.dart @@ -130,7 +130,7 @@ class const NotificationsPage({ padding: .only(top: 8), child: HighlightWrapper( InkWell( - onTap: () { + onTap: () async { final spaces = ref.read( SpacesController.provider, ); @@ -152,14 +152,14 @@ class const NotificationsPage({ ); if (space == null) return; - ref + await ref .read( KeyController.provider( KeyController.spaceKey, ).notifier, ) .set(space.id); - ref + await ref .read( KeyController.provider( KeyController.roomKey, @@ -167,14 +167,16 @@ class const NotificationsPage({ ) .set(event.roomId); ref - .read( - JumpToEventController - .provider - .notifier, + .watch( + JumpToEventController.provider( + event.roomId, + ).notifier, ) .set(event.eventId); - Navigator.of(context).pop(); + if (context.mounted) { + Navigator.of(context).pop(); + } }, child: IgnorePointer( child: EventRenderer(event), diff --git a/lib/widgets/sidebar.dart b/lib/widgets/sidebar.dart index 8c4328c..cc6d441 100644 --- a/lib/widgets/sidebar.dart +++ b/lib/widgets/sidebar.dart @@ -192,13 +192,14 @@ class const Sidebar({required final bool isDesktop, super.key}) ), IconButton( tooltip: "Open notifications", - onPressed: () => Navigator.of(context) - ..pop() - ..push( + onPressed: () { + if (!isDesktop) Navigator.of(context).pop(); + Navigator.of(context).push( MaterialPageRoute( builder: (_) => NotificationsPage(), ), - ), + ); + }, icon: Icon(Icons.notifications), ), IconButton(