android 在jetpack compose的hilt依赖注入中将viewmodel注入到widget

ubof19bj  于 2023-11-15  发布在  Android
关注(0)|答案(1)|浏览(193)

我使用hilt依赖注入创建了一个jetpack compose应用程序。我使用glance创建了一个小部件,它工作得很成功。现在我想创建一个viewmodel,并使用相同的机制或不同的机制注入。我用不同的方法进行了测试。但我没有得到解决方案。
我使用jetpack compose导航来浏览视图,我只在主应用程序中使用了一个activity。
这里是我的代码相关的一瞥小部件。如果你想了解更多的细节留下评论。我分享了相关数据。

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创建了一个小部件,它工作得很成功。现在我想创建一个viewmodel,并使用相同的机制或不同的机制注入。我用不同的方法进行了测试。但我没有得到解决方案。
我使用jetpack compose导航来浏览视图,我只在主应用程序中使用了一个activity。
这里是我的代码相关的一瞥小部件。如果你想了解更多的细节留下评论。我分享了相关数据。

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(){
    //
}

ff29svar

ff29svar1#

取消注解@ PandidEntryPoint并添加以下内容:
你可以在函数体中声明视图模型:

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

字符串
别忘了加上:

@HiltAndroidApp
class MyApp : Application() {
}


并在manifest文件中添加:

android:name=".MyApp"


让我知道如果它帮助你!

相关问题