Flutter uygulamalarınızda lokal veritabanı çözümleri arıyorsanız Shared Preferences, Sqflite gibi çözümlere denk gelmişsinizdir. Hive veritabanı ise bu çözümler arasında en hızlısı ve en uygunu. Bu yazıda Flutter Hive kullanımı ile ilgili bilgiler aktarmaya çalışacağım.

Daha önce Sqflite kullandığım to-do list uygulamasına bakmak istiyorsanız bu linki, Shared Preferences kullanımını merak ediyorsanız bu linki kullanabilirsiniz.

Hive Tanıtımı

Hive veritabanının sunduğu en büyük avantaj, büyük verileri yazma ve okuma hızının diğer veritabanlarına kıyasla çok düşük olması. 1000 okuma ve 1000 yazma iterasyonlarını neredeyse sıfır milisaniyeye yakın hızda yapabiliyor. Bu hızlarla beraber istediğiniz veriyi senkron biçimde okuyup kullanabiliyor veya başka işlemler yapabiliyorsunuz.

Hive’ın sunduğu bir diğer imkan ise kendi oluşturduğunuz farklı veri modellerini kaydedebiliyor ve bunları isterseniz liste biçiminde de kaydedebiliyorsunuz. Key-Value biçiminde bir Map olarak kaydettiğiniz bu verileri ister kullanacağınız ‘key’ ile, isterseniz de Hive’ın sunduğu otomatik indeks’ şekilde kaydedebilir ve kullanabilirsiniz.

Hive write iteration
Yazma konusunda Hive, rakiplerinin çok önünde!
The image is copyrighted to Hivedb.dev

Hive Kullanımı

Kurulum

Öncelikle Pub.dev’den Hive paketini projemize ekleyelim. Daha sonra da Hive Flutter paketini projemize ekleyelim. Proje içerisindeki pubspecs dosyamız şu şekilde olmalı:

dependencies:
   hive: ^1.4.4+1
   hive_flutter: ^0.3.1
 dev_dependencies:
   hive_generator: ^0.8.2
   build_runner: ^1.10.6

Daha sonra main.dart dosyamızda main fonksiyonunda runApp öncesinde Hive’ı proje içerisinde kullanacağımızı bildirmemiz gerekiyor.

await Hive.initFlutter(); // Flutter uygulamaları için
Hive.init() // Diğer uygulamalar için

Hive’ın uygulama içerisinde kullanacağımızı belirttikten sonra Hive’da kullanacağımız box’ları, yani veri tutacağımız alanları açmamız gerekiyor. Bu alanlar, kutular, veri havuzları tamamıyla sizin ihtiyacınıza uygun olacak. Örneğin kullanıcı verileri için UserBox, uygulama içerisinde kullanacağınız ürünleri göstermek için ProductBox gibi isimler kullanarak bu kutuları açabilirsiniz.

  await Hive.initFlutter(); // Flutter uygulamaları için

  await Hive.openBox('ProductBox');
  await Hive.openBox('TransactionBox');

Basit Kullanım

Key – Value şeklinde değerler eklemek için:
 var box = await Hive.openBox('userBox');

 box.put('isim', 'Zahid'); // String değer kayıt

 box.put ('yas', 23); // Integer değer kayıt 

 box.put('kilo', 99.2); // Double değer kayıt

 String isim = box.get('isim'); // String değeri almak
 
 int yas = box.get('yas'); // int değeri almak

 double kilo = box.get('kilo'); // double değeri almak
 
Key – Value şeklinde liste eklemek için:
 box.put('liste', list);

 List<ListType> list = box.get('liste').cast<ListType>();

Liste objeleri Hive içerisinde saklanırken List<dynamic> olarak saklanır. Bu yüzden bu listeye erişirken bir cast işlemi yapmanız gerekmektedir. Bu durum Map objeleri için de geçerlidir. Map objeleri Hive içerisinde Map<dynamic, dynamic> olarak saklanır ve verinin kullanılacağı zaman casting gerekir.

Yazma & Okuma & Silme işlemi için diğer örnekler:
 var box = Hive.box('myBox'); 

 // Yazma
 
 box.put('name', 'Paul'); 

 box.put('friends', ['Dave', 'Simon', 'Lisa']); 

 box.put(123, 'test'); 

 box.putAll({'key1': 'value1', 42: 'life'})

 // Silme

 box.delete('name');
 print(box.containsKey('name')); // false

 box.delete(123);
 print(box.containsKey(123)); // false

 // Okuma
 
 box.get('friends'); // list<dynamic> döndürür

 box.getAt(100); // 100'üncü indeksteki değeri döndürür

Gördüğünüz üzere verileri kayıt ederken key için yalnızca String değil, Integer değerler de kullanılabilir. Tam olarak bu nedenden ötürü Integer değerler kullanarak aynı tip değişkenleri sırayla kaydedip, bu değişkenleri istediğiniz zaman çekebilirsiniz. Bu yönden bir cache yöntemi olarak kullanılabilir. Bir sonraki yazımın da konusu da tam olarak bunun üzerine olacak ve Flutter Hive kullanımını detaylı olarak irdeleyeceğiz. 🙂

Düzenleme: Flutter Hive kütüphanesinde özel verileri eklemeyi ve TypeAdapter ile çalışmayı anlattığım bu yazıma göz atabilirsiniz.



Flutter ile HTTP istekleri nasıl atılır daha önce merak ettiniz mi? Bu yazıma göz atmayı unutmayın.

Tags: