Ya benar dapat dilakukan pengambilan data JSON tanpa menggunakan model. Tetapi, hal ini bukan merupakan suatu best practice. Karena dengan adanya model dapat membuat pengambilan data JSON menjadi lebih terstruktur dan lebih rapi, dalam hal ini tiap field dari data seperti menjadi properti dari class model tersebut yang sudah ditentukan tipe datanya, sehingga ketika kita ingin mengakses data untuk field tersebut, kita cukup mengakses properti dari class model tersebut.
FutureBuilder
: widget yang di-build berdasarkan interaksi antara snapshot dengan flutterCircularProgressIndicator
: Animasi loading.InkWell
: Widget yang merespons sentuhan.SizedBox
: widget berupa box yang bisa ditentukan ukurannya dan berfungsi memberi jarakBorderRadius
: Radius sudut boks.BoxShadow
: Bayangan boks.`
Pertama, Data di-fetch dari sebuah API endpoint (URL Tugas 3). Lalu data yang sudah di-fetch dilakukan decode agar menjadi bentuk JSON agar setelah itu dapat dikonversi dalam bentuk model yang sudah dibuat. Data dalam bentuk model tersebut lah yang dapat ditampilkan pada aplikasi Flutter.
Update pada drawer agar dapat mengakses mywatchlist
dan mywatchlist-detail
.
Buat model MyWatchList
yang di dalamnya ada Fields
seperti bentuk tugas 3.
Pada mywatchlist
tampilkan hanya judul-judul MyWatchList
yang diperoleh melalui API endpoint dari Tugas 3. Judul-judul tersebut ditampilkan secara vertikal dan lakukan sehingga dapat diklik setiapnya untuk mengakses page mywatchlist_detail
.
Pada mywatchlist_detail
tampilkan detail attribute dari instance tersebut. Ini bisa didapat dari argumen navigasi dan tombol back untuk kembali ke page mywatchlist
.
Stateless widget merupakan widget yang tidak mempunyai state. Stateless widget bersifat statis alias tidak dapat diubah. Contoh dari stateless widget adalah Text
dan Icon
.
Stateful widget merupakan widge yang mempunyai state dan bersifat dinamis (dapat berubah-ubah). Contoh dari stateful widget adalah CheckBox
, Radio
.
Scaffold
: menyimpan seluruh widget yang akan ditampilkan dan berlaku sebagai widget utamaAppBar
: menampilkan app bar yang pada umumnya terdapat pada baris atas aplikasi dan dapat berisi widget lain (biasanya selalu ada judul)Center
: menempatkan child padanya di posisi tengahColumn
: menempatkan children padanya secara vertikalRow
: menempatkan children padanya secara horizontalPadding
: memberikan padding pada childnyaEdgeInsets
: memberikan padding secara detailText
: berguna untuk menampilkan tulisan.Visibility
: untuk menyembunyikan/menampilkan widgetFloatingActionButton
: button yang dapat ditekanIcon
: jenis-jenis icon pada tombol
setState() adalah tanda pemberitahuan ke framework bahwa ada perubahan state lalu framework akan mengupdate dan merender ulang widget tsb, variable yang terdampak adalah yang terdapat di dalam setState(). Dalam tugas 7 ini berarti _counter
.
const dan final sama-sama variable yang bersifat konstan dan tidak bisa diganti lagi. Namun perbedaannya kalau const nilainya ditentukan saat compile-time, sedangkan final pada saat runtime.
flutter create counter_7
dan mengubah title jadi Program Counter
.
Membuat fungsi _decrementCounter
, tapi ingat hanya bisa dilakukan ketika _counter > 0
Mengupdate body pada Scaffold untuk memberikan GANJIL/GENAP dan warna.
Menambahkan widget Padding
, yang berisikan spesifikasi padding dan 2 tombol. 2 tombol mencakup widget FloatingActionBotton
, khusus untuk yang button -
, tambahkan Visibility
pada parentnya. Jangan lupa sesuaikan onPressed dan Icon yang dipilih untuk botton tsb.
Baik Navigator.push
maupun Navigator.pushReplacement
sama-sama mem-push sebuah route baru ke Navigator. Namun kalau, Navigator.pushReplacement
akan menghapus route sebelumnya setelah route yang baru telah selesai loading dan sudah digunakan.
Scaffold
: menyimpan seluruh widget yang akan ditampilkan dan berlaku sebagai widget utamaAppBar
: menampilkan app bar yang pada umumnya terdapat pada baris atas aplikasi dan dapat berisi widget lain (biasanya selalu ada judul)Center
: menempatkan child padanya di posisi tengahColumn
: menempatkan children padanya secara vertikalRow
: menempatkan children padanya secara horizontalPadding
: memberikan padding pada childnyaEdgeInsets
: memberikan padding secara detailText
: berguna untuk menampilkan tulisan.Visibility
: untuk menyembunyikan/menampilkan widgetFloatingActionButton
: button yang dapat ditekanIcon
: jenis-jenis icon pada tombolTextFormField
: widget TextField yang terhubung dengan Form, berfungsi untuk menyediakan field bagi pengguna untuk memasukkan teksSizedBox
: widget berupa box yang bisa ditentukan ukurannya dan berfungsi memberi jarakDropdownButton
: widget tombol yang ketika ditekan oleh pengguna akan menampilkan dropdown yang dapat dipilihMaterialApp
: widget yang dijalankan pertama kali ketika eksekusi fungsi pada main() dan berfungsi untuk wrapping widget lain yang diimplementasikan dengan Material Design pada halaman aplikasiForm
: widget yang bermanfaat dalam membungkus beberapa form field widget agar menjadi satu kesatuan
- onHover
- onEnter
- onExit
- onPressed
- onChanged
Navigator pada flutter pada intinya cara kerjanya sama kayak struktur data Stack. Jadi kalau ada operasi Navigator.push
route yang hendak di-push akan masuk ke atas stack Navigator dan akan tampilkan itu. Kalau ada operasi Novigator.pop
maka, akan membuang/mengeluarkan yang sedang ada di top (yang sedang ditayangkan), dan sekarang top nya adalah route sebelumnya dan tayangkan itu.
Membuat file baru drawer.dart
yang berisi kumpulan widget Drawer yang akan digunakan pada aplikasi. Untuk tugas ini ada 3 drawer, dan akan memakai widget ListTile
OnProgress...