在jetpack compose中通过hilt依赖注入将viewmodel注入到widget

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

我使用 hilt 依赖注入创建了一个 jetpack compose 应用程序。我使用glance 创建了一个小部件,它运行成功。现在我想为其创建一个视图模型并使用相同的机制或不同的机制进行注入。我用不同的方式进行了测试。但我没有得到解决方案。

我使用 jetpack compose 导航来浏览视图,并且我仅对主应用程序使用了一项活动。

这是我与一览小部件相关的代码。如果您想了解更多详细信息,请发表评论。我分享了相关数据。

class CustomGlanceWidgetReceiver : GlanceAppWidgetReceiver() {
    override val glanceAppWidget: GlanceAppWidget = MyAppWidget()
}
//@AndroidEntryPoint
class MyAppWidget : GlanceAppWidget(){
    override suspend fun provideGlance(context: Context, id: GlanceId) {
        provideContent { 
            MyContent()
        }
    }

}
@Composable
private fun MyContent(
    //viewModel: BaseEntryWidgetViewModel = hiltViewModel()
) {
    Column(
        modifier = GlanceModifier.fillMaxSize(),
        verticalAlignment = Alignment.Top,
        horizontalAlignment = Alignment.CenterHorizontally
    ) {
        Row(horizontalAlignment = Alignment.CenterHorizontally) {
            TextField(value = "", onValueChange = {}, label = {
                Text(text = "Title")
            })
            TextField(value = "", onValueChange = {}, label = {
                Text(text = "Amount")
            })
            Button(
                text = "Save",
                onClick = { }
            )
            Button(
                text = "Work",
                onClick = {}
            )
        }
    }
}
@HiltViewModel
class BaseEntryWidgetViewModel @Inject constructor(
    private val wallletRepositoryService: WalletRepositoryService
):ViewModel(){
    //
}

我使用 hilt 依赖注入创建了一个 jetpack compose 应用程序。我使用glance 创建了一个小部件,它运行成功。现在我想为其创建一个视图模型并使用相同的机制或不同的机制进行注入。我用不同的方式进行了测试。但我没有得到解决方案。

我使用 jetpack compose 导航来浏览视图,并且我仅对主应用程序使用了一项活动。

这是我与一览小部件相关的代码。如果您想了解更多详细信息,请发表评论。我分享了相关数据。

class CustomGlanceWidgetReceiver : GlanceAppWidgetReceiver() {
    override val glanceAppWidget: GlanceAppWidget = MyAppWidget()
}
//@AndroidEntryPoint
class MyAppWidget : GlanceAppWidget(){
    override suspend fun provideGlance(context: Context, id: GlanceId) {
        provideContent { 
            MyContent()
        }
    }

}
@Composable
private fun MyContent(
    //viewModel: BaseEntryWidgetViewModel = hiltViewModel()
) {
    Column(
        modifier = GlanceModifier.fillMaxSize(),
        verticalAlignment = Alignment.Top,
        horizontalAlignment = Alignment.CenterHorizontally
    ) {
        Row(horizontalAlignment = Alignment.CenterHorizontally) {
            TextField(value = "", onValueChange = {}, label = {
                Text(text = "Title")
            })
            TextField(value = "", onValueChange = {}, label = {
                Text(text = "Amount")
            })
            Button(
                text = "Save",
                onClick = { }
            )
            Button(
                text = "Work",
                onClick = {}
            )
        }
    }
}
@HiltViewModel
class BaseEntryWidgetViewModel @Inject constructor(
    private val wallletRepositoryService: WalletRepositoryService
):ViewModel(){
    //
}
android kotlin android-jetpack-compose android-widget dagger-hilt
1个回答
0
投票

取消注释 @AndoridEntryPoint 并添加这些:

您可以在该函数的主体中声明该视图模型:

@Composable
private fun MyContent(){
    viewmodel: BaseEnrtyWidgetViewModel = hiltViewModel()
}

不要忘记添加:

@HiltAndroidApp
class MyApp : Application() {
}

并添加您的清单文件:

android:name=".MyApp"
© www.soinside.com 2019 - 2024. All rights reserved.