Book list Mockup
Setelah selesai dengan setup provider. Saatnya kita mulai dengan mockup "Book list" /daftar buku kita.
Siapkan class
BookListItem
class BookListItem
, saat ini masih dalam keadaat ter-hardcode. Artinya, judul, gambar dll kita tulis pada code dan akan selalu static(isinya sama).
Variable dan constructor
Langkah awal, kita siapkan class BookListItem
untuk siap menggunakan variable yang akan kita terima dari REST API nantinya.
Buka file lib/widgets/home/book-list-item.dart
. Ubah sesuai baris yang ter-highlight berikut:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|
Pada code diatas, kita membuat variable yang @required
saat instanisasi pada Constructor. Artinya, class tersebut mensyaratkan variable-variable tersebut selalu disertakan.
implementasi variable
Setelah pendeklarasian variable diatas, saatnya kita mengubah data-data yang saat ini ter-hardcode. Ubah sesuai baris yang ter-highlight berikut:
14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
|
Perubahan:
- Line 18, kita rubah type
Image
yang sebelumnyaImage.asset
( mengambil gambar dari local), menjadiImage.network
( mengambil gambar dari server HTTP) - Line 19, kita membentuk URL HTTP gambar dengan variable.
- Line 42, kita gunakan variable untuk menampilkan tulisan judul buku.
Dynamic Mockup
Jika sebelumnya kita Mockup dengan gambar dan text statis, kali ini kita akan mockup dengan text dan gambar dinamis dengan menggunakan variable dilanjutkan dengan provider.
Variable mockup
Kita awali dengan mencoba menghardcode satu baris BookListItem
Buka file lib/widgets/home/book-list.dart
, Ubah sesuai baris yang ter-highlight berikut:
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
|
Simpan dan jalankan aplikasi kita. Seharusnya tampilannya menjadi seperti ini:
Saat ini BookListItem
sudah menggunakan variable untuk menampilkan data.
Provider mockup
Setelah itu, kita mockup dengan data dari provider. Hal ini bertujuan untuk mensimulasikan data yang akan kita terima dari REST API nantinya sudah berada disisi provider.
-
Kita awali dengan me-load provider kita. Masih pada file
lib/widgets/home/book-list.dart
, ubah sesuai dengan baris yang ter-hightlight berikut:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import 'package:perpus/widgets/home/book-list-item.dart'; import 'package:perpus/models/booklist_model.dart'; import 'package:perpus/providers/booklist_provider.dart'; import 'package:perpus/providers/setting_provider.dart'; class BookList extends StatefulWidget { @override _BookListState createState() => _BookListState(); } class _BookListState extends State<BookList> { @override Widget build(BuildContext context) { var apiHost = Provider.of<SettingProvider>(context, listen: false).setting.apiHost; List<BookListModel> bookList = context.watch<BookListProvider>().list; return GridView.builder( ...
- Line ke-2, load library provider untuk mendapatkan fungsionalitas provider secara otomatis pada
context
- Line ke-5 & 6, import model dan provider Book list kita
- Line ke-7, kita hanya mengimport provider untuk Setting, karena tidak ada deklarasi model yang rumit. Cukup mengambil string saja.
- Line ke-17 & 18, ambil variable setting
apiHost
- Line ke-18, kita mengambil data mockup book list dari provider kita
- Line ke-2, load library provider untuk mendapatkan fungsionalitas provider secara otomatis pada
-
Kita gunakan variabel
List<BookListModel> bookList
yang telah kita deklarasikan pada classBookListItem
diatas. Masih pada file yang sama, ubah sesuai baris yang ter-highlight berikut:20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
... return GridView.builder( padding: EdgeInsets.all(10), itemCount: bookList.length, itemBuilder: (ctx, i) => BookListItem( id: bookList[i].id, apiHost: apiHost, imagePath: bookList[i].imagePath, title: bookList[i].title, ), gridDelegate: SliverGridDelegateWithFixedCrossAxisCount( crossAxisCount: 2, childAspectRatio: 8 / 7, crossAxisSpacing: 10, mainAxisSpacing: 10, ), ); } ...
Pada code diatas, kita gunakan variable
bookList
yang kita ambil dari provider. Karena variablebookList
adalah bertypeList
, sehingga bisa kita akses dengan menggunakan index yaitui
yang di dapat dariGridView.builder()
. Pada classGridView.builder()
, secara otomatis akan melakukan loop sesuai angkaint
yang kita masukkan pada bagianitemCount: bookList.length,
. SehinggaitemBuilder: (ctx, i)
, nilaii
adalah index dari loop sejumlah angka dariitemCount: bookList.length,
. Pada contoh provider mockup, kita memasukkan 3 dataList
bertipeBookListModel
.Sehingga jika kita jalankan, hasilnya akan seperti ini: