fix: prevent text fields from auto-focusing on screen load (#3857)

This commit is contained in:
Mac DeCourcy
2025-11-29 11:52:17 -08:00
committed by GitHub
parent d83c83cb81
commit ccbdb7bbf3
3 changed files with 11 additions and 2 deletions

View File

@@ -38,6 +38,7 @@ import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalFocusManager
import androidx.compose.ui.unit.dp
import androidx.navigation.NavHostController
import kotlinx.coroutines.flow.Flow
@@ -87,6 +88,9 @@ fun AdaptiveNodeListScreen(
value = navigator.scaffoldValue,
listPane = {
AnimatedPane {
val focusManager = LocalFocusManager.current
// Prevent TextFields from auto-focusing when pane animates in
LaunchedEffect(Unit) { focusManager.clearFocus() }
NodeListScreen(
navigateToNodeDetails = { nodeId ->
scope.launch { navigator.navigateTo(ListDetailPaneScaffoldRole.Detail, nodeId) }
@@ -98,7 +102,10 @@ fun AdaptiveNodeListScreen(
},
detailPane = {
AnimatedPane {
val focusManager = LocalFocusManager.current
val nodeId = navigator.currentDestination?.contentKey
// Prevent TextFields from auto-focusing when pane animates in
LaunchedEffect(nodeId) { focusManager.clearFocus() }
if (nodeId != null) {
NodeDetailScreenWrapper(
nodeId = nodeId,

View File

@@ -17,6 +17,7 @@
package org.meshtastic.feature.node.detail
import androidx.compose.foundation.focusable
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxSize
@@ -109,7 +110,7 @@ fun NodeDetailList(
}
Column(
modifier = modifier.fillMaxSize().verticalScroll(rememberScrollState()).padding(16.dp),
modifier = modifier.fillMaxSize().verticalScroll(rememberScrollState()).padding(16.dp).focusable(),
verticalArrangement = Arrangement.spacedBy(16.dp),
) {
if (metricsState.deviceHardware != null) {

View File

@@ -19,6 +19,7 @@ package org.meshtastic.feature.node.list
import androidx.compose.animation.core.animateFloatAsState
import androidx.compose.foundation.background
import androidx.compose.foundation.focusable
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxSize
@@ -148,7 +149,7 @@ fun NodeListScreen(
)
},
) { contentPadding ->
Box(modifier = Modifier.fillMaxSize().padding(contentPadding)) {
Box(modifier = Modifier.fillMaxSize().padding(contentPadding).focusable()) {
LazyColumn(state = listState, modifier = Modifier.fillMaxSize()) {
stickyHeader {
val animatedAlpha by