pre-warm up the main screens when the application is launched
This commit is contained in:
+16
-1
@@ -1,22 +1,37 @@
|
||||
package dev.meloda.fast.friends.navigation
|
||||
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import androidx.navigation.NavGraphBuilder
|
||||
import androidx.navigation.compose.composable
|
||||
import dev.meloda.fast.friends.FriendsViewModel
|
||||
import dev.meloda.fast.friends.FriendsViewModelImpl
|
||||
import dev.meloda.fast.friends.OnlineFriendsViewModelImpl
|
||||
import dev.meloda.fast.friends.presentation.FriendsRoute
|
||||
import dev.meloda.fast.model.BaseError
|
||||
import kotlinx.serialization.Serializable
|
||||
import org.koin.androidx.viewmodel.ext.android.getViewModel
|
||||
|
||||
@Serializable
|
||||
object Friends
|
||||
|
||||
fun NavGraphBuilder.friendsScreen(
|
||||
activity: AppCompatActivity,
|
||||
onError: (BaseError) -> Unit,
|
||||
onPhotoClicked: (url: String) -> Unit,
|
||||
onMessageClicked: (userid: Long) -> Unit,
|
||||
onMessageClicked: (userId: Long) -> Unit,
|
||||
onScrolledToTop: () -> Unit
|
||||
) {
|
||||
val friendsViewModel: FriendsViewModel = with(activity) {
|
||||
getViewModel<FriendsViewModelImpl>()
|
||||
}
|
||||
val onlineFriendsViewModel: FriendsViewModel = with(activity) {
|
||||
getViewModel<OnlineFriendsViewModelImpl>()
|
||||
}
|
||||
|
||||
composable<Friends> {
|
||||
FriendsRoute(
|
||||
friendsViewModel = friendsViewModel,
|
||||
onlineFriendsViewModel = onlineFriendsViewModel,
|
||||
onError = onError,
|
||||
onPhotoClicked = onPhotoClicked,
|
||||
onMessageClicked = onMessageClicked,
|
||||
|
||||
+1
-6
@@ -46,6 +46,7 @@ import org.koin.androidx.compose.koinViewModel
|
||||
@OptIn(ExperimentalMaterial3Api::class)
|
||||
@Composable
|
||||
fun FriendsScreen(
|
||||
viewModel: FriendsViewModel,
|
||||
modifier: Modifier = Modifier,
|
||||
orderType: String,
|
||||
padding: PaddingValues,
|
||||
@@ -57,12 +58,6 @@ fun FriendsScreen(
|
||||
onScrolledToTop: () -> Unit = {}
|
||||
) {
|
||||
val context: Context = LocalContext.current
|
||||
val viewModel: FriendsViewModel =
|
||||
if (tabIndex == 0) {
|
||||
koinViewModel<FriendsViewModelImpl>(viewModelStoreOwner = context as AppCompatActivity)
|
||||
} else {
|
||||
koinViewModel<OnlineFriendsViewModelImpl>(viewModelStoreOwner = context as AppCompatActivity)
|
||||
}
|
||||
|
||||
LaunchedEffect(orderType) {
|
||||
viewModel.onOrderTypeChanged(orderType)
|
||||
|
||||
+4
@@ -40,6 +40,7 @@ import androidx.compose.ui.unit.dp
|
||||
import dev.chrisbanes.haze.hazeEffect
|
||||
import dev.chrisbanes.haze.materials.ExperimentalHazeMaterialsApi
|
||||
import dev.chrisbanes.haze.materials.HazeMaterials
|
||||
import dev.meloda.fast.friends.FriendsViewModel
|
||||
import dev.meloda.fast.model.BaseError
|
||||
import dev.meloda.fast.ui.R
|
||||
import dev.meloda.fast.ui.components.ActionInvokeDismiss
|
||||
@@ -55,6 +56,8 @@ import dev.meloda.fast.ui.R as UiR
|
||||
@OptIn(ExperimentalMaterial3Api::class, ExperimentalHazeMaterialsApi::class)
|
||||
@Composable
|
||||
fun FriendsRoute(
|
||||
friendsViewModel: FriendsViewModel,
|
||||
onlineFriendsViewModel: FriendsViewModel,
|
||||
onError: (BaseError) -> Unit,
|
||||
onPhotoClicked: (url: String) -> Unit,
|
||||
onMessageClicked: (userid: Long) -> Unit,
|
||||
@@ -231,6 +234,7 @@ fun FriendsRoute(
|
||||
modifier = Modifier.fillMaxSize(),
|
||||
) { index ->
|
||||
FriendsScreen(
|
||||
viewModel = if (index == 0) friendsViewModel else onlineFriendsViewModel,
|
||||
orderType = orderType,
|
||||
padding = padding,
|
||||
tabIndex = index,
|
||||
|
||||
Reference in New Issue
Block a user