175 lines
6.2 KiB
Kotlin
175 lines
6.2 KiB
Kotlin
package com.sw.inbound.ui
|
|
|
|
import androidx.compose.animation.core.tween
|
|
import androidx.compose.animation.fadeIn
|
|
import androidx.compose.animation.fadeOut
|
|
import androidx.compose.foundation.Image
|
|
import androidx.compose.foundation.layout.Box
|
|
import androidx.compose.foundation.layout.PaddingValues
|
|
import androidx.compose.foundation.layout.fillMaxSize
|
|
import androidx.compose.foundation.layout.padding
|
|
import androidx.compose.material3.Scaffold
|
|
import androidx.compose.runtime.Composable
|
|
import androidx.compose.runtime.getValue
|
|
import androidx.compose.runtime.mutableStateOf
|
|
import androidx.compose.runtime.remember
|
|
import androidx.compose.runtime.setValue
|
|
import androidx.compose.ui.Modifier
|
|
import androidx.compose.ui.graphics.Color
|
|
import androidx.compose.ui.layout.ContentScale
|
|
import androidx.compose.ui.res.painterResource
|
|
import androidx.navigation.NavHostController
|
|
import androidx.navigation.compose.NavHost
|
|
import androidx.navigation.compose.composable
|
|
import androidx.navigation.compose.currentBackStackEntryAsState
|
|
import androidx.navigation.compose.rememberNavController
|
|
import com.sw.inbound.GlobalKey
|
|
import com.sw.inbound.R
|
|
import com.sw.inbound.ui.page.HomeScreen
|
|
import com.sw.inbound.ui.page.PurchaseOrderScreen
|
|
import com.sw.inbound.ui.weight.GlobalLoading
|
|
import com.sw.inbound.utils.SPUtil
|
|
import com.sw.inbound.utils.ToastUtils
|
|
|
|
@Composable
|
|
fun AppScreen(
|
|
onBackRequest: () -> Unit
|
|
) {
|
|
val navController = rememberNavController()
|
|
val currentBackStackEntry by navController.currentBackStackEntryAsState()
|
|
var canBack by remember { mutableStateOf(false) }
|
|
|
|
// 拦截物理返回键
|
|
// BackHandler(
|
|
// onBack = {
|
|
// val currentRoute = currentBackStackEntry?.destination?.route
|
|
// Timber.d("BackHandler currentRouter = ${currentRoute}")
|
|
// if (currentRoute == Screen.Home.route && !canBack) {
|
|
// ToastUtils.showToast("再次点击退出")
|
|
// canBack = true
|
|
// } else if (currentRoute == Screen.Login.route) {
|
|
// onBackRequest()
|
|
// } else {
|
|
// navController.popBackStack()
|
|
// }
|
|
// }
|
|
// )
|
|
//
|
|
// BackHandler(canBack) {
|
|
// Timber.d("canBack = $canBack")
|
|
// if (canBack) {
|
|
// onBackRequest()
|
|
// }
|
|
// }
|
|
|
|
Scaffold(
|
|
modifier = Modifier
|
|
.fillMaxSize()
|
|
//.paint(painter = painterResource(R.mipmap.bg)),
|
|
,containerColor = Color.Transparent,
|
|
content = { padding ->
|
|
Box {
|
|
// Image(
|
|
// painter = painterResource(R.mipmap.bg),
|
|
// contentDescription = null,
|
|
// modifier = Modifier.fillMaxSize(),
|
|
// contentScale = ContentScale.Crop
|
|
// )
|
|
Image(
|
|
painter = painterResource(id = R.mipmap.bg),
|
|
contentDescription = "背景图片",
|
|
modifier = Modifier.fillMaxSize(),
|
|
contentScale = ContentScale.Crop
|
|
)
|
|
NavHost(padding, navController, onBackRequest)
|
|
}
|
|
}
|
|
)
|
|
ToastUtils.ToastComposable()
|
|
GlobalLoading() // 全局Loading
|
|
|
|
}
|
|
|
|
/**
|
|
* 导航
|
|
*/
|
|
@Composable
|
|
private fun NavHost(
|
|
padding: PaddingValues,
|
|
navController: NavHostController,
|
|
onBackRequest: () -> Unit = {}
|
|
) {
|
|
val spUtil = SPUtil.getInstance()
|
|
val token = spUtil.get(GlobalKey.KEY_TOKEN, "")!!
|
|
NavHost(
|
|
modifier = Modifier
|
|
.fillMaxSize()
|
|
.padding(padding),
|
|
navController = navController,
|
|
//startDestination = if (token.isEmpty()) Screen.Login.route else Screen.Home.route
|
|
startDestination = Screen.Home.route
|
|
) {
|
|
// composable(Screen.Test.route) {
|
|
// TestScreen(modifier = Modifier, navController)
|
|
// }
|
|
// 首页
|
|
composable(Screen.Home.route) {
|
|
HomeScreen(modifier = Modifier, navController, onBackRequest = onBackRequest)
|
|
}
|
|
// 登录
|
|
// composable(Screen.Login.route) {
|
|
// LoginScreen(modifier = Modifier, navController)
|
|
// }
|
|
// 采购单入库
|
|
composable(
|
|
Screen.PurchaseOrder.route,
|
|
enterTransition = { fadeIn(animationSpec = tween(0)) }, // 无进入动画
|
|
exitTransition = { fadeOut(animationSpec = tween(0)) } // 无退出动画
|
|
) {
|
|
PurchaseOrderScreen(modifier = Modifier.fillMaxSize(), navController)
|
|
}
|
|
// // 自采单
|
|
// composable(
|
|
// Screen.SelfProcurement.route,
|
|
// enterTransition = { fadeIn(animationSpec = tween(0)) }, // 无进入动画
|
|
// exitTransition = { fadeOut(animationSpec = tween(0)) } // 无退出动画
|
|
// ) {
|
|
// SelfProcurementScreen(modifier = Modifier, navController)
|
|
// }
|
|
// // 收货
|
|
// composable(
|
|
// Screen.ReceiptProduct.route,
|
|
// enterTransition = { fadeIn(animationSpec = tween(0)) }, // 无进入动画
|
|
// exitTransition = { fadeOut(animationSpec = tween(0)) }, // 无退出动画
|
|
// arguments = listOf(
|
|
// navArgument(name = "id", builder = { type = NavType.IntType }),
|
|
// navArgument(name = "supplierId", builder = { type = NavType.IntType })
|
|
// )
|
|
// ) { backStackEntry ->
|
|
// val id = backStackEntry.arguments?.getString("id") ?: ""
|
|
// val supplierId = backStackEntry.arguments?.getString("supplierId") ?: ""
|
|
// ReceiptProductScreen(modifier = Modifier, navController, id, supplierId)
|
|
// }
|
|
}
|
|
}
|
|
|
|
sealed class Screen(val route: String) {
|
|
data object Home : Screen("home")
|
|
// data object Login : Screen("login")
|
|
|
|
// 采购单入库
|
|
data object PurchaseOrder : Screen("purchase_order")
|
|
|
|
// 自采单入库
|
|
// data object SelfProcurement : Screen("self_procurement")
|
|
|
|
// 收货
|
|
// data object ReceiptProduct : Screen("receipt_product?id={id}&supplierId={supplierId}") {
|
|
// fun createRoute(id: Int, supplierId: Int) =
|
|
// "receipt_product?id=${id}&supplierId=${supplierId}"
|
|
// }
|
|
|
|
// 添加物品
|
|
// data object AddProduct : Screen("addProduct")
|
|
// data object Test : Screen("Test")
|
|
} |