JetPack Compet SharedBounds Inside CenterLignedTopAppbar сбои на первом экране с неонициализированной ошибкой LayOutCoorAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 JetPack Compet SharedBounds Inside CenterLignedTopAppbar сбои на первом экране с неонициализированной ошибкой LayOutCoor

Сообщение Anonymous »

Я использую SharedTransitionLayout в JetPack Compose, чтобы оживить элементы на разных экранах. Проблема возникает, когда я использую Modifier.SharedBounds в разделе заголовка CenterLignEdTopAppbar. Используйте его внутри заголовка, приложение сбоя при запуске с этой ошибкой: < /p>

Java.lang.illegalStateException: неизнайлизированные LayoutCoordinates.
Пожалуйста, убедитесь, что при использовании композиции SharedTransitionScope,
модификатор передается в детское содержание или использует sharedtransitionlayout
. .


Что я наблюдал так FAR: < /p>
Если я удаляю Sharedbounds, аварий исчезает. < /p>
Все объекты, связанные с переходом (SharedTransitionScope, AnimatedVisibilyScope, SharedContentState), правильно инициализированы. /p>
Сбой происходит только на первом экране, который загружается. < /p>
Если я перейду к другому экрану Где Sharedbounds находится внутри Topappbar, он работает совершенно нормально (до тех пор, пока это не первый экран). < /p>
Любой экран, который устанавливается при ударе первого экрана, если он содержит эту настройку Appbar. /p>
Вот упрощенная версия кода, которая вызывает проблему: < /p>

Код: Выделить всё

Scaffold(
topBar = {
CenterAlignedTopAppBar(
title = {
with(sharedTransitionScope) {
Text(
modifier = Modifier.sharedBounds(
sharedContentState = rememberSharedContentState(
key = "TITLE_TRANSITION_KEY"
),
animatedVisibilityScope = animatedVisibilityScope
),
text = "My App",
fontWeight = FontWeight.Bold,
textAlign = TextAlign.Center
)
}
}
)
}
) { / Content / }
< /code>
Временный обходной путь, который работает: < /p>
Если я проверю Isready, прежде чем применять Sharedbounds, аварий избегается: < /p>
if (isReady) {
Modifier.sharedBounds(...)
}
< /code>
Но я хотел бы понять, почему это происходит и как правильно это исправить.  < /p>
Мой вопрос: < /p>
< P> Почему SharedBounds внутри Topappbar сбои только при его использовании на первом экране, но не на последующих экранах? нагрузки? em> AbstractActivity.kt 
abstract class AbstractActivity : ComponentActivity() {

@Inject
lateinit var preferences: PreferencesUseCase

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)

val themeId = preferences.getInt(
CommonConstants.PREFERENCE_THEME_ID_KEY, CommonConstants.THEME_DARK_KEY
)

val appTheme = ThemeHelper.getTheme(themeId, ThemeHelper.DEFAULT_THEME)

setTheme(appTheme.resourceId)

enableEdgeToEdge()

setContent {

ApplicationTheme(appTheme, direction = LayoutDirection.Rtl) {

AppContent()

}
}
}

@Composable
abstract fun AppContent()

}
appactivity.kt

Код: Выделить всё

@AndroidEntryPoint
class AppActivity : AbstractActivity() {

@Composable
override fun AppContent() {

val navController = rememberNavController()

SharedTransitionLayout {

NavHost(
navController = navController,
modifier = Modifier
.fillMaxSize()
.imePadding()
,
startDestination = AppDestinations.Main
) {

composable {

MainScreen(
sharedTransitionScope   = this@SharedTransitionLayout,
animatedVisibilityScope = this
)
}

composable  {

SettingsScreen(
sharedTransitionScope   = this@SharedTransitionLayout,
animatedVisibilityScope = this
)
}
}
}
}
}
mainscreen.kt

Код: Выделить всё

@Composable
fun MainScreen(
sharedTransitionScope: SharedTransitionScope,
animatedVisibilityScope: AnimatedVisibilityScope
) {
Scaffold(
topBar = {
with(sharedTransitionScope) {
CenterAlignedTopAppBar(
title = {
Text(
modifier = Modifier
.sharedBounds(
sharedContentState = rememberSharedContentState(
key = "TOOLBAR_TITLE_EXPLODE_BOUNDS"
),
animatedVisibilityScope = animatedVisibilityScope
)
,
text = stringResource(R.string.app_name),
fontWeight = FontWeight.Bold,
textAlign = TextAlign.Center,,
)
}
)
}
}

) { innerPadding ->
...
}
}
settingsscreen.kt
@Composable
fun SettingsScreen(
sharedTransitionScope: SharedTransitionScope,
animatedVisibilityScope: AnimatedVisibilityScope,
) {
Scaffold(
topBar = {
with(sharedTransitionScope) {
TopAppBar(
title = {
Text(
modifier = Modifier
.sharedBounds(
sharedContentState = rememberSharedContentState(
key = "TOOLBAR_TITLE_EXPLODE_BOUNDS"
),
animatedVisibilityScope = animatedVisibilityScope
)
,
text = stringResource(R.string.toolbar_title_settings),
fontWeight = FontWeight.Bold,
textAlign = TextAlign.Center
)
}
)
}
}
) { innerPadding ->
...
}
}
< /code>

Заранее спасибо за любые идеи! Я действительно ценю любую помощь в понимании, почему это происходит и как правильно это исправить. Если вам нужна дополнительная информация, не стесняйтесь спрашивать, и я буду рад предоставить дополнительную информацию. 🚀


Подробнее здесь: https://stackoverflow.com/questions/794 ... first-scre
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»