gpt4 book ai didi

android - 在继承的类中使用 DI (Koin) 时,Jetpack Compose Preview 不起作用

转载 作者:行者123 更新时间:2023-12-05 05:40:13 26 4
gpt4 key购买 nike

我想在我的应用程序中使用 Jetpack Compose。我已经在使用 Koin 进行 DI。因为我的 BaseFragment 中有很多方便的方法,所以我想继承它并使用 compose 构建相应的 View 。

现在的问题是,当在 BaseFragment 中使用 DI 并从中继承时,不会显示可组合项的预览,并出现以下错误消息:

Error Message in console of preview

并抛出以下异常:

java.lang.IllegalStateException: KoinApplication has not been started
at org.koin.core.context.GlobalContext.get(GlobalContext.kt:36)
at org.koin.java.KoinJavaComponent.getKoin(KoinJavaComponent.kt:122)
at org.koin.java.KoinJavaComponent.get(KoinJavaComponent.kt:87)
at org.koin.java.KoinJavaComponent.get$default(KoinJavaComponent.kt:81)
at org.koin.java.KoinJavaComponent.get(KoinJavaComponent.kt)
...

我的 BaseFragment 看起来像这样

public abstract class BaseFragment {


private final ActiveViewIdInteractor activeViewIdInteractor =
new ActiveViewIdInteractor(KoinJavaComponent.get(ActiveViewIdService.class));
...

我继承的 fragment 看起来像这样

class ComposeDemoFragment: BaseFragment() {
...

@Composable
fun ComposeDemoFragmentContent() {
Text(text = "Hello World",
Modifier
.fillMaxWidth()
.background(Color.Cyan)
)
}

@Preview
@Composable
private fun Preview() {
ComposeDemoFragmentContent()
}

如果在不继承自 BaseFragment 的 Fragment 中使用完全相同的预览,则一切正常。我已经包含了“Koin for Compose”的依赖项,并且还尝试使用 CoKoin。此时我不知道如何处理错误消息,或者错误消息是否与实际问题几乎没有关系。

这是一个错误还是有办法绕过这个错误?

最佳答案

您的 @Preview 代码由 Android Studio 按原样运行,查看您的示例,您的 ComposeDemoFragmentContent() 中没有任何内容使用 Koin。不过,我猜这只是示例代码。

在我的应用中,我们将 koin 组件注入(inject)到我们的主要 PrimaryTheme{ } 中,它在与 @Preview 一起使用时会中断,我们遇到了与您看到的相同的错误.

解决此问题的一种方法是为要注入(inject)的字段提供默认值,然后将您的 koin 代码放入 LocalInspectionMode 的检查中,例如

val someField = remember { mutableStateOf("Default")}

if (!LocalInspectionMode.current) {
// We're _not_ executing in an Android Studio Preview.

// Use your injected Koin instance here e.g.
val myUseCase: CustomUseCase = get()
someField.value = myUseCase.getSomeValue()
}

Text(
text = someField.value
)

因此您的预览将使用默认值,但您的真实应用将使用 koin 注入(inject)值。

关于android - 在继承的类中使用 DI (Koin) 时,Jetpack Compose Preview 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72446056/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com