Skip to content

Instantly share code, notes, and snippets.

@manofi21
Last active April 13, 2023 14:02
Show Gist options
  • Save manofi21/bbc219e53e268c25757129265ac8da28 to your computer and use it in GitHub Desktop.
Save manofi21/bbc219e53e268c25757129265ac8da28 to your computer and use it in GitHub Desktop.
Rendering Notes #Rendering

render Class widget.

  1. extends by RenderStack

=> attach, detach, describeApproximatePaintClip, paint, computeDryLayout, performLayout, computeMinIntrinsicWidth, computeMaxIntrinsicWidth, computeMinIntrinsicHeight, computeMaxIntrinsicHeight

  1. Override function: a. attach sebuah method yang digunakan untuk menambahkan atau melekatkan sebuah AbstractNode ke dalam widget tree yang ada. b. detach memutuskan semua hubungan yang dimilikinya dengan widget dan objek lain yang terkait di dalam pohon widget, dan melepaskan semua sumber daya yang terkait dengan widget tersebut. c. describeApproximatePaintClip ntuk mengembalikan objek Rect yang merepresentasikan batas klip untuk PaintingContext untuk mengoptimalkan kinerja aplikasi dengan mempercepat proses rendering antarmuka pengguna. d. paint digunakan untuk melakukan rendering tampilan (painting) dari objek RenderObject. Dengan munggunakan class Paint() sebagai "Kuas"-nya dan Path() sebagai "Tangan"-nya dan dieksekusi didalam class Canvas() (melaui PaintingContext). Lalu untuk untuk meneruskan proses rendering ke anak-anaknya dengan cara memanggil paintChild. ```dart import 'package:flutter/material.dart'; import 'package:flutter/rendering.dart';

     class CustomRenderObject extends RenderBox {
         @override
         void paint(PaintingContext context, Offset offset) {
             // Membuat objek Paint
             final paint = Paint()
             ..color = Colors.blue
             ..strokeWidth = 5.0
             ..style = PaintingStyle.stroke;
    
             // Membuat objek Path untuk menggambar garis diagonal
             final path = Path()
             ..moveTo(0, 0)
             ..lineTo(size.width, size.height);
    
             // Menggambar garis diagonal ke Canvas
             context.canvas.drawPath(path, paint);
    
             // Memanggil paintChild pada anak-anak RenderObject
             if (child != null) {
                 context.paintChild(child!, offset);
             }
         }
     }
     ```
    

    e. computeDryLayout digunakan untuk menghitung ukuran yang sesuai untuk RenderObject saat tidak ada konstrain yang diterapkan. Dalam implementasi sebenarnya, computeDryLayout seringkali mempertimbangkan faktor-faktor seperti ukuran minimum atau maksimum, serta preferensi ukuran dan properti lainnya untuk menghasilkan ukuran yang ideal untuk RenderObject saat konstrain tidak diterapkan. Namun, ketika konstrain berubah, RenderObject tetap harus memperbarui ukuran dan posisi elemen yang direpresentasikan dengan memanggil fungsi layout. f. performLayout ketika sebuah RenderObject menerima perubahan konstrain (seperti saat pertama kali masuk ke WidgetTree atau ukuran konstrant dari parent berubah), ia akan memanggil fungsi performLayout pada child-nya untuk menentukan posisi dan ukuran yang sesuai. Fungsi performLayout kemudian akan menghitung dan memperbarui/menyelesaikan ukuran dan posisi dari elemen yang direpresentasikan.

    g. computeMinIntrinsicWidth digunakan untuk menghitung lebar maksimum yang dibutuhkan oleh sebuah RenderObject agar dapat menampilkan semua child-nya dengan benar, tanpa terjadi overflow. Secara umum, fungsi ini akan menghitung lebar minimum yang dibutuhkan oleh semua child-nya, dan menambahkannya dengan padding, border, dan nilai lainnya yang relevan untuk menghasilkan lebar maksimum keseluruhan yang dibutuhkan oleh RenderObject. h. computeMaxIntrinsicWidth i. computeMinIntrinsicHeight j. computeMaxIntrinsicHeight

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment