feat: theme manage and auth
This commit is contained in:
@@ -5,24 +5,35 @@ import androidx.compose.foundation.layout.Column
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.filled.AccountCircle
|
||||
import androidx.compose.material.icons.filled.Menu
|
||||
import androidx.compose.material3.DrawerValue
|
||||
import androidx.compose.material3.ElevatedButton
|
||||
import androidx.compose.material3.ExperimentalMaterial3Api
|
||||
import androidx.compose.material3.Icon
|
||||
import androidx.compose.material3.IconButton
|
||||
import androidx.compose.material3.MaterialTheme
|
||||
import androidx.compose.material3.ModalNavigationDrawer
|
||||
import androidx.compose.material3.Scaffold
|
||||
import androidx.compose.material3.Text
|
||||
import androidx.compose.material3.TextButton
|
||||
import androidx.compose.material3.TopAppBar
|
||||
import androidx.compose.material3.rememberDrawerState
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.collectAsState
|
||||
import androidx.compose.runtime.getValue
|
||||
import androidx.compose.runtime.remember
|
||||
import androidx.compose.runtime.rememberCoroutineScope
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.ui.text.style.TextAlign
|
||||
import androidx.navigation.NavHostController
|
||||
import com.approagency.pharmacy.data.local.AccountState
|
||||
import com.approagency.pharmacy.data.local.SessionManager
|
||||
import com.approagency.pharmacy.domain.repository.AuthRepository
|
||||
import com.approagency.pharmacy.presentation.account.AccountDrawer
|
||||
import com.approagency.pharmacy.presentation.account.AccountSheet
|
||||
import com.approagency.pharmacy.presentation.account.AccountSheetController
|
||||
import kotlinx.coroutines.launch
|
||||
import org.koin.compose.koinInject
|
||||
|
||||
@OptIn(ExperimentalMaterial3Api::class)
|
||||
@@ -33,21 +44,52 @@ fun MainContainer(
|
||||
) {
|
||||
val session: SessionManager = koinInject()
|
||||
val sheetController: AccountSheetController = koinInject()
|
||||
val authRepository: AuthRepository = koinInject()
|
||||
|
||||
val account by session.account.collectAsState()
|
||||
val sheetVisible by sheetController.visible.collectAsState()
|
||||
val themeMode by session.themeMode.collectAsState()
|
||||
|
||||
Scaffold(
|
||||
topBar = {
|
||||
AccountAppBar(
|
||||
val drawerState = rememberDrawerState(DrawerValue.Closed)
|
||||
val scope = rememberCoroutineScope()
|
||||
|
||||
val context = LocalContext.current
|
||||
val appVersion = remember {
|
||||
runCatching {
|
||||
context.packageManager.getPackageInfo(context.packageName, 0).versionName
|
||||
}.getOrNull().orEmpty()
|
||||
}
|
||||
|
||||
ModalNavigationDrawer(
|
||||
drawerState = drawerState,
|
||||
drawerContent = {
|
||||
AccountDrawer(
|
||||
account = account,
|
||||
onAccountClick = { sheetController.show() }
|
||||
appVersion = appVersion,
|
||||
themeMode = themeMode,
|
||||
onThemeModeChange = { session.setThemeMode(it) },
|
||||
onLogout = {
|
||||
scope.launch {
|
||||
authRepository.logout()
|
||||
drawerState.close()
|
||||
}
|
||||
}
|
||||
)
|
||||
},
|
||||
bottomBar = { BottomBar(navController) }
|
||||
) { padding ->
|
||||
Box(modifier = Modifier.padding(padding)) {
|
||||
content()
|
||||
}
|
||||
) {
|
||||
Scaffold(
|
||||
topBar = {
|
||||
AccountAppBar(
|
||||
account = account,
|
||||
onMenuClick = { scope.launch { drawerState.open() } },
|
||||
onAccountClick = { sheetController.show() }
|
||||
)
|
||||
},
|
||||
bottomBar = { BottomBar(navController) }
|
||||
) { padding ->
|
||||
Box(modifier = Modifier.padding(padding)) {
|
||||
content()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -60,9 +102,18 @@ fun MainContainer(
|
||||
@Composable
|
||||
private fun AccountAppBar(
|
||||
account: AccountState,
|
||||
onMenuClick: () -> Unit,
|
||||
onAccountClick: () -> Unit
|
||||
) {
|
||||
TopAppBar(
|
||||
navigationIcon = {
|
||||
IconButton(onClick = onMenuClick) {
|
||||
Icon(
|
||||
imageVector = Icons.Filled.Menu,
|
||||
contentDescription = "منو"
|
||||
)
|
||||
}
|
||||
},
|
||||
title = {
|
||||
if (account.isLoggedIn) {
|
||||
Column {
|
||||
@@ -84,15 +135,7 @@ private fun AccountAppBar(
|
||||
}
|
||||
},
|
||||
actions = {
|
||||
if (account.isLoggedIn) {
|
||||
IconButton(onClick = onAccountClick) {
|
||||
Icon(
|
||||
imageVector = Icons.Filled.AccountCircle,
|
||||
contentDescription = "حساب کاربری",
|
||||
tint = MaterialTheme.colorScheme.primary
|
||||
)
|
||||
}
|
||||
} else {
|
||||
if (!account.isLoggedIn) {
|
||||
TextButton(onClick = onAccountClick) {
|
||||
Text("ورود", textAlign = TextAlign.Center)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user