小编ali*_*ter的帖子

与 TestInstallIn 重复绑定以进行仪器测试

我正在使用 Hilt 注入一些依赖项,如下所示:

@Module
@InstallIn(SingletonComponent::class)
object SomethingModule {

    @Provides
    fun provideSomething(@ApplicationContext context: Context): Something {
        //return RealSomething
    }
}
Run Code Online (Sandbox Code Playgroud)

我想在我的测试中替换此绑定,并按照本指南将这个假模块添加到与我的仪器测试相同的文件夹中:

@Module
@TestInstallIn(
    components = [SingletonComponent::class],
    replaces = [SomethingModule::class]
)
object FakeSomethingModuleModule {

    @Provides
    fun provideSomethingModule(): Something {
        return FakeSomething()
    }
}
Run Code Online (Sandbox Code Playgroud)

当我尝试运行仪器测试时,构建失败并出现重复的绑定错误:

error: [Dagger/DuplicateBindings] com.example.Something is bound multiple times:
  public abstract static class SingletonC implements HiltWrapper_ActivityRetainedComponentManager_ActivityRetainedComponentBuilderEntryPoint,
Run Code Online (Sandbox Code Playgroud)

注释掉 Fake Module 可以解决该问题。有人看到我在这里缺少什么吗?

编辑:刚刚尝试并@UninstallModules遇到了相同的构建错误:

@UninstallModules(SomethingModule::class)
@HiltAndroidTest
@RunWith(AndroidJUnit4::class)
class MyInstrumentedTest {

    @Module
    @InstallIn(SingletonComponent::class)
    object FakeSomethingModule {

        @Provides
        fun provideSomthing(): Something …
Run Code Online (Sandbox Code Playgroud)

android dagger dagger-hilt

9
推荐指数
1
解决办法
1739
查看次数

如何为 BiometricPrompt 编写 Espresso 测试

我是 espresso 测试的新手,我想为 BiometricPrompt 编写 Espresso 测试,BiometricPrompt 是 Google 提供的用于验证指纹的 API。

android-espresso android-biometric-prompt android-biometric

7
推荐指数
0
解决办法
442
查看次数

聚焦 TextField 时触发 Flutter TextEditingController 侦听器

我有一个 TextField,它有一个控制器,它有一个更改监听器。像这样:

final TextEditingController _oneController = TextEditingController();
Run Code Online (Sandbox Code Playgroud)
  @override
  void initState() {
    super.initState();
    _oneController.addListener(_listener);
  }
Run Code Online (Sandbox Code Playgroud)
TextField(
  controller: _oneController,
),
Run Code Online (Sandbox Code Playgroud)

哪里_listener是一个函数,它将调度我的表单已被编辑的事件。

这工作正常,但只要您关注 TextField,它就会触发此侦听器运行,即使未对字段中的文本进行任何更改。

当 TextField 进入焦点时,有没有办法阻止我的听众被调用?当我的 TextField 中的文本没有更改时,我不希望我的侦听器被调用。

textfield flutter

6
推荐指数
1
解决办法
5235
查看次数

setDeviceCredentialAllowed 和 ERROR_USER_CANCELED

我正在实施生物识别技术,如果用户不想要/拥有生物识别技术,我希望能够回退到使用 PIN 码。

问题在于,当用户选择“使用 PIN”、输入他们的 PIN 并验证两个不同的回调时,会触发:

第一个:onAuthenticationSucceeded这是预期的。第二种:onAuthenticationErrorBiometricConstants.ERROR_USER_CANCELED

为什么输入 PIN 而不是生物识别会触发 ERROR_USER_CANCELED?我通过完成我的 Activity 处理了这个错误,这不是我想要的流程。我这样做是因为当用户点击对话框外时,我想关闭应用程序,并且在这种情况下会触发相同的错误(尽管有此修复)。

有没有办法区分有意取消对话(通过后退按钮或点击对话外)和输入 PIN 码?

这是我的PromptInfo

        val promptInfo = BiometricPrompt.PromptInfo.Builder()
                .setTitle(getString(R.string.lock_title))
                .setSubtitle(getString(R.string.lock_summary))
                .setConfirmationRequired(false)
                .setDeviceCredentialAllowed(true)
                .build()
Run Code Online (Sandbox Code Playgroud)

在装有 Android 10 的 Pixel 2 上进行测试。使用版本"androidx.biometric:biometric:1.0.1". 谢谢!

android android-biometric-prompt android-biometric

6
推荐指数
1
解决办法
1057
查看次数

在 Compose 中设置 Flow 中 TextField 的初始值

我有一个 TextField 组件,我想将其设置为初始内容。初始内容将使用 Flow 从数据库中获取。

我有这段TextField代码(大致遵循此 Codelabs 教程):

@Composable
private fun EntryText(placeholder: String, initialText: String = "", ) {
    val (text, setText) = remember { mutableStateOf(initialText) }
    EntryTextField(
        text = text,
        placeholder = placeholder,
        onTextChanged = setText
    )
}
Run Code Online (Sandbox Code Playgroud)

@Composable
private fun EntryTextField(text: String, placeholder: String, onTextChanged: (String) -> Unit) {
    TextField(
        modifier = Modifier.fillMaxWidth(),
        value = text,
        onValueChange = {
            onTextChanged(it)
        },
        placeholder = { Text(text = placeholder) }
    )
}
Run Code Online (Sandbox Code Playgroud)

我想像这样使用它来设置 aText …

android android-jetpack-compose

6
推荐指数
1
解决办法
3165
查看次数

如何在 MotionLayout 中以编程方式设置过渡持续时间?

我在这样的代码中手动设置了一个新的过渡:

intro_motion_layout.setTransition(R.id.middle, R.id.end)
Run Code Online (Sandbox Code Playgroud)

有没有办法我也可以这样设置持续时间?

ConstraintSets在 XML 中定义了多个,当第一次转换完成时,我使用onTransitionCompleted. Transition我的 XML 中有一个,它在那里正确使用了持续时间,但Transitions我在代码中设置的以下内容发生得非常快,我找不到改变它们的持续时间的方法。

android android-motionlayout

5
推荐指数
2
解决办法
4220
查看次数