flexible -> single [child]
wrap -> multi [children]
expanded -> agar keyboard tidak tertabrak
stack -> layer z-index
*** Catatan Tentang Routing
// INGAT kalau off itu melupakan cache, state, dll kalau kembali ke layar itu
get.toNamed -> ingat keduanya (page)
get.offNamed -> lupakan keduanya (page) get.offAllNamed -> lupakan semua dan ingat (page)
get.offAndNamed-> lupakan sebelum dan ingat (page)
get.back -> untuk close dialog atau untuk back page
cara load controller atau state dari controller lain (get.find)
/// manual load controller
Get.find<NAMA_CONTROLLER>();
final reloadData = Get.find();
// contoh memanggil method
reloadData.onInit();
reloadData.isLoading(true);
Get.toNamed(Routes.VESSEL);
- kita bisa load multi repository dalam satu controller tinggal daftarkan di binding
- untuk menghemat file. bisa gunakan 1 file untuk beberapa screen jika overkill codingan dikit tiap file
// untuk delay 3 detik
Timer(Duration(seconds: 3), () {
print("Yeah, this line is printed after 3 second");
});
Future.delayed(Duration(seconds: 10), () {
AuthPrefs.resetToken();
Get.offAllNamed(Routes.LOGIN);
});
// repeatedly/ looping tiap 5 detik :
Timer.periodic(Duration(seconds: 5), (timer) {
print(DateTime.now());
});
STYLE
[!] harus memberi batas tinggi / lebar agar halaman bisa di scroll dalam container (alternative bisa pakai sizedbox)
[!] agar tampilan rapi kotak untuk builder bisa memakai GridView (syarat-> harus wrapper container dan atur tinggi) seperti pakai Listview juga butuh. (untuk scroll tanpa builder bisa pakai SingleChildScrollView)
--- RENDER LOOP
list.generate() -> bisa generate list atau array dengan contains String (List)
list.map((property) {}) -> bisa generate widget children dan binding tiap property pada widget (List)
-- DIO
catch http error -> on DioError catch(e){}
di repo bisa ambil return dari dio lalu proses di controller (Future) atau proses masukan map ke class model (Future<List>)
res.data, res.statusCode, dll