您会听到很多人在谈论 MVVM 或 MVI 等设计模式时谈论存储库和数据源。我一直在为 Retrofit 和 API 调用等内容创建存储库,并为 Firebase 或其他库等内容创建数据源。但我不能 100% 确定我理解 Android 世界中数据源和存储库之间的区别。
有人可以启发我吗?
提前致谢。
我正在尝试使用浓缩咖啡和导航组件验证传递给我的新片段的数据。我从这里拿了一个例子来简化这个问题。
@Test
fun testNavigationToInGameScreen() {
// Create a TestNavHostController
val navController = TestNavHostController(
ApplicationProvider.getApplicationContext())
navController.setGraph(R.navigation.trivia)
// Create a graphical FragmentScenario for the TitleScreen
val titleScenario = launchFragmentInContainer<TitleScreen>()
// Set the NavController property on the fragment
titleScenario.onFragment { fragment ->
Navigation.setViewNavController(fragment.requireView(), navController)
}
// Verify that performing a click changes the NavController’s state
onView(ViewMatchers.withId(R.id.play_btn)).perform(ViewActions.click())
assertThat(navController.currentDestination?.id).isEqualTo(R.id.in_game)
// HERE IS WHERE I'M TRYING TO VALIDATE ARGUMENTS
val currentDestinationArgs = navController.currentDestination.arguments
val expectedArguments = bundleOf(ARG_A to true)
assertEquals(currentDestinationArgs, expectedArguments)
}
Run Code Online (Sandbox Code Playgroud)
我不知道如何转换currentDestinationArgs …
我无法弄清楚为什么要在 CenterAlignedTopAppBar 的顶部添加此填充,使用 Material2 效果很好并且大小为 56dp,material3 正在执行此操作。
这是一些显示我正在做什么的代码,我的可组合项包装在一个片段中。目前我正在使用一个列,我也尝试使用 Scaffold 得到相同的结果。
@OptIn(ExperimentalMaterial3Api::class)
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
return ComposeView(requireContext()).apply {
setContent {
val uiState = viewModel.uiState.collectAsState()
viewModel.setIntent(MapIntent.GetOneOrAll(id))
Column {
if (uiState.value.hasToolbar) {
CenterAlignedTopAppBar(
modifier = Modifier.fillMaxWidth().wrapContentHeight(),
title = {
Text(
text = uiState.value.toolbarTitle ?: "", maxLines = 1, overflow = TextOverflow.Ellipsis,
color = colorResource(id = R.color.white)
)
},
navigationIcon = {
IconButton(onClick = { /* doSomething() */ }) {
Icon(
imageVector = Icons.Filled.ArrowBack,
contentDescription = null, …
Run Code Online (Sandbox Code Playgroud) 在 jetpack compose 中,当将修改器传递到可组合项时,修改器是否应该仅应用于最外层视图,还是也应用于所有子视图?
这是一个简单的例子:
fun SomeComposable(modifier: Modifier = Modifier) {
Column(modifier = modifier) {
Text(modifier = modifier.extraModifiersIfNeeded(), text = "Text")
Text(modifier = modifier.extraModifiersIfNeeded(), text = "Text")
Text(modifier = modifier.extraModifiersIfNeeded(), text = "Text")
}
}
Run Code Online (Sandbox Code Playgroud)
我最初认为这是不正确的,因为传递到 SomeComposable 的任何修饰符也会更改所有子视图。
有没有任何文件可以非常清楚地说明这一点?我可以提供任何文档的链接吗?
谢谢你!