Flutter: Firestore CRUD

CRUD with Firebase Firestore in Flutter

Yudi Setiawan
Nusanet Developers
12 min readMar 7, 2020

--

Pengenalan

Firestore merupakan salah database NoSQL yang memiliki kemampuan hampir mirip seperti Firebase Realtime Database. Dari dokumentasinya disebutkan juga bahwa Firestore ini juga memiliki fitur untuk melakukan sinkron secara realtime dan tentunya mendukung untuk data offline juga. Yang membedakan Firestore dengan Firebase Realtime Database adalah dari segi kompleksitasnya. Firestore di-design dengan semaksimal mungkin agar database NoSQL ini memiliki kemampuan yang lebih kompleks contohnya seperti, melakukan query yang super rumit dan daya penyimpanan yang lebih kompleks. Lalu, untuk cara kerjanya sendiri juga agak sedikit berbeda dengan Firebase Realtime Database dimana, jikalau di Firebase Realtime Database kita hanya menyimpan data kita dalam bentuk sebuah pohon JSON maka, di Firestore kita lebih dipermudah karena kita menggunakan konsep collections. Lalu, didalam collections tersebut kita bisa menyimpan documents dan didalam documents kita bisa menyimpan data.

Pohon JSON di Realtime Database
Struktur di Firestore

Jika kamu bingung memilih apakah mau menggunakan Realtime Database atau Firestore maka, kamu bisa kunjungi link berikut untuk melihat info lebih lengkapnya.

Contoh Projek

Buat Projek Flutter

Pertama-tama kita buat projek Flutter dengan nama flutter_firestore_todo di IDE atau Text Editor favorit kita.

Buat projek Flutter

Ubah file pubspec.yaml

Kemudian, kita buka file pubspec.yaml dan ubah menjadi seperti berikut pada bagian dependencies.

Kemudian, jalankan perintah flutter packages get untuk mengunduh paket-paket tersebut.

Buat Projek Firebase

Untuk langkah ini saya anggap kita semua sudah tahu cara buat projek di Firebase. Pada contoh kali ini saya coba mencontohkan untuk Android dan Web saja ya. Karena, untuk iOS berdasarkan saat tulisan ini dipublikasikan ternyata masih ada error ketika di-build ke iOS. Berikut issue-nya di Github.

Persiapan Android

Pada firebase console-nya, silakan kita buat projek untuk Android

Buat projek Firebase untuk aplikasi Android

Kemudian, silakan isi form yang ada dan unduh file google-services.json dan letakkan kedalam projek kita pada direktori android/app.

Masukkan file google-services.json kedalam projek

Persiapan Web

Untuk Web, silakan buat projek sama seperti pada langkah persiapan Android hanya saja pilih yang Web lalu, isi form yang ada. Kemudian, buka file index.html dan masukkan kode berikut.

Isi file index.htmlm

Untuk nilai firebaseConfig kita bisa mengisinya sesuai dengan milik kita masing-masing di projek Firebase yang sudah kita buat tadi. Cara melihatnya dari menu Settings dan pilih aplikasi Web yang sudah kita tambahkan diawal tadi.

Nilai firebaseConfig

Catatan: pada tulisan ini dipublikasikan saya menggunakan Flutter Channel Beta dengan versi 1.14.6 dan Flutter Web juga masih ada di channel Beta.

Buat File Pendukung

Sebelum kita membuat tampilannya ada beberapa file pendukung yang perlu kita buat pada contoh projek kali ini yaitu sebagai berikut.

  1. app_color.dart
  2. widget_background.dart

Untuk yang pertama, silakan buat file baru dengan nama app_color.dart dan masukkan kode berikut.

Untuk yang berikutnya, kita buat file baru dengan nama widget_background.dart dan masukkan kode berikut.

Buat Tampilan Utama

Pada tampilan utamanya kita akan membuat tampilan seperti berikut.

Tampilan Utama di Android
Tampilan Utama di Web

Untuk membuatnya silakan buka file main.dart dan isikan dengan kode berikut.

Pada kode diatas bisa kita lihat bahwa ada beberapa bagian kode yang masih kita beri komentar // TODO:. Kode-kode ini nantinya akan kita lengkapi pada langkah berikutnya ya 😉.

Bedah Kode main.dart

Didalam file main.dart ada beberapa kode yang akan saya jelaskan mengenai fungsi si Firestore untuk mengambil data. Fungsi tersebut bisa kita lihat pada kode berikut.

Pada kode firestore.collection('tasks').orderBy('date').snapshots() ini berfungsi untuk mengambil data koleksi yang bernama tasks dari Firestore lalu mengurutkannya berdasarkan nilai dari key date.

Struktur data

Buat Fitur Menambahkan Task

Untuk membuat fitur tambah task kita perlu buat class baru dengan nama create_task_screen.dart dan masukkan kode berikut.

Kemudian, kita buka kembali file main.dart dan ubah komentar // TODO: fitur tambah task menjadi kode berikut.

Selanjutnya, coba jalankan kembali programnya dan tap floating action button tambah. Maka, si pengguna akan diarahkan ke tampilan form seperti gambar berikut.

Tampilan tambah task di Android
Tampilan tambah task di Web

Sekarang coba kita test masukkan data pada form tambah task diatas. Jika berhasil seharusnya datanya akan masuk ke Firestore.

Fitur menambahkan task

Bedah Kode create_task_screen.dart

Pada file create_task_screen.dart hanya ada satu fungsi yang kita gunakan pada Firestore yaitu, untuk menambahkan data kedalam Firestore. Berikut ialah kode yang berfungsi untuk menambahkan data kedalam Firestore.

Awalnya kita buat terlebih dahulu objek CollectionReference -nya berdasarkan nama collection yang akan kita simpan. Pada contoh kali ini nama collection-nya adalah tasks. Kemudian, kita masukkan data yang ingin kita tambahkan kedalam collection tersebut dengan cara menggunakan fungsi add yang disediakan oleh objek CollectionReference . Adapun data yang kita masukkan kedalam collection tasks adalah name, description, dan date.

Buat Fitur Hapus Task

Untuk membuat fitur hapus task silakan kita buka kembali file main.dart dan ubah kode berikut.

Menjadi seperti berikut.

Coba jalankan kembali program diatas dan tap icon more lalu, pilih Delete. Selanjutnya, akan muncul dialog konfirmasi dan silakan pilih Delete. Jika berhasil seharusnya data yang dihapus akan hilang dari list todo.

Buat fitur hapus task

Bedah Kode Fitur Hapus Task

Untuk menghapus sebuah document dari Firestore kita bisa menggunakan fungsi document.reference.delete() dimana, document merupakan objek dari DocumentSnapshot yang mana objek tersebut merupakan data document yang akan kita hapus.

Buat Fitur Edit Task

Untuk membuat fitur edit task silakan buka file main.dart dan ubah kode berikut.

Menjadi seperti berikut.

Lalu, buka kembali file create_task_screen.dart dan lihat didalam property onPressed dari widget RaisedButton dimana, didalamnya ada kode berikut.

Kode tersebutlah yang berfungsi untuk melakukan update data ke Firestore. Untuk mengetesnya, sekarang coba jalankan lagi programnya dan tap icon more lalu, pilih Edit. Setelah itu, kita akan diarahkan ke form task untuk melakukan perubahan data. Dan jika sudah diubah silakan tap button Update Task.

Fitur edit task

Bedah Kode Fitur Edit Task

Untuk melakukan perubahan data document di Firestore kita bisa menggunakan fungsi transaction dimana, konsep transaction ini adalah kita menjalankan sebuah fungsi secara sequence atau berurutan. Didalam transaction tersebut kita ambil dahulu data document berdasarkan document ID yang kita dapatkan dari list todo. Jikalau datanya tersedia maka, lakukan fungsi transaction.update() . Berikut adalah kodenya yang berfungsi untuk melakukan edit data di Firestore.

Kesimpulan

Jadi, dari tulisan ini saya ambil kesimpulan bahwa penggunaan Firestore sebagai MBaaS (Mobile Backend as a Service) merupakan pilihan yang tepat bagi kita yang mau mengembangkan aplikasi tanpa harus memikirkan masalah infrastruktur backend-nya. Selain itu, karena Flutter sudah mendukung untuk Mobile (Android & iOS) dan Web jadi, saya rasa ini adalah kombinasi yang benar-benar sempurna bagi kita karena, dengan single codebase-nya kita sudah bisa membuat 3 aplikasi yang berbeda platform secara bersamaan. Ini jelas-jelas menghemat biaya dan waktu pengembangan kita. Untuk source code projeknya bisa dilihat di Github ya.

--

--