Önceki yazılarımda bahsettiğim, Flutter uygulamalarda key-value biçiminde çoklu değer tutabilen Hive veritabanının kullanımı konusunda bir giriş yapmıştık fakat devamını getirememiştik. Hive veritabanıyla çalışırken primitif tipleri veritabanına sıralı biçimlerde veya key-value biçiminde ekleyebilirsiniz. Fakat eğer Hive kullanıyorsanız asıl amacınız TypeAdapter ile çalışmaktır. Peki nedir bu TypeAdapter?

Bir Hive sınıfı oluşturmak ve bu sınıfı Hive veritabanına yazmak istiyorsunuz diyelim. Elinizde varolan bir sınıfı TypeAdapter kullanarak Hive’ın anlayacağı bir şekle getirebilirsiniz. Eğer otomatik olarak yazdığınız sınıfın TypeAdapter extend ederek oluşturulmuş halini elde etmek istiyorsanız Hivedb.dev üzerindeki şu yazıya bakabilirsiniz. Eğer kendiniz elle yazmak istiyorsanız da bu gerçekten çok kolay!

Hive TypeAdapter ile sınıf oluşturmak

TypeAdapter ile bir sınıf yazarken daima başına anlaşılmasını kolaylaştırmak için ‘Hive’ etiketini ekliyorum ve Hive ile bağlantısı olan sınıflarım direkt olarak belli oluyor. Bu yüzden proje içerisinde ‘HiveUser’, ‘HiveAddress’, ‘HiveNotification’ gibi veritabanına kayıt olacak sınıflar yer almakta.

Her Hive sınıfının bir typeId’si olmak zorunda. Bu typeId 0’dan başlar ve 255’e kadar gider. 255 adet Hive sınıfı da yazmazsınız umarım. 🙂 TypeAdapter extend eden bu sınıflar, TypeAdapter ile asıl kendi sınıflarını miras alırlar. Örneğin Address isminde bir sınıfım var ve bu sınıf tipindeki verileri veritabanına kaydetmek istiyorum. O zaman yapmam gereken şey ‘HiveAddress’ gibi bir sınıf oluşturup ‘TypeAdapter<Address>’i extend etmek.

Yazdığımız Hive sınıfı içerisinde Address sınıfından getirilecek değerlerin ‘HiveField’ şeklinde kaydedilmesi gerek. Ve bunlar daima 0’dan artan bir şekilde olmalı ve bir kez Adapter’ınızı kaydettikten sonra asla ve asla değiştirilmemeliler. Üzerine ekleme yapılabilir fakat daha önce yazdığınız HiveField alanları runtimeType bakımından eşsiz olacaktır.

Flutter Hive kullanımı
Çok da zor değilmiş öyle değil mi?

Override edilmesi gereken metotların yazımı

Hive sınıfını yazarken 3 farklı metotu override etmeniz ve içini doldurmanız gerekmektedir. Bunlar get typeId, read ve write metotlarıdır. get typeId ile sınıfınızın typeId’sini return edebilirsiniz.

Read fonksiyonunda, verilerinizin box içerisinden okunurken kullanılan bir fonksiyondur. Byte halinde okuma yapıldıktan sonra ve bunu bir fields değişkenine attıktan sonra Address objenizi return edebilirsiniz.

Write fonksiyonunda verilerinizi Hive üzerine kayıt edilirken kullanılır. Sınıfınızdaki her veriyi kendi alanına, HiveField’ine yazarak verinizi kayıt edilmeye uygun hale getirebilirsiniz.

Hive TypeAdapter kullanımı
Biraz karmaşık olsa da inceledikten sonra size de mantıklı gelecek 🙂

En sonunda yazdığınız sınıfı main fonksiyonunda register etmeyi ve Box açmayı unutmayın! Bundan sonra yapacağınız tüm Address ile ilgili işlemleri Address sınıfını kullanarak yapabilirsiniz. Set etmek istiyorsunuz, Address sınıfını kullanın, Get etmek istiyorsunuz, Address sınıfını kullanın. Hive’a nasıl yazılacağı konusunu da HiveAddress sınıfı halletmekte. 🙂

  Hive.registerAdapter(HiveAddress());
  await Hive.openBox<Address>('AddressBox');


Flutter Hive kullanımı konusunu ele aldığımız ikinci yazının sonuna geldik. Eğer yazdığım blog yazısından faydalandıysanız ne mutlu bana. 🙂 Bu konu ile ilgili bir örneği muhtemelen Github hesabıma eklemeyi düşünüyorum. Şimdilik takipte kalın!


Okuyucuya Not

Merhaba okuyucu! Blogum son zamanlarda yüksek trafik almaya başladı ve bu durumdan memnunum fakat aynı zamanda siz ziyaretçileri tatmin edememekten endişeliyim. 🙂 Eğer yazılarım ile ilgili bir tavsiyeniz olursa mail adresimden bana ulaşabilir veya Twitter üzerinden direct message gönderebilirsiniz. Github’ta örnek olarak yaptığım projelere göz atmak isterseniz de bu linki kullanabilirsiniz. Umarım bu ziyaretinizle size bir şeyler katabilmişimdir.

Sağlıcakla kalın!

Tags: