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}" -> 
79+ 
80+                         val  countryName =  backStackEntry.arguments?.getString(" countryName" ? :  " " 
81+                         val  countryCode =  backStackEntry.arguments?.getString(" countryCode" ? :  " " 
82+                         val  country =  Country (countryCode, " " " " 
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