parameter tint: Color = Color.Black ) @Composable fun Icon( bitmap: ImageBitmap, tint: Color = Color.Black, // 1: modi fi er is not the fi rst optional parameter // 2: padding will be lost as soon as the user sets its own modi fi er modi fi er: Modi fi er = Modi fi er.padding(8.dp) ) @Composable fun CheckboxRow( checked: Boolean, onCheckedChange: (Boolean) -> Unit, // DON'T - modi fi er is intended to specify the external behavior of // the CheckboxRow itself, not its subparts. Make them slots instead rowModi fi er: Modi fi er = Modi fi er, checkboxModi fi er: Modi fi er = Modi fi er ) @Composable fun IconButton( buttonBitmap: ImageBitmap, modi fi er: Modi fi er = Modi fi er, tint: Color = Color.Black ) { Box(Modi fi er.padding(16.dp)) { Icon( buttonBitmap, // modi fi er should be applied to the outer-most layout // and be the fi rst one in the chain modi fi er = Modi fi er.aspectRatio(1f).then(modi fi er), tint = tint ) } }
parameter tint: Color = Color.Black ) @Composable fun Icon( bitmap: ImageBitmap, tint: Color = Color.Black, // 1: modi fi // 2: padding will be lost as soon as the user sets its own modi fi modi fi ) @Composable fun CheckboxRow( checked: Boolean, onCheckedChange: (Boolean) -> Unit, // DON'T - modi fi // the CheckboxRow itself, not its subparts. Make them slots instead rowModi fi checkboxModi fi ) @Composable fun IconButton( buttonBitmap: ImageBitmap, modi fi tint: Color = Color.Black ) { Box(Modi fi Icon( buttonBitmap, // modi fi // and be the fi modi fi tint = tint ) } }
Color = Color.Black ) @Composable fun Icon( bitmap: ImageBitmap, tint: Color = Color.Black, // 1: modi fi er is not the fi rst optional parameter // 2: padding will be lost as soon as the user sets its own modi fi er modi fi er: Modi fi er = Modi fi er.padding(8.dp) ) @Composable fun CheckboxRow( checked: Boolean, onCheckedChange: (Boolean) -> Unit, // DON'T - modi fi // the CheckboxRow itself, not its subparts. Make them slots instead rowModi fi checkboxModi fi ) @Composable fun IconButton( buttonBitmap: ImageBitmap, modi fi tint: Color = Color.Black ) { Box(Modi fi Icon( buttonBitmap, // modi fi // and be the fi modi fi tint = tint ) } }
Color = Color.Black ) @Composable fun Icon( bitmap: ImageBitmap, tint: Color = Color.Black, // 1: modi fi // 2: padding will be lost as soon as the user sets its own modi fi modi fi ) @Composable fun IconButton( buttonBitmap: ImageBitmap, modi fi tint: Color = Color.Black ) { Box(Modi fi Icon( buttonBitmap, // modi fi // and be the fi modi fi tint = tint ) } } @Composable fun CheckboxRow( checked: Boolean, onCheckedChange: (Boolean) -> Unit, // DON'T - modi fi er is intended to specify the external behavior of // the CheckboxRow itself, not its subparts. Make them slots instead rowModi fi er: Modi fi er = Modi fi er, checkboxModi fi er: Modi fi er = Modi fi er )
Color = Color.Black ) @Composable fun Icon( bitmap: ImageBitmap, tint: Color = Color.Black, // 1: modi fi // 2: padding will be lost as soon as the user sets its own modi fi modi fi ) @Composable fun CheckboxRow( checked: Boolean, onCheckedChange: (Boolean) -> Unit, // DON'T - modi fi // the CheckboxRow itself, not its subparts. Make them slots instead rowModi fi checkboxModi fi ) @Composable fun IconButton( buttonBitmap: ImageBitmap, modi fi er: Modi fi er = Modi fi er, tint: Color = Color.Black ) { Box(Modi fi er.padding(16.dp)) { Icon( buttonBitmap, // modi fi er should be applied to the outer-most layout // and be the fi rst one in the chain modi fi er = Modi fi er.aspectRatio(1f).then(modi fi er), tint = tint ) } }
parameter, single of its kind modi fi er: Modi fi er = Modi fi er, tint: Color = Color.Black ) { // good: applied before other modi fi ers to the outer layout Box(modi fi er.padding(16.dp)) { Icon(buttonBitmap, modi fi er = Modi fi er.aspectRatio(1f), tint = tint) } } @Composable fun ColoredCanvas( // ok: canvas has no intrinsic size, asking for size modi fi ers modi fi er: Modi fi er, color: Color = Color.White, ... ) { // good: applied before other modi fi ers to the outer layout Box(modi fi er.background(color)) { ... } }
parameter, single of its kind modi fi er: Modi fi er = Modi fi er, tint: Color = Color.Black ) { // good: applied before other modi fi ers to the outer layout Box(modi fi er.padding(16.dp)) { Icon(buttonBitmap, modi fi er = Modi fi er.aspectRatio(1f), tint = tint) } } @Composable fun ColoredCanvas( // ok: canvas has no intrinsic size, asking for size modi fi modi fi color: Color = Color.White, ... ) { // good: applied before other modi fi Box(modi fi ... } }
tint: Color = Color.Black ) { // good: applied before other modi fi Box(modi fi Icon(buttonBitmap, modi fi } } @Composable fun ColoredCanvas( // ok: canvas has no intrinsic size, asking for size modi fi ers modi fi er: Modi fi er, color: Color = Color.White, ... ) { // good: applied before other modi fi ers to the outer layout Box(modi fi er.background(color)) { ... } }
{ var checkedState by remember { mutableStateOf(initialValue) } // ... // Usage: (Checkbox owns the checked state, caller noti fi ed of changes) // Caller cannot easily implement a validation policy. Checkbox(false, onToggled = { callerCheckedState = it })