👨🏼‍💻Flutter| Enhanced Enums: Dart 2.17'nin Güçlü Özelliği (Flutter 3.0'ın yeni özelliği)

Emre Ugur Yalcin
2 min readJul 13, 2022

--

Dart

Herkese Merhaba 👋 Bu yazımda Dart 2.17 ile Flutter’a gelen “Enhanced Enum” hakkında konuşacağım.

Giriş

Dart 2.17'den sonra Enumeration tipinde güzel bir değişiklik oldu. Basit olarak yapılan Enum’ların yanına “Enhanced Enum” eklendi. Tabi bu da yazacağımız kodun kısılmasını sağladı.

Şimdi gelin hep beraber örneklerle bu konuya derinlemesine bakalım:

Simple Enum:

Dart 2.17'den önce Enumları sadece şu şekilde kullanabiliyorduk :

enum ColorNames { red, green, blue }

Yukarıda Enumumuzu tanımladık. Ben gelen enum tipine göre renk tanımlamak istiyorum. Simple enum ile şu şekilde yapabilirim:

Öncelikle enum tipine göre gerekli olan rengi döndüren extension yazalım:

Tabi bir de gelen rengin “value” değerini almak istiyoruz. Bunu yukarıda yazdığımız extensiondan doğrudan alabiliriz:

int colorValue=ColorNames.blue.getColorFromName().value;

Fakat value değerini biz doğrudan enuma göre almak istiyoruz. Yukarıda yazılan extensionu yazmadığımızı düşünürsek aşağıdaki gibi bir extension yazmamız gerekecek :

Gördüğümüz gibi “simple enum” kullanmak biraz uğraştırıcı. Gelin hep beraber “enhanced enum”u incelemeye başlayalım.

Enhanced Enum:

Artık Dart, sınıf alanları, metotlar ve constructor tanımlamamıza da izin veriyor.

Enhanced Enum tanımlarken normal sınıfların syntaxının aynısını kullanıyoruz. Fakat birkaç ekstra gereksinimle birlikte:

  • Instance değişkenleri final olmak zorundadır, mixin tarafından eklenseler bile.
  • Üretilen tüm constructorlar const olmalıdır.
  • Factory constructorlar sadece enum örneklerinden birini döndürebilir.
  • Hiçbir sınıf enum olarak extend edilemez.
  • index, hashCode ve eşitlik operatörü “==” için override yapılamaz.
  • Enumda “values” adında bir şey tanımlanamaz. “values” tanımlanırsa enumda otomatik olarak oluşturulan static “values” getter ile conflict oluşturur.

Şimdi yukarıda simple enum ile ilgili yaptığımız örnekleri “enhanced enum” ile yapalım:

1.Enum Constructor: Enum içerisinde Color tipinde renk döndürmek istiyoruz. Bunun için enuma bir constructor ekleyip color adında bir değişken tanımlayalım:

Ekstra bir extension yazmamıza gerek kalmadı. Rengi de şu şekilde alıyoruz:

Color color=ColorNames.blue.color;

2.toString: Tabi bu enuma bir de toString metodu ekleyelim ve istedimiz gibi düzenleyelim:

Constructora yeni bir parametre ekleyelim: name

Kodumuzun son hali şu şekilde olacak:

Örnek verecek olursak:

String colorName=ColorNames.blue.toString();

Çıktı:

Color name is: Blue

3.Mixin Eklemek:

Color üç farklı değerden oluşur: red, green, blue. Bu değerleri mixin içerisinden almak istiyoruz. Bunu yapmak için öncelikle bir mixin tanımlayalım:

Oluşturduğumuz mixini enum içerisinde kullanalım ve rengin bileşenlerini enum içerisinde döndürelim:

Örnek verecek olursak:

int redCode=ColorNames.red.redCode();
int greenCode=ColorNames.red.greenCode();
int blueCode=ColorNames.red.blueCode();
print("Red code: $redCode");
print("Green code: $greenCode");
print("Blue code: $blueCode");

Çıktı:

Red code: 244
Green code: 67
Blue code: 54

4.Metot Eklemek:

Şimdi farklı bir şey yapalım ve enum içerisince hex kodu alalım:

Örnek:

String hexCode=ColorNames.blue.hexCode();
print("HexCode: $hexCode");

Çıktı:

HexCode: #2196f3

Sonuç:

Enhanced Enum kullanımı işimizi kolaylaştırmak için oldukça önemli. Vakit kaybetmeden bu enum türünü kullanmaya başlamamız gerekiyor :)

Herkese keyifli Flutter’li haftalar dilerim :)

Referanslar:

--

--