-
Apa perbedaan utama antara stateless dan stateful widget dalam konteks pengembangan aplikasi Flutter?
Stateful Widget Stateless Widget Memiliki state, sehingga tampilannya dapat berubah jika ada interaksi. Tidak memiliki state, tampilannya akan selalu tetap sampai widget lain mengubah tampilannya. Umumnya digunakan untuk tampilan yang dinamis dan interaktif. Umumnya digunakan untuk tampilan yang tidak perlu banyak dan cepat perubahan. Contoh: Add Item Button (bertambah 1 setiap di klik) Contoh: Text "Hello World!" -
Sebutkan seluruh widget yang kamu gunakan untuk menyelesaikan tugas ini dan jelaskan fungsinya masing-masing.
materialApp: widget utama untuk mengatur path navigasithemeData: mengatur tema keseluruhan proyekScaffold: template dasar tampilan aplikasiAppBar: membuat panel seperti headerSingleChildScrollView: membuat konten scrollablePadding: mengatur paddingColumn: menampilkan elemen dalam bentuk columnGridView.count: membuat grid sesuai countInkWell: membuat area responsive terhadap sentuhanContainer: menyimpan elemen-elemen di dalamnyaIcon: menampilkan ikonSnackBar: menampilkan snackbar di bagian bawah layar
-
Jelaskan bagaimana cara kamu mengimplementasikan checklist di atas secara step-by-step (bukan hanya sekadar mengikuti tutorial)
- Membuat sebuah program Flutter baru dengan tema inventory seperti tugas-tugas sebelumnya
- Membuat proyek Flutter baru dengan nama
ec_mobile:
flutter create ec_mobile- Membuat file baru
menu.dartdalam direktorilibproyekec_mobile, kemudian membuat classMyHomePageseperti yang ada padamain.dart
- Membuat proyek Flutter baru dengan nama
- Membuat tiga tombol sederhana dengan ikon dan teks
- Mengubah
colorSchemedimain.dartsesuai dengan tema warna aplikasi - Mengubah state
MyHomePagemenjadiStatelessWidget - Menambahkan atribut
colorpada classShopItemuntuk membedakan warna setiap item button, serta membuat items ShopItem yaitu Lihat Item, Tambah Item, dan Logout
- Mengubah
- Memunculkan
SnackbarMengatur widgetShopCarddengan menambahkan tampilanSnackBarserta mengubah style setiap widget
- Membuat sebuah program Flutter baru dengan tema inventory seperti tugas-tugas sebelumnya
- Jelaskan perbedaan antara Navigator.push() dan Navigator.pushReplacement(), disertai dengan contoh mengenai penggunaan kedua metode tersebut yang tepat! Navigator.push() menambahkan route pada paling atas stack, sehingga route baru akan menimpa yang lama dan ditampilkan kepada pengguna. Sedangkan Navigator.pushReplacement() menghapus route yang sedang ditampilkan kepada pengguna dan menggantinya dengan route baru.
- Jelaskan masing-masing layout widget pada Flutter dan konteks penggunaannya masing-masing!
Align: mensejajarkan posisi dengan child-nya dan membuat ukurannya sesuai dengan child-nyaCenter: mengatur alignment child ke bagian tengahColumn: membuat layout child-nya berarah vertikalContainer: membuat posisi, ukuran, dan layout widget child-nya serupaListView: membuat list yang scrollablePadding: mengatur posisi gap di sekitar childRow: membuat layout child-nya berarah horizontal
- Sebutkan apa saja elemen input pada form yang kamu pakai pada tugas kali ini dan jelaskan mengapa kamu menggunakan elemen input tersebut!
Elemen input pada form yang saya pakai pada tugas kali ini adalah
TextFormFielduntuk masing-masing name, amount, description, dan category. Saya menggunakanTextFormFieldagar user dapat memberi masukan berupa teks yang fleksibel sesuai dengan keinginan. - Bagaimana penerapan clean architecture pada aplikasi Flutter?
Flutter menerapkan clean architecture dengan mengedepankan separation of concerns untuk Feature, Domain, dan Data.
- Feature Layer: terdiri dari komponen-komponen user interface seperti widgets, screens, dan views
- Domain Layer: merupakan innermost layer, mendefinisikan business logic aplikasi
- Data Layer: merupakan outermost layer yang berguna untuk mengakses data, dapat berbentuk API calls ke server atau local database
- Jelaskan bagaimana cara kamu mengimplementasikan checklist di atas secara step-by-step! (bukan hanya sekadar mengikuti tutorial)
- Membuat minimal satu halaman baru pada aplikasi, yaitu halaman formulir tambah item baru
- Saya membuat file .dart baru untuk Form Tambah Item dengan kode:
class FormPage extends StatefulWidget { const FormPage({super.key}); @override State<FormPage> createState() => _FormPageState(); } class _FormPageState extends State<FormPage> { final _formKey = GlobalKey<FormState>(); String _name = ""; int _amount = 0; String _description = ""; String _category = ""; @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: const Center( child: Text( 'Form Tambah Item', ), ), backgroundColor: Color.fromRGBO(248, 237, 227, 1.0), foregroundColor: Color.fromRGBO(125, 110, 131, 1.0), ), drawer: const LeftDrawer(), body: Form( key: _formKey, child: SingleChildScrollView( child: Column(crossAxisAlignment: CrossAxisAlignment.start, children: [ Padding(<untuk masing-masing variable>)})))}; - Kemudian, mengikuti ketentuan pada Soal Bonus, saya menampilkan data dengan
Dialogdan juga menampilkan data pada class baru yang dapat diakses dari widgetLihat Item
- Saya membuat file .dart baru untuk Form Tambah Item dengan kode:
- Mengarahkan pengguna ke halaman form tambah item baru ketika menekan tombol Tambah Item pada halaman utama Saya membuat routing dengan memanfaatkan Navigator.push(). Sehingga kode saya adalah sebagai berikut:
if (item.name == "Tambah Item") { Navigator.push(context, MaterialPageRoute(builder: (context) => const FormPage())); }- Memunculkan data sesuai isi dari formulir yang diisi dalam sebuah pop-up setelah menekan tombol Save pada halaman formulir tambah item baru
Untuk memunculkan data, saya menggunakan
Dialogberupa pop-up yang akan muncul ketika tombol Save ditekan padaFormPage. - Membuat sebuah drawer pada aplikasi
- Dalam membuat drawer, saya mengikuti langkah-langkah yang ada pada tutorial dengan kode seperti berikut:
class LeftDrawer extends StatelessWidget { const LeftDrawer({super.key}); @override Widget build(BuildContext context) { return Drawer( child: ListView( children: [ const DrawerHeader( decoration: BoxDecoration( color: Color.fromRGBO(248, 237, 227, 1.0), ), child: Column( children: [ Text( "Eurora's Closet", textAlign: TextAlign.center, style: TextStyle( fontSize: 30, fontWeight: FontWeight.bold, color: Color.fromRGBO(125, 110, 131, 1.0), ), ), Padding(padding: EdgeInsets.all(10)), Text("Your Best Look Anytime Anywhere", style: TextStyle( color: Color.fromRGBO(125, 110, 131, 1.0), ), ), ], ), ), ListTile(<untuk setiap page>); - Saya kemudian melakukan import ke setiap file .dart yang ingin ditambahkan drawer serta menambahkan:
drawer: const LeftDrawer();<<<<<<< HEAD
- Dalam membuat drawer, saya mengikuti langkah-langkah yang ada pada tutorial dengan kode seperti berikut:
- Jelaskan bagaimana cara kamu mengimplementasikan checklist di atas secara step-by-step! (bukan hanya sekadar mengikuti tutorial)
- Membuat minimal satu halaman baru pada aplikasi, yaitu halaman formulir tambah item baru
- Saya membuat file .dart baru untuk Form Tambah Item dengan kode:
- Kemudian, mengikuti ketentuan pada Soal Bonus, saya menampilkan data dengan
Dialogdan juga menampilkan data pada class baru yang dapat diakses dari widgetLihat Item
- Saya membuat file .dart baru untuk Form Tambah Item dengan kode:
- Mengarahkan pengguna ke halaman form tambah item baru ketika menekan tombol Tambah Item pada halaman utama
Saya membuat routing dengan memanfaatkan Navigator.push(). Sehingga kode saya adalah sebagai berikut:
- Memunculkan data sesuai isi dari formulir yang diisi dalam sebuah pop-up setelah menekan tombol Save pada halaman formulir tambah item baru
Untuk memunculkan data, saya menggunakan
Dialogberupa pop-up yang akan muncul ketika tombol Save ditekan padaFormPage. - Membuat sebuah drawer pada aplikasi
- Dalam membuat drawer, saya mengikuti langkah-langkah yang ada pada tutorial dengan kode seperti berikut:
- Saya kemudian melakukan import ke setiap file .dart yang ingin ditambahkan drawer serta menambahkan:
drawer: const LeftDrawer();
- Dalam membuat drawer, saya mengikuti langkah-langkah yang ada pada tutorial dengan kode seperti berikut:
- Membuat minimal satu halaman baru pada aplikasi, yaitu halaman formulir tambah item baru
- Membuat minimal satu halaman baru pada aplikasi, yaitu halaman formulir tambah item baru
-
Apakah bisa kita melakukan pengambilan data JSON tanpa membuat model terlebih dahulu? Jika iya, apakah hal tersebut lebih baik daripada membuat model sebelum melakukan pengambilan data JSON?
Bisa, dan datanya akan muncul sebagai jsonDecode. Namun, pengambilan data JSON tanpa membuat model terlebih dahulu tidak lebih baik daripada membuat model sebelum melakukan pengambilan data JSON karena data tidak diinisiasi secara langsung menjadi object dalam class model.
-
Jelaskan fungsi dari CookieRequest dan jelaskan mengapa instance CookieRequest perlu untuk dibagikan ke semua komponen di aplikasi Flutter.
CookieRequestberfungsi untuk mengelola cookie pada HTTP Request yang berkaitan dengan session dan authentication.CookieRequestperlu untuk dibagikan ke semua komponen di aplikasi Flutter untuk mengelola keseluruhan aplikasi sehingga konsisten dan efisien. -
Jelaskan mekanisme pengambilan data dari JSON hingga dapat ditampilkan pada Flutter.
- Mengumpulkan data Django dan membuatnya dalam tampilan data JSON kemudian melakukan pemanggilan data dari endpoint JSON tersebut. Data yang diterima akan berupa data type
Map<String, dynamic>untuk setiap models setelah di-parsing menggunakandart:convert. - Pada Flutter, data dari
Mapdikonversi menjadi sebuah object dari models yang sudah diinisiasi sebelumnya. - Kemudian menggunakan
Provider, data akan diolah dan ditampilkan dalam UI dalam bentukText(atau bentuk widget lainnya). Flutter akan secara otomatis melakukan perubahan data sehingga tampilannya akan selalu up-to-date.
- Mengumpulkan data Django dan membuatnya dalam tampilan data JSON kemudian melakukan pemanggilan data dari endpoint JSON tersebut. Data yang diterima akan berupa data type
-
Jelaskan mekanisme autentikasi dari input data akun pada Flutter ke Django hingga selesainya proses autentikasi oleh Django dan tampilnya menu pada Flutter.
- Pada Flutter, pertama-tama membuat form untuk autentikasi kemudian Flutter akan mengirimkan HTTP POST Request ke endpoint Django dengan data autentikasi Django dalam bentuk JSON.
- Django akan mengirim respons ke Flutter (
200jika berhasil), kemudian Flutter akan menyimpan session cookie dari authenticated user tersebut. - Data yang ditampilkan pada Menu di Flutter akan sesuai dengan data milik user tersebut.
-
Sebutkan seluruh widget yang kamu pakai pada tugas ini dan jelaskan fungsinya masing-masing.
Align: mensejajarkan posisi dengan child-nya dan membuat ukurannya sesuai dengan child-nyaCenter: mengatur alignment child ke bagian tengahColumn: membuat layout child-nya berarah vertikalContainer: membuat posisi, ukuran, dan layout widget child-nya serupaListView: membuat list yang scrollableListTile: membuat list beberapa tileMaterialPageRoute: mengarahan routing ke widget lainPadding: mengatur posisi gap di sekitar childRow: membuat layout child-nya berarah horizontalText: membuat text dan mengatur propertinyaTextStyle: mengatur properti style dariText
-
Jelaskan bagaimana cara kamu mengimplementasikan checklist di atas secara step-by-step! (bukan hanya sekadar mengikuti tutorial).
- Membuat halaman login pada proyek tugas Flutter.
- Untuk membuat halaman login, pertama adalah mengatur authentication di Django App dengan melakukan
django-admin startapp authenticationkemudian mengatur kesettings.py - Menambahkan
django-cors-headerske depedencies dan mengatur views untuk login pada app authentication serta membuat routing-nya.
- Untuk membuat halaman login, pertama adalah mengatur authentication di Django App dengan melakukan
- Mengintegrasikan sistem autentikasi Django dengan proyek tugas Flutter.
- Menginstall package
pbp_django_authkemudian memodifikasi root widget menggunakanCookieRequestdenganProvider - Membuat file
login.dartdan mengatur isinya sesuai tutorial.
- Menginstall package
- Membuat model kustom sesuai dengan proyek aplikasi Django.
Dari Django App yang sudah di-deploy, menyalin data yang ada pada endpoint
JSONkemudian memanfaatkan website Quicktype untuk membuatnya menjadi file .dart. - Membuat halaman yang berisi daftar semua item yang terdapat pada endpoint JSON di Django yang telah kamu deploy.
- Membuat file baru
list_item.dartuntuk menampilkan name, amount, description, category, dan image dari masing-masing item pada halaman ini. Kurang lebih isi dari file ini mengikuti yang ada pada tutorial. - Mengatur routing dari widget di
MyHomePage()keDaftar Itemuntuk melihat list item yang ada.
- Membuat file baru
- Membuat halaman detail untuk setiap item yang terdapat pada halaman daftar Item.
Setelah berhasil menampilkan dan mengatur routing, menambahkan tombol untuk kembali ke
MyHomePage()dengan menambahkan:... floatingActionButton: FloatingActionButton( onPressed: () { Navigator.of(context).pushReplacement( MaterialPageRoute(builder: (context) => MyHomePage()), ); }, child: Icon(Icons.home), tooltip: 'Back to Home', ), ...
- Membuat halaman login pada proyek tugas Flutter.