fix mobile switch and inbox selection

Signed-off-by: kenny lopez <klopez4212@gmail.com>
This commit is contained in:
kenny lopez
2026-08-03 17:09:40 +01:00
parent 11a4837ce1
commit 2ea7367d65
2 changed files with 14 additions and 8 deletions
@@ -76,6 +76,7 @@ class ActivityPage extends HookConsumerWidget {
// otherwise recomputes its deep link after the read marker changes and
// opens the latest event instead of the oldest unread one the user chose.
final selectedItemTarget = useState<FeedItem?>(null);
final selectedItemForDetail = useState<InboxItem?>(null);
final isWideInbox =
MediaQuery.sizeOf(context).width >= _wideInboxBreakpoint;
final headerTitleStyle = context.textTheme.titleMedium?.copyWith(
@@ -119,16 +120,21 @@ class ActivityPage extends HookConsumerWidget {
final hasSelectedItem = visibleItems.any(
(item) => item.id == selectedItemId.value,
);
if (!hasSelectedItem) {
final retainsSelectedDetail =
selectedItemForDetail.value?.id == selectedItemId.value;
if (!hasSelectedItem && !retainsSelectedDetail) {
selectedItemId.value = visibleItems.first.id;
selectedItemTarget.value = null;
selectedItemForDetail.value = null;
}
return null;
}, [isWideInbox, visibleItemIdsKey, filter.value, unreadOnly.value]);
final selectedItem = visibleItems.cast<InboxItem?>().firstWhere(
(item) => item?.id == selectedItemId.value,
orElse: () => null,
);
final selectedItem =
visibleItems.cast<InboxItem?>().firstWhere(
(item) => item?.id == selectedItemId.value,
orElse: () => null,
) ??
selectedItemForDetail.value;
// Preload sender profiles for visible rows.
final preloadPubkeys = {
@@ -209,6 +215,7 @@ class ActivityPage extends HookConsumerWidget {
if (isWideInbox) {
selectedItemId.value = item.id;
selectedItemTarget.value = target;
selectedItemForDetail.value = item;
markItemRead(item);
return;
}
@@ -356,6 +363,7 @@ class ActivityPage extends HookConsumerWidget {
onChanged: (nextFilter) {
selectedItemId.value = null;
selectedItemTarget.value = null;
selectedItemForDetail.value = null;
filter.value = nextFilter;
},
),
@@ -69,9 +69,7 @@ class ChannelsNotifier extends AsyncNotifier<List<Channel>> {
sessionState.status != SessionStatus.connected;
ref.listen(relaySessionProvider, (previous, next) {
if (next.status != SessionStatus.connected) return;
if (waitingForInitialConnection &&
!_hasLoaded &&
!connected.isCompleted) {
if (waitingForInitialConnection && !connected.isCompleted) {
connected.complete();
} else if (previous?.status != SessionStatus.connected) {
unawaited(_backstopRefresh());