หน้านี้อธิบายแนวทางปฏิบัติแนะนำในการทำงานกับสไตล์เพื่อให้มีความสอดคล้องกัน ในโค้ดเบส รวมถึงหลักการที่เราใช้ขณะ ออกแบบ API
สิ่งที่ควรทำ
ทำตามแนวทางปฏิบัติแนะนำต่อไปนี้
สิ่งที่ควรทำ: ใช้สไตล์สำหรับภาพและตัวแก้ไขสำหรับลักษณะการทำงาน
ใช้ Styles API สำหรับการกำหนดค่าภาพ (พื้นหลัง ระยะห่างจากขอบ เส้นขอบ) และ ตัวแก้ไขที่สงวนไว้สำหรับลักษณะการทำงาน เช่น ตรรกะการคลิก การตรวจหาท่าทางสัมผัส หรือ การช่วยเหลือพิเศษ
สิ่งที่ควรทำ: แสดงพารามิเตอร์สไตล์ในระบบการออกแบบ
สำหรับคอมโพเนนต์ระบบการออกแบบที่กำหนดเอง คุณควรแสดงออบเจ็กต์ Style
หลังจากพารามิเตอร์ตัวแก้ไข
@Composable fun GradientButton( modifier: Modifier = Modifier, // ✅ DO: for design system components, expose a style modifier to consumers to be able to customize the components style: Style = Style ) { // Consume the style }
สิ่งที่ควรทำ: แทนที่พารามิเตอร์ที่อิงตามภาพด้วยสไตล์
ลองแทนที่พารามิเตอร์ใน Composable ด้วยพารามิเตอร์ Style เดียว
เช่น
// Before @Composable fun OldButton(background: Color, fontColor: Color) { } // After // ✅ DO: Replace visual-based parameters with a style that includes same properties @Composable fun NewButton(style: Style = Style) { }
สิ่งที่ควรทำ: จัดลำดับความสำคัญของสไตล์สำหรับภาพเคลื่อนไหว
ใช้animateบล็อกในตัวสำหรับการจัดรูปแบบตามสถานะที่มีภาพเคลื่อนไหวเพื่อ
เพิ่มประสิทธิภาพเหนือตัวแก้ไข
สิ่งที่ควรทำ: ใช้ประโยชน์จาก "การเขียนครั้งสุดท้ายชนะ"
ใช้ประโยชน์จากข้อเท็จจริงที่ว่าพร็อพเพอร์ตี้ style จะเขียนทับแทนที่จะซ้อนกัน
ใช้เพื่อลบล้างเส้นขอบหรือพื้นหลังของคอมโพเนนต์เริ่มต้นโดยไม่
ต้องใช้พารามิเตอร์หลายรายการ
สิ่งที่ไม่ควรทำ
เราไม่แนะนำให้ใช้รูปแบบต่อไปนี้
อย่า: ใช้สไตล์สำหรับตรรกะการโต้ตอบ
อย่าพยายามจัดการonClickหรือการตรวจจับท่าทางสัมผัสภายในสไตล์ สไตล์
จำกัดอยู่แค่การกำหนดค่าภาพตามสถานะ จึงไม่ควรจัดการ
ตรรกะทางธุรกิจ แต่ควรมีภาพที่แตกต่างกันตามสถานะเท่านั้น
ไม่ควร: ระบุรูปแบบเริ่มต้นเป็นพารามิเตอร์เริ่มต้น
ควรประกาศพารามิเตอร์รูปแบบโดยใช้ style: Style = Style เสมอ
@Composable fun BadButton( modifier: Modifier = Modifier, // ❌ DON'T set a default style here as a parameter style: Style = Style { background(Color.Red) } ) { }
หากต้องการรวมพารามิเตอร์ "default" ให้ผสานรูปแบบพารามิเตอร์ขาเข้ากับค่าเริ่มต้นที่กำหนดไว้
@Composable fun GoodButton( modifier: Modifier = Modifier, // ✅ Do: always pass it as a Style, do not pass other defaults style: Style = Style ) { // ... val defaultStyle = Style { background(Color.Red) } // ✅ Do Combine defaults inside with incoming parameter Box(modifier = modifier.styleable(styleState, defaultStyle, style)) { // your logic } }
อย่า: ระบุพารามิเตอร์รูปแบบให้กับ Composable ที่อิงตามเลย์เอาต์
แม้ว่าคุณจะระบุรูปแบบให้กับ Composable ใดก็ได้ แต่ไม่คาดหวังว่า Composable ที่อิงตามเลย์เอาต์หรือ Composable ระดับหน้าจอจะยอมรับรูปแบบ เนื่องจากในมุมมองของผู้บริโภคยังไม่ชัดเจนว่ารูปแบบจะทําอะไรในระดับนี้ สไตล์ออกแบบมาสำหรับคอมโพเนนต์ ไม่ใช่เลย์เอาต์