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: NavHostController = 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 (
71+ countryList.value,
72+ selectedCountry.value,
73+ isLoadingCountries
74+ ) { country ->
75+ navController.navigate(" details/${country.name} /${country.alpha3} " )
76+ }
77+ }
78+ composable(" details/{countryName}/{countryCode}" ,) { backStackEntry ->
79+
80+ val countryName = backStackEntry.arguments?.getString(" countryName" ) ? : " "
81+ val countryCode = backStackEntry.arguments?.getString(" countryCode" ) ? : " "
82+ val country = Country (countryCode, " " , countryName, " " )
83+
84+ val countryEmissionInfo by viewModel.countryEmissionInfo.collectAsState()
85+ val countryAssetEmissions by viewModel.countryAssetEmissions.collectAsState()
86+ val isLoadingCountryDetails by viewModel.isLoadingCountryDetails.collectAsState()
87+
88+ LaunchedEffect (country) {
89+ viewModel.fetchCountryDetails(country)
90+ }
91+
92+ CountryInfoDetailedView (
93+ country,
94+ viewModel.year,
95+ countryEmissionInfo,
96+ countryAssetEmissions,
97+ isLoadingCountryDetails
98+ )
99+ }
100+ }
101+ }
102+ }
103+ }
104+
105+ }
0 commit comments