Flutter’da hive kullanımı, crud işlemleri

Kadir Bekar
Flutter Türkiye
Published in
5 min readMay 9, 2020

Merhaba arkadaşlar. Bu başlık altında Hive nedir, Hive veritabanı üzerinde Provider ile CRUD işlemleri nasıl yapılır gibi konuları ele alıyor olacağım.

Hive, telefonumuzun kendi hafızasında tutmak istediğimiz verileri key,value değerleri ile kayıt etmemize, verilerimiz üzerinde işlem yapmamıza imkan sağlayan NoSQL veritabanıdır.

İlişkisel veritabanlarında verilerimizi tablolar altında, başka tablolar ile ilişki kurarak(gerekiyorsa) yönetiriz. Hive üzerinde işlem yaparken verilerimizi kutu şeklinde ifade ettiğimiz nesneler ile saklarız.

Kutu örneğinin canlanması için “sehirler” (key), “plakalar” (value) şeklinde temsil ediliyor.

Çalışma mantığı SharedPreferences gibi diyebiliriz. Çalışmak istediğimiz veriler arttıkça Hive alternatiflerine göre çok daha performanslıdır. Yapılan hız testi ve hive hakkında detaylı bilgiye ulaşmak için bu linke tıklayabilirsiniz. Tabi burada önemli olan hangi yapı uygulamamız için daha uygundur. İlişkisel veya NoSQL veritabanını yönetmek istediğimiz verilere göre tercih ederiz.

Klasör yapısı ve uygulamada kullanacağımız paketleri göstermek amacıyla bir resim ekleyerek uygulamaya başlayalım. Uygulamanın bitmiş halini sayfa sonunda Github linki olarak paylaşacağım.

Paketleri ekledikten sonra terminal kısmına flutter pub get diyoruz.

Projeyi Visual Studio Code üzerinde View -> Command Palette -> Flutter New Project diyerek oluşturabilir veya cmd ekranını açıp, oluşturmak istediğiniz dizine giderek “flutter create flutter_hive_with_provider” diyerek oluşturalım.

Uygulama çalışmaya başlamadan uygulama içinde kullanacağımız değerlere ulaşabilmek için ikinci satırdaki kodu tanımlamamız gerekiyor. İkinci iş olarak veritabanının kayıt edileceği yolu alıp Hive içerisine değer atamasını yapıyoruz. Son olarak ise verilerimizin kayıt edileceği key değerini verip uygulama daha başlamadan kutumuzu hazır hale getiriyoruz.

main.dart

Kısaca anlatmak gerekirse uygulamanın senaryosu şu şekilde olacak. Günlük olarak güzel sözlerin paylaşıldığı bir uygulamamız var. Beğendiğimiz sözleri hive üzerine kayıt ediyoruz bu sayede internet olmadığı zamanlarda telefona kayıt ettiğimiz sözleri okuyabilir, düzenleyebilir veya silebiliriz.

Öncelikle verileri çekmek için lib altında core -> services -> api.dart isimli klasör ve dosyalarımızı oluşturalım ve metodumuzu yazalım.

lib -> ui -> views altında home_page.dart diyerek klasörlerimizi ve dart dosyasımızı oluşturalım. Yazdığımız metodu sayfada çağıralım ve FutureBuilder widgetinin future özelliğine metodumuzu yazalım.

Metodumuzu initState içerisinde çağırmamın sebebi, Widget build metodu her tetiklendiğinde api isteğinin tekrar tekrar atılmamasını sağlıyoruz. InitState fonksiyonu sayfa ilk yüklendiğinde bir kere tetiklendiği için bunun gibi atamaları initState içerisinde yapmak daha doğru olacaktır. Gerekli kontrolleri yaparak verilerimizi listeliyoruz.

home_page.dart

Verilerimiz listelendi. Şimdi ise Provider işlemleri için core altında viewmodels -> comment_vm.dart klasör ve dosyamızı oluşturalım. Bu sayede yapılan işlemleri tek bir merkezden yöneterek daha düzenli bir çalışma gerçekleştirmiş oluruz.

Uygulama içerisinde herhangi bir dosyada CommentViewModel sınıfının bir örneği oluşturulunca haberleşmeyi sağlamak için main.dart dosyasında MaterialApp widgetimizi MultiProvider ile sarmalıyoruz bu sayede widget yapısının en üstünde bu sınıfın bir örneği bulunmuş olacak ve uygulama içerisinde herhangi bir dosyadan direkt olarak erişim sağlayabileceğiz.

Verilerimiz üzerinde bir değişiklik olduğunda anlık olarak dinlemek ve ekranda gösterebilmek adına sınıfımızı ChangeNotifier sınıfı ile extend ediyoruz. Yapılan işlem sonrasında extend edilen sınıfın özelliklerini kendi tanımladığımız sınıfta kullanabiliriz örneğin notifyListeners() metodu anlık olarak değişikliği görmemizi sağlar.

ChatViewModel sınıfının Provider ile örneğini oluşturarak bu sınıf içerisinde yazılan metodlarımıza erişim sağlıyoruz.

Listelediğimiz sözleri veritabanına ekleyebilmek için artı ikonuna tıklıyoruz. Liste üzerinde tıkladığımız güzel sözü index değerinden yakalıyoruz ve parametre olarak Comments nesnesi şeklinde metod ile gönderiyoruz.

Her güzel sözün benzersiz olarak(bizim T.C kimlik numaramız gibi) bir id değeri vardır. Bu id değerini key alanına, value alanına ise diğer değerleri encode ederek string şeklinde kayıt ediyoruz.

save comment method

Ekleme işlemi tamamdır, şimdi eklediğimiz güzel sözleri diğer bir sayfada listeleme ve silme kodlarını yazalım. views -> saved_comment.dart dosyasını oluşturuyoruz ve öncelikle veritabanına kayıt ettiğimiz verilerin listelenmesini yapıyoruz.

“comments” key’i altına kayıt ettiğimiz verilere erişebilmek, üzerinde işlem yapabilmek için sayfa yüklenirken kutumuzun bir nesnesini oluşturuyoruz. Oluşturulan kutu nesnesini parametre olarak ValueListenableBuilder widgetin’e vererek değişen verilerin anlık olarak ekrana yansımasını sağlıyoruz.

ChatViewModel sınıfının Provider ile örneğini oluşturarak bu sınıf içerisinde yazılan metodlarımıza erişim sağlıyoruz. Verilerin key,value değerleri ile kayıt edildiğinden bahsetmiştik.Silme ikonuna tıkladığımızda ChatViewModel için oluşturulan sayfada removeComment metoduna tıklanılan Comments nesnesini parametre olarak gönderiyoruz, silme işlemi yaparken ise gönderilen nesnenin key değerine ulaşarak verinin silinmesini sağlıyoruz.

Silme işlemi de tamamdır. Son olarak kayıt ettiğimiz herhangi bir güzel sözün güncellenmesini yapalım. views -> edit_comment.dart dosyasını oluşturalım.

Güncellemek istediğimiz güzel sözün üzerine tıkladığımızda, tıklanılan elemanı diğer sayfanın Constructor metoduna parametre olarak gönderiyoruz bu sayede gönderilen elemanın bütün değerlerine erişiyoruz.

Tekrardan ChatViewModel sınıfının Provider ile örneğini oluşturarak bu sınıf içerisinde yazılan metodlarımıza erişim sağlıyoruz.Gerekli güncellemeleri yaptıktan sonra seçilen elemanı Comments nesnesi olarak editComment metoduna parametre olarak veriyoruz. İşlem yapılan elemanın benzersiz id’sine erişerek seçilen elemanın güncellenmesini sağlıyoruz.

Evet arkadaşlar, hive ile crud işlemlerini yapmış olduk. Açıkçası bende ilk defa sizinle beraber kullanmış oldum. Bence kullanımı çok kolay ve güzel, tavsiye ederim. Umarım faydalı bir içerik olmuştur. Hatalı olduğunu düşündüğünüz veya eklemek istediğiniz herhangi bir şey varsa memnuniyet ile dinlemek isterim.

Github proje linki:

State Management hakkında Türkçe kaynak için Flutter İzmir’in yayınını bu linke tıklayarak izleyebilirsiniz. Kaliteli bir içerik olmuş.

Flutter Türkiye tarafından yayınlanan içerikleri takip etmek için ise bu sayfaya göz atabilirsiniz.

--

--