diff --git a/app/build.gradle.kts b/app/build.gradle.kts index e008010b..7d588459 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -2,6 +2,8 @@ plugins { alias(libs.plugins.android.application) alias(libs.plugins.kotlin.android) alias(libs.plugins.kotlin.compose) + id("com.google.dagger.hilt.android") // Hilt 플러그인 추가 + kotlin("kapt") // Hilt를 위한 kapt 추가 } android { @@ -62,4 +64,18 @@ dependencies { // Dots Indicator implementation("com.tbuonomo:dotsindicator:5.1.0") + + // Hilt + implementation(libs.hilt.android) + kapt(libs.hilt.compiler) + implementation(libs.androidx.hilt.navigation.compose) + + // Retrofit + implementation(libs.retrofit) + implementation(libs.converter.gson) +} + +// Hilt를 사용할 때 필요한 Annotation Processor +kapt { + correctErrorTypes = true } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index ecf4e2b8..216b6e37 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -3,6 +3,7 @@ xmlns:tools="http://schemas.android.com/tools"> = flow { + try { + val response = dummyService.getDummyData() + emit(response.toDummyData()) + } catch (e: Exception) { + Log.e("DummyRepository", "getDummyData: $e") + } + }.flowOn(Dispatchers.IO) +} \ No newline at end of file diff --git a/app/src/main/java/com/kuit/ourmenu/ui/dummy/service/DummyService.kt b/app/src/main/java/com/kuit/ourmenu/ui/dummy/service/DummyService.kt new file mode 100644 index 00000000..32bb80be --- /dev/null +++ b/app/src/main/java/com/kuit/ourmenu/ui/dummy/service/DummyService.kt @@ -0,0 +1,8 @@ +package com.kuit.ourmenu.ui.dummy.service + +import com.kuit.ourmenu.ui.dummy.data.DummyResponse + +interface DummyService { +// @GET("") + suspend fun getDummyData(): DummyResponse +} \ No newline at end of file diff --git a/app/src/main/java/com/kuit/ourmenu/ui/dummy/viewmodel/DummyViewModel.kt b/app/src/main/java/com/kuit/ourmenu/ui/dummy/viewmodel/DummyViewModel.kt new file mode 100644 index 00000000..8f4f0cba --- /dev/null +++ b/app/src/main/java/com/kuit/ourmenu/ui/dummy/viewmodel/DummyViewModel.kt @@ -0,0 +1,37 @@ +package com.kuit.ourmenu.ui.dummy.viewmodel + +import androidx.lifecycle.ViewModel +import androidx.lifecycle.viewModelScope +import com.kuit.ourmenu.ui.dummy.data.DummyData +import com.kuit.ourmenu.ui.dummy.repository.DummyRepository +import dagger.hilt.android.lifecycle.HiltViewModel +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.flow.asStateFlow +import kotlinx.coroutines.flow.catch +import kotlinx.coroutines.launch +import javax.inject.Inject + +@HiltViewModel +class DummyViewModel @Inject constructor( + private val dummyRepository: DummyRepository +) : ViewModel() { + + private val _dummyData: MutableStateFlow = MutableStateFlow(DummyData()) + val dummyData: StateFlow = _dummyData.asStateFlow() // asStateFlow() 왜 달아야하는진 모름 + + init { + fetchDummyData() + } + + private fun fetchDummyData() { + viewModelScope.launch { + dummyRepository.getDummyData() + .catch { e -> println("Error: $e") } + .collect { dummyData -> + _dummyData.value = dummyData + } + } + } + +} \ No newline at end of file diff --git a/build.gradle.kts b/build.gradle.kts index 952b9306..493c6f6f 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -3,4 +3,5 @@ plugins { alias(libs.plugins.android.application) apply false alias(libs.plugins.kotlin.android) apply false alias(libs.plugins.kotlin.compose) apply false -} \ No newline at end of file + alias(libs.plugins.dagger.hilt) apply false +} diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 03f066c3..46e2a512 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,5 +1,8 @@ [versions] agp = "8.7.3" +converterGson = "2.11.0" +hiltAndroid = "2.52" +hiltNavigationCompose = "1.2.0" kotlin = "2.0.0" coreKtx = "1.10.1" junit = "4.13.2" @@ -11,10 +14,15 @@ composeBom = "2024.04.01" lifecycleViewmodel = "2.9.0-alpha08" lifecycleViewmodelCompose = "2.9.0-alpha08" lifecycleRuntimeComposeAndroid = "2.8.7" +retrofit = "2.11.0" navigationCompose = "2.8.6" [libraries] androidx-core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "coreKtx" } +androidx-hilt-navigation-compose = { module = "androidx.hilt:hilt-navigation-compose", version.ref = "hiltNavigationCompose" } +converter-gson = { module = "com.squareup.retrofit2:converter-gson", version.ref = "converterGson" } +hilt-android = { module = "com.google.dagger:hilt-android", version.ref = "hiltAndroid" } +hilt-compiler = { module = "com.google.dagger:hilt-compiler", version.ref = "hiltAndroid" } junit = { group = "junit", name = "junit", version.ref = "junit" } androidx-junit = { group = "androidx.test.ext", name = "junit", version.ref = "junitVersion" } androidx-espresso-core = { group = "androidx.test.espresso", name = "espresso-core", version.ref = "espressoCore" } @@ -31,10 +39,11 @@ androidx-material3 = { group = "androidx.compose.material3", name = "material3" androidx-lifecycle-viewmodel = { group = "androidx.lifecycle", name = "lifecycle-viewmodel", version.ref = "lifecycleViewmodel" } androidx-lifecycle-viewmodel-compose = { group = "androidx.lifecycle", name = "lifecycle-viewmodel-compose", version.ref = "lifecycleViewmodelCompose" } androidx-lifecycle-runtime-compose-android = { group = "androidx.lifecycle", name = "lifecycle-runtime-compose-android", version.ref = "lifecycleRuntimeComposeAndroid" } +retrofit = { module = "com.squareup.retrofit2:retrofit", version.ref = "retrofit" } androidx-navigation-compose = { group = "androidx.navigation", name = "navigation-compose", version.ref = "navigationCompose" } [plugins] android-application = { id = "com.android.application", version.ref = "agp" } kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" } kotlin-compose = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" } - +dagger-hilt = { id = "com.google.dagger.hilt.android", version.ref = "hiltAndroid" }