修饰符应该用大写还是小写:首选约定是什么?

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

我们在项目讨论中遇到了一个障碍,即注入的参数修饰符是否应该只影响顶级组件或所有组件。您能提供任何意见吗?

@Composable
fun HomeScreen(
    modifier: Modifier = Modifier,
    homeViewModel: HomeViewModel = viewModel(),
    navigateToGoalReading: () -> Unit,
    navigateToDetailEvent: () -> Unit,
) {
    val titleTextState by homeViewModel.titleTextState.collectAsState()
    val contentTextState by homeViewModel.contentTextState.collectAsState()
    val goalBookRead by homeViewModel.goalBookRead.collectAsState()
    val readingGoalGraphDataList by homeViewModel.goalReadingGraphDataList.collectAsState()
    val bookKingOfTheMonthDataList by homeViewModel.bookKingOfTheMonthDataList.collectAsState()

    MindWayAndroidTheme { colors, _ ->
        Column(
            verticalArrangement = Arrangement.spacedBy(20.dp, Alignment.Top),
            horizontalAlignment = Alignment.CenterHorizontally,
            modifier = modifier
                .background(color = colors.WHITE)
                .fillMaxSize()
                .padding(horizontal = 24.dp)
        ) {
            HomeNoticeCard(
                titleText = titleTextState,
                content = contentTextState,
                onClick = navigateToDetailEvent,
                modifier = Modifier
                    .height(100.dp)
                    .fillMaxWidth(),
            )
            HomeGoalReadingChart(
                readNumberList = readingGoalGraphDataList,
                onClick = navigateToGoalReading,
                goalBookRead = goalBookRead,
                modifier = Modifier
                    .fillMaxWidth()
                    .height(211.dp),
            )
            HomeReadersOfTheMonthChart(
                bookKingOfTheMonthData = bookKingOfTheMonthDataList,
                modifier = Modifier
                    .height(239.dp)
                    .fillMaxWidth(),
            )
        }
    }
}

VS

@Composable
fun HomeScreen(
    modifier: Modifier = Modifier,
    homeViewModel: HomeViewModel = viewModel(),
    navigateToGoalReading: () -> Unit,
    navigateToDetailEvent: () -> Unit,
) {
    val titleTextState by homeViewModel.titleTextState.collectAsState()
    val contentTextState by homeViewModel.contentTextState.collectAsState()
    val goalBookRead by homeViewModel.goalBookRead.collectAsState()
    val readingGoalGraphDataList by homeViewModel.goalReadingGraphDataList.collectAsState()
    val bookKingOfTheMonthDataList by homeViewModel.bookKingOfTheMonthDataList.collectAsState()

    MindWayAndroidTheme { colors, _ ->
        Column(
            verticalArrangement = Arrangement.spacedBy(20.dp, Alignment.Top),
            horizontalAlignment = Alignment.CenterHorizontally,
            modifier = modifier
                .background(color = colors.WHITE)
                .fillMaxSize()
                .padding(horizontal = 24.dp)
        ) {
            HomeNoticeCard(
                titleText = titleTextState,
                content = contentTextState,
                onClick = navigateToDetailEvent,
                modifier = modifier
                    .height(100.dp)
                    .fillMaxWidth(),
            )
            HomeGoalReadingChart(
                readNumberList = readingGoalGraphDataList,
                onClick = navigateToGoalReading,
                goalBookRead = goalBookRead,
                modifier = modifier
                    .fillMaxWidth()
                    .height(211.dp),
            )
            HomeReadersOfTheMonthChart(
                bookKingOfTheMonthData = bookKingOfTheMonthDataList,
                modifier = modifier
                    .height(239.dp)
                    .fillMaxWidth(),
            )
        }
    }
}

我已经研究了“now in android”和 Chris Banes 的文章“Always Provide a Modifier parameter”,以及 Google Open Source 的“Jetpack Compose API 指南”,但我找不到令人信服的答案。我非常感谢明确的答案。谢谢你

android user-interface android-jetpack-compose
1个回答
0
投票

请查看有关

Modifier
的文档:

最佳实践是让所有可组合项接受修饰符参数,并将该修饰符传递给其第一个发出 UI 的子项

因此,根据惯例,您应该将传递到可组合项中的

Modifier

 应用于最顶层的嵌套可组合项,在您的情况下是 
Column

但是,在某些情况下,传入应用于某些嵌套子级的修饰符可能是完全合理的。然后,我建议以不同的方式命名参数(而不是“修饰符”),例如

@Composable MyComposable( modifier: Modifier, // Modifier applied to first nested Composable childModifier: Modifier // Modifier applied to some deeply nested Composable ) { // ... }
    
© www.soinside.com 2019 - 2024. All rights reserved.