我应该如何将 Fused Location Provider Client 注入 MVVM 中的 ViewModel(使用 Compose 和 Dagger-Hilt)

问题描述 投票:0回答:0

问题的背景

我目前正在学习如何将 MVVM 模式与 Compose 和依赖注入与 Dagger-Hilt 结合使用。

我需要创建一个 FusedLocationProviderClient 以便我可以从我的视图模型更新我的 GoogleMap 可组合项的位置状态。

注意事项

我认为 FusedLocationProviderClient 应该从 Main Activity 创建,因为它是特定于 android 的操作(并且它需要活动上下文)。我也不想将我的活动上下文传递给我的视图模型,因为它们会导致内存泄漏。

同时,由于我使用的是 Dagger-Hilt,我不需要在 Activity 中创建我的 ViewModel,因为它们可以很容易地注入到我的可组合屏幕中:

@Composable
fun MainScreen(viewModel : MainViewModel = hiltViewModel()) {/*UI logic*/}

在我的

MainActivity
中,
setContent{}
中唯一的可组合项是具有
NavHost
NavGraphBuilder
的函数:

@AndroidEntryPoint
class MainActivity : ComponentActivity() {
    private lateinit var navController: NavHostController
    private lateinit var fusedLocationProviderClient: FusedLocationProviderClient
    private var latitude = 0.0
    private var longitude = 0.0

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        fusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(this)

        setContent {
            MyTheme {
                navController = rememberAnimatedNavController()
                Navigation(navController)
            }
        }
    }

问题

所以,在遵循 MVVM 原则的同时,如果不必在 MainActivity 中创建 ViewModel,我如何将

FusedLocationProviderClient
注入我的 ViewModel?

谢谢!

注意:我也在尝试避免使用 AndroidViewModel 获取上下文,因为单元测试会更加困难。

android kotlin mvvm dagger-hilt fusedlocationproviderapi
© www.soinside.com 2019 - 2024. All rights reserved.