1+ import androidx.compose.foundation.layout.padding
2+ import androidx.compose.material3.CenterAlignedTopAppBar
3+ import androidx.compose.material3.ExperimentalMaterial3Api
14import androidx.compose.material3.MaterialTheme
5+ import androidx.compose.material3.Scaffold
6+ import androidx.compose.material3.Text
27import androidx.compose.runtime.Composable
8+ import androidx.compose.runtime.LaunchedEffect
9+ import androidx.compose.runtime.collectAsState
10+ import androidx.compose.runtime.getValue
11+ import androidx.compose.ui.Modifier
12+ import androidx.navigation.NavHostController
13+ import androidx.navigation.compose.NavHost
14+ import androidx.navigation.compose.composable
15+ import androidx.navigation.compose.rememberNavController
316import cafe.adriel.voyager.navigator.Navigator
417import dev.johnoreilly.climatetrace.di.commonModule
18+ import dev.johnoreilly.climatetrace.remote.Country
519import dev.johnoreilly.climatetrace.ui.ClimateTraceScreen
20+ import dev.johnoreilly.climatetrace.ui.CountryInfoDetailedView
21+ import dev.johnoreilly.climatetrace.ui.CountryListView
22+ import dev.johnoreilly.climatetrace.viewmodel.ClimateTraceViewModel
623import org.jetbrains.compose.ui.tooling.preview.Preview
724import org.koin.compose.KoinApplication
25+ import org.koin.compose.koinInject
826
927
1028@Preview
1129@Composable
12- fun App () {
30+ fun AppVoyagerNav () {
1331 KoinApplication (application = {
1432 modules(commonModule())
1533 }) {
1634 MaterialTheme {
1735 Navigator (screen = ClimateTraceScreen ())
1836 }
1937 }
20- }
38+ }
39+
40+ @OptIn(ExperimentalMaterial3Api ::class )
41+ @Composable
42+ fun AppJetpackBav () {
43+ KoinApplication (application = {
44+ modules(commonModule())
45+ }) {
46+
47+ MaterialTheme {
48+ val navController = rememberNavController()
49+
50+ val viewModel = koinInject<ClimateTraceViewModel >()
51+ val countryList = viewModel.countryList.collectAsState()
52+ val selectedCountry = viewModel.selectedCountry.collectAsState()
53+ val isLoadingCountries by viewModel.isLoadingCountries.collectAsState()
54+
55+ Scaffold (
56+ topBar = {
57+ CenterAlignedTopAppBar (title = {
58+ Text (" ClimateTraceKMP" )
59+ })
60+ }
61+ ) { innerPadding ->
62+
63+ NavHost (
64+ navController = navController,
65+ startDestination = " countryList" ,
66+ modifier = Modifier .padding(innerPadding)
67+ ) {
68+
69+ composable(route = " countryList" ) {
70+ CountryListView (countryList.value, selectedCountry.value, isLoadingCountries) { country ->
71+ navController.navigate(" details/${country.name} /${country.alpha3} " )
72+ }
73+ }
74+ composable(" details/{countryName}/{countryCode}" ,) { backStackEntry ->
75+
76+ val countryName = backStackEntry.arguments?.getString(" countryName" ) ? : " "
77+ val countryCode = backStackEntry.arguments?.getString(" countryCode" ) ? : " "
78+ val country = Country (countryCode, " " , countryName, " " )
79+
80+ val countryEmissionInfo by viewModel.countryEmissionInfo.collectAsState()
81+ val countryAssetEmissions by viewModel.countryAssetEmissions.collectAsState()
82+ val isLoadingCountryDetails by viewModel.isLoadingCountryDetails.collectAsState()
83+
84+ LaunchedEffect (country) {
85+ viewModel.fetchCountryDetails(country)
86+ }
87+
88+ CountryInfoDetailedView (country, viewModel.year, countryEmissionInfo,
89+ countryAssetEmissions, isLoadingCountryDetails)
90+ }
91+ }
92+ }
93+ }
94+ }
95+
96+ }
0 commit comments