pref(MainPage): 去除非 `@Stable` 的参数
This commit is contained in:
parent
5249723790
commit
c541dbbbd6
|
|
@ -24,6 +24,8 @@ import androidx.compose.material.Text
|
|||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.CompositionLocalProvider
|
||||
import androidx.compose.runtime.LaunchedEffect
|
||||
import androidx.compose.runtime.State
|
||||
import androidx.compose.runtime.collectAsState
|
||||
import androidx.compose.runtime.staticCompositionLocalOf
|
||||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.res.stringResource
|
||||
|
|
@ -83,6 +85,8 @@ import kotlinx.coroutines.launch
|
|||
|
||||
val LocalNotificationCountFlow =
|
||||
staticCompositionLocalOf<Flow<Int>> { throw IllegalStateException("not allowed here!") }
|
||||
val LocalDevicePosture =
|
||||
staticCompositionLocalOf<State<DevicePosture>> { throw IllegalStateException("not allowed here!") }
|
||||
|
||||
@AndroidEntryPoint
|
||||
class MainActivityV2 : BaseComposeActivity() {
|
||||
|
|
@ -219,7 +223,10 @@ class MainActivityV2 : BaseComposeActivity() {
|
|||
okSignAlertDialogState.show()
|
||||
}
|
||||
}
|
||||
CompositionLocalProvider(LocalNotificationCountFlow provides notificationCountFlow) {
|
||||
CompositionLocalProvider(
|
||||
LocalNotificationCountFlow provides notificationCountFlow,
|
||||
LocalDevicePosture provides devicePostureFlow.collectAsState(),
|
||||
) {
|
||||
Surface(
|
||||
color = ExtendedTheme.colors.background
|
||||
) {
|
||||
|
|
@ -274,7 +281,6 @@ class MainActivityV2 : BaseComposeActivity() {
|
|||
engine = engine,
|
||||
dependenciesContainerBuilder = {
|
||||
dependency(MainPageDestination) { this@MainActivityV2 }
|
||||
dependency(devicePostureFlow)
|
||||
}
|
||||
)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -19,7 +19,6 @@ import androidx.compose.material.icons.rounded.Inventory2
|
|||
import androidx.compose.material.icons.rounded.Notifications
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.LaunchedEffect
|
||||
import androidx.compose.runtime.collectAsState
|
||||
import androidx.compose.runtime.getValue
|
||||
import androidx.compose.runtime.remember
|
||||
import androidx.compose.runtime.rememberCoroutineScope
|
||||
|
|
@ -30,6 +29,7 @@ import androidx.compose.ui.graphics.vector.ImageVector
|
|||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import androidx.compose.ui.res.vectorResource
|
||||
import com.huanchengfly.tieba.post.LocalDevicePosture
|
||||
import com.huanchengfly.tieba.post.LocalNotificationCountFlow
|
||||
import com.huanchengfly.tieba.post.R
|
||||
import com.huanchengfly.tieba.post.arch.BaseComposeActivity.Companion.LocalWindowSizeClass
|
||||
|
|
@ -50,8 +50,9 @@ import com.huanchengfly.tieba.post.utils.appPreferences
|
|||
import com.ramcosta.composedestinations.annotation.Destination
|
||||
import com.ramcosta.composedestinations.annotation.RootNavGraph
|
||||
import com.ramcosta.composedestinations.navigation.DestinationsNavigator
|
||||
import kotlinx.collections.immutable.ImmutableList
|
||||
import kotlinx.collections.immutable.toImmutableList
|
||||
import kotlinx.coroutines.flow.MutableSharedFlow
|
||||
import kotlinx.coroutines.flow.StateFlow
|
||||
import kotlinx.coroutines.launch
|
||||
|
||||
@Composable
|
||||
|
|
@ -59,7 +60,7 @@ private fun NavigationWrapper(
|
|||
currentPosition: Int,
|
||||
onChangePosition: (position: Int) -> Unit,
|
||||
onReselected: (position: Int) -> Unit,
|
||||
navigationItems: List<NavigationItem>,
|
||||
navigationItems: ImmutableList<NavigationItem>,
|
||||
navigationType: MainNavigationType,
|
||||
navigationContentPosition: MainNavigationContentPosition,
|
||||
content: @Composable () -> Unit,
|
||||
|
|
@ -97,7 +98,6 @@ private fun NavigationWrapper(
|
|||
@Composable
|
||||
fun MainPage(
|
||||
navigator: DestinationsNavigator,
|
||||
devicePostureFlow: StateFlow<DevicePosture>,
|
||||
viewModel: MainViewModel = pageViewModel<MainUiIntent, MainViewModel>(emptyList()),
|
||||
) {
|
||||
val messageCount by viewModel.uiState.collectPartialAsState(
|
||||
|
|
@ -125,11 +125,12 @@ fun MainPage(
|
|||
val coroutineScope = rememberCoroutineScope()
|
||||
val themeColors = ExtendedTheme.colors
|
||||
val windowSizeClass = LocalWindowSizeClass.current
|
||||
val foldingDevicePosture by devicePostureFlow.collectAsState()
|
||||
val foldingDevicePosture by LocalDevicePosture.current
|
||||
val navigationItems = listOfNotNull(
|
||||
NavigationItem(
|
||||
id = "home",
|
||||
icon = { if (it) Icons.Rounded.Inventory2 else Icons.Outlined.Inventory2 },
|
||||
title = stringResource(id = R.string.title_main),
|
||||
title = { stringResource(id = R.string.title_main) },
|
||||
content = {
|
||||
HomePage(
|
||||
eventFlow = eventFlows[0],
|
||||
|
|
@ -143,19 +144,21 @@ fun MainPage(
|
|||
),
|
||||
if (LocalContext.current.appPreferences.hideExplore) null
|
||||
else NavigationItem(
|
||||
id = "explore",
|
||||
icon = {
|
||||
if (it) ImageVector.vectorResource(id = R.drawable.ic_round_toys) else ImageVector.vectorResource(
|
||||
id = R.drawable.ic_outline_toys
|
||||
)
|
||||
},
|
||||
title = stringResource(id = R.string.title_explore),
|
||||
title = { stringResource(id = R.string.title_explore) },
|
||||
content = {
|
||||
ExplorePage(eventFlows[1])
|
||||
}
|
||||
),
|
||||
NavigationItem(
|
||||
id = "notification",
|
||||
icon = { if (it) Icons.Rounded.Notifications else Icons.Outlined.Notifications },
|
||||
title = stringResource(id = R.string.title_notifications),
|
||||
title = { stringResource(id = R.string.title_notifications) },
|
||||
badge = messageCount > 0,
|
||||
badgeText = "$messageCount",
|
||||
onClick = {
|
||||
|
|
@ -166,13 +169,14 @@ fun MainPage(
|
|||
}
|
||||
),
|
||||
NavigationItem(
|
||||
id = "user",
|
||||
icon = { if (it) Icons.Rounded.AccountCircle else Icons.Outlined.AccountCircle },
|
||||
title = stringResource(id = R.string.title_user),
|
||||
title = { stringResource(id = R.string.title_user) },
|
||||
content = {
|
||||
UserPage()
|
||||
}
|
||||
),
|
||||
)
|
||||
).toImmutableList()
|
||||
|
||||
val navigationType = when (windowSizeClass.widthSizeClass) {
|
||||
WindowWidthSizeClass.Compact -> {
|
||||
|
|
@ -245,7 +249,7 @@ fun MainPage(
|
|||
contentPadding = paddingValues,
|
||||
pageCount = navigationItems.size,
|
||||
state = pagerState,
|
||||
key = { navigationItems[it].title },
|
||||
key = { navigationItems[it].id },
|
||||
modifier = Modifier.fillMaxSize(),
|
||||
verticalAlignment = Alignment.Top,
|
||||
userScrollEnabled = false
|
||||
|
|
|
|||
|
|
@ -55,6 +55,7 @@ import com.huanchengfly.tieba.post.ui.widgets.compose.AccountNavIcon
|
|||
import com.huanchengfly.tieba.post.ui.widgets.compose.Avatar
|
||||
import com.huanchengfly.tieba.post.ui.widgets.compose.Sizes
|
||||
import com.huanchengfly.tieba.post.utils.AccountUtil.LocalAccount
|
||||
import kotlinx.collections.immutable.ImmutableList
|
||||
|
||||
enum class LayoutType {
|
||||
HEADER, CONTENT
|
||||
|
|
@ -130,7 +131,7 @@ fun NavigationDrawerContent(
|
|||
currentPosition: Int,
|
||||
onChangePosition: (position: Int) -> Unit,
|
||||
onReselected: (position: Int) -> Unit,
|
||||
navigationItems: List<NavigationItem>,
|
||||
navigationItems: ImmutableList<NavigationItem>,
|
||||
navigationContentPosition: MainNavigationContentPosition
|
||||
) {
|
||||
PositionLayout(
|
||||
|
|
@ -199,12 +200,12 @@ fun NavigationDrawerContent(
|
|||
onChangePosition(index)
|
||||
}
|
||||
},
|
||||
label = { Text(text = navigationItem.title) },
|
||||
label = { Text(text = navigationItem.title(index == currentPosition)) },
|
||||
icon = {
|
||||
Box {
|
||||
Icon(
|
||||
imageVector = navigationItem.icon(index == currentPosition),
|
||||
contentDescription = navigationItem.title
|
||||
contentDescription = navigationItem.title(index == currentPosition)
|
||||
)
|
||||
if (navigationItem.badge) {
|
||||
Text(
|
||||
|
|
@ -283,7 +284,7 @@ fun NavigationRail(
|
|||
currentPosition: Int,
|
||||
onChangePosition: (position: Int) -> Unit,
|
||||
onReselected: (position: Int) -> Unit,
|
||||
navigationItems: List<NavigationItem>,
|
||||
navigationItems: ImmutableList<NavigationItem>,
|
||||
navigationContentPosition: MainNavigationContentPosition
|
||||
) {
|
||||
NavigationRail(
|
||||
|
|
@ -315,7 +316,7 @@ fun NavigationRail(
|
|||
Box {
|
||||
Icon(
|
||||
imageVector = navigationItem.icon(index == currentPosition),
|
||||
contentDescription = navigationItem.title
|
||||
contentDescription = navigationItem.title(index == currentPosition)
|
||||
)
|
||||
if (navigationItem.badge) {
|
||||
Text(
|
||||
|
|
@ -360,7 +361,7 @@ fun BottomNavigation(
|
|||
currentPosition: Int,
|
||||
onChangePosition: (position: Int) -> Unit,
|
||||
onReselected: (position: Int) -> Unit,
|
||||
navigationItems: List<NavigationItem>,
|
||||
navigationItems: ImmutableList<NavigationItem>,
|
||||
themeColors: ExtendedColors = ExtendedTheme.colors
|
||||
) {
|
||||
Column(modifier = Modifier.navigationBarsPadding()) {
|
||||
|
|
@ -384,7 +385,7 @@ fun BottomNavigation(
|
|||
Box {
|
||||
Icon(
|
||||
imageVector = navigationItem.icon(index == currentPosition),
|
||||
contentDescription = navigationItem.title
|
||||
contentDescription = navigationItem.title(index == currentPosition)
|
||||
)
|
||||
if (navigationItem.badge) {
|
||||
Text(
|
||||
|
|
@ -414,8 +415,9 @@ fun BottomNavigation(
|
|||
}
|
||||
|
||||
data class NavigationItem(
|
||||
val id: String,
|
||||
val icon: @Composable (selected: Boolean) -> ImageVector,
|
||||
val title: String,
|
||||
val title: @Composable (selected: Boolean) -> String,
|
||||
val badge: Boolean = false,
|
||||
val badgeText: String? = null,
|
||||
val onClick: (() -> Unit)? = null,
|
||||
|
|
|
|||
Loading…
Reference in New Issue