Özel değiştiriciler oluşturun jetpack composez (Derin Dalış)

Özel değiştiriciler oluşturun jetpack composez (Derin Dalış)

Not: Değiştiricilerin temellerini öğrenmeye devam etmeden önce jetpack oluşturmadaki değiştiricilerin temellerini bilmeniz gerekebilir. burada , burada

değiştirici Jetpack Compose’da hem bir arabirim hem de eşlik eden bir nesnedir. Gibi çeşitli yöntemler tanımlar.

fun <R> foldIn(initial: R, operation: (R, Element) -> R): R
fun <R> foldOut(initial: R, operation: (Element, R) -> R): R

Burada Element içinde bulunan tek bir öğeyi temsil eder. Modifier Zincir. Bu işlevi anlamamıza gerek yok, ancak değiştiricilerin dahili olarak çalıştığı ortaya çıktı. Element türleri Element genişleten başka bir arayüzden başka bir şey değildir. Modifier arayüz, bu nedenle aynı zamanda yalnızca bir Değiştiricidir. Ancak bunun somut uygulamalarına ihtiyacımız var. Modifier.Element Özel değiştiricilerimizi oluşturmak için değiştirici zincirine beslemek için arayüz.

Kısacası bir değiştirici, değiştirici öğelerin sıralı, değişmez bir koleksiyonudur (örn. Modifier.Eelement).

Özel bir şey yaratmak için her zaman mevcut bileşenlere bakabiliriz ve açık kaynağın gerçek güzelliği olan çerçeve yazarlarının bunu nasıl yaptığını görebiliriz, ayrıca bize en iyi mühendislerin bu apileri nasıl tasarladığını öğrenme şansı verir.

hadi seçelim background() değiştirici ve bu değiştiricinin oluşturma çerçevesinde nasıl uygulandığını görün

/**
* Draws [shape] with a solid [color] behind the content.
* @param color color to paint background with
* @param shape desired shape of the background
*/
fun Modifier.background(
color: Color,
shape: Shape = RectangleShape
) = this.then(
Background(
color = color,
shape = shape,
inspectorInfo = debugInspectorInfo {
name = "background"
value = color
properties["color"] = color
properties["shape"] = shape
}
)
)

background() bir uzatma fonksiyonudur Modifier. bir Modifier örnek ve sonra onu çağırır then() ve sonucu döndürür (birleştirilmiş bir değiştirici) then() geçerli olanla birleştirilmesi gereken diğer değiştiriciden yalnızca bir parametre bekler; bu, değiştiricilerin kodda görünmeleri için uygulanmasının nedenidir.

Bu durumuda background() bir örneğini döndürür Background hangi uzanır InspectorValueInfo ve uygular DrawModifier arayüz InspectorValueInfo (esas olarak hata ayıklama amacıyla kullanılır, bu yüzden buna derinlemesine girmeyeceğiz) ve sürpriz değil DrawModifier arayüz uzanır Modifier.Element uygulayan sınıflar anlamına gelir DrawModifier olarak da hareket edebilir Modifier.Element yukarıda öğrendiğimiz değiştiriciler zincirlenir, bu durumda somut uygulama Background anlamamıza gerek yok Background sınıf özel değiştiricileri nasıl oluşturacağınızı öğrenmek için bu sınıfa dalmayacağım, isterseniz bu makalede yapabilirsiniz.

Özel değiştirici oluşturmak için doğrudan uygulayabiliriz Modifier.Element arayüzü veya mevcut bazı alt öğelerini bir DrawModifier yüzeyinde bazı çizimler yapan değiştiricilerde kullanılır. birleştirilebilirler bu değiştiricinin uygulandığı yer. eskibackground() , paint() , drawBehind{} vb. kaynak koduna bakarsanız, tüm uygulamaları kullanır. DrawModifier.

Aşağıdaki gibi özel değiştiriciler oluşturmak için uygulayabileceğimiz önceden tanımlanmış başka arayüzler de var: LayoutModifier Composables’ın boyut manipülasyonunu yapan değiştiriciler tarafından kullanılan eskiscale() , height() , width() , padding(), offset() vb tüm kullanım LayoutModifier kaputun altında.

Bir sonraki makalede ele alınan ve herhangi bir şekillendirilebilir için çerçevelerin nasıl oluşturulacağını öğretecek özel bir değiştirici

Bu makale zaten uzun bir kontrol uygulaması olduğundan, uygulama ayrı bir makalede ele alınmıştır.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak.