CodeBlanks Logo Icon CodeBlanks

CustomPainter

CustomPainter ile paint ve shouldRepaint öğrenirsin.

CustomPainter sınıfı

CustomPainter, çizimi yapan soyut sınıftır; iki metodu override etmen gerekir. paint metodu gerçek çizimi yapar, shouldRepaint ise yeniden çizilip çizilmeyeceğine karar verir. CustomPaint widget'ı bu sınıftan bir nesne bekler.

class CizgiPainter extends CustomPainter {
  @override
  void paint(Canvas canvas, Size size) {
    // çizim burada
  }

  @override
  bool shouldRepaint(covariant CustomPainter eski) => false;
}

shouldRepaint ne zaman true dönmeli

shouldRepaint true dönerse paint yeniden çağrılır. Sabit çizimde false dönmek performansı korur. Çizim bir state'e bağlıysa eski ile yeni durumu karşılaştırıp true dönebilirsin.

@override
bool shouldRepaint(covariant CustomPainter eski) =>
    this.renk != (eski as MyPainter).renk;

Uygulama Her zaman true dönen painter

MyPainter sınıfını tanımla; paint boş kalsın, shouldRepaint her zaman true dönsün. main içinde bir painter örneği alıp shouldRepaint sonucunu yazdır.

Başlangıç kodu

main.dart
import 'package:flutter/material.dart';

// MyPainter sınıfını tanımla

void main() {
  // shouldRepaint sonucunu yazdır
}

Örnek çözüm

main.dart
import 'package:flutter/material.dart';

class MyPainter extends CustomPainter {
  @override
  void paint(Canvas canvas, Size size) {}

  @override
  bool shouldRepaint(covariant CustomPainter oldDelegate) => true;
}

void main() {
  final painter = MyPainter();
  print(painter.shouldRepaint(painter));
}

Beklenen çıktı

true

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 paint metodunun imzasında hangi iki parametre vardır?

  • Color ve Offset
  • BuildContext ve Widget
  • Paint ve Path
  • Canvas ve Size Doğru cevap

Açıklama: paint metodunun imzası void paint(Canvas canvas, Size size) şeklindedir; canvas üzerine çizilir, size çizim alanını verir.

2 paint metodunu override et

Soru
class MyPainter extends CustomPainter {
  @override
  void ____(Canvas canvas, Size size) {}

  @override
  bool shouldRepaint(covariant CustomPainter oldDelegate) => false;
}
Cevap
class MyPainter extends CustomPainter {
  @override
  void paint(Canvas canvas, Size size) {}

  @override
  bool shouldRepaint(covariant CustomPainter oldDelegate) => false;
}

Açıklama: paint metodu CustomPainter'ın çizimi yaptığı yerdir; imzası void paint(Canvas canvas, Size size) olmalıdır.

3 CustomPainter parçaları

Kavram Anlamı
CustomPainter Soyut çizim sınıfı
paint Çizimi yapan metod
shouldRepaint Yeniden çizim kararı
Canvas Çizim yüzeyi

İleri seviye bölümündeki tüm dersler