Ujian Tengah Semester

đŸŸĸ Status: Terpantau

Harap selesaikan seluruh pertanyaan berikut. Dilarang keras berpindah tab atau membuka aplikasi lain. Sesi ujian ini diawasi secara ketat oleh sistem.

Data Mahasiswa

Bagian A: Pilihan Ganda

Pilihlah jawaban yang paling tepat untuk setiap pertanyaan. (Masing-masing bernilai 2 Poin)

1. Dalam bahasa pemrograman Dart, tipe kompilasi manakah yang digunakan selama fase development untuk memfasilitasi fitur "Hot Reload"?
2. Apa yang menjadi prinsip dasar dari pengembangan antarmuka pengguna (UI) di Flutter?
3. Anda memiliki sebuah komponen layar yang hanya berfungsi untuk menampilkan logo aplikasi yang tidak akan pernah berubah. Jenis widget apa yang paling efisien dan tepat untuk digunakan?
4. Seorang developer memanggil sebuah fungsi asinkron (misal mengambil data dari API) langsung di dalam blok setState(). Apa masalah utama dari pendekatan ini menurut kaidah Flutter?
5. Widget multi-child manakah yang secara spesifik didesain untuk menyusun anak-anak (children)-nya secara vertikal?
6. Anda perlu membuat UI yang dapat mengetahui dimensi spasial maksimum yang disediakan oleh widget induknya (parent) dan menyesuaikan ukuran secara dinamis (Responsif). Komponen mana yang paling tepat untuk digunakan?
7. Apa fungsi utama dari GestureDetector di dalam pengembangan aplikasi Flutter?
8. Ketika menggunakan komponen TextFormField, properti apa yang harus kita berikan logika untuk mengecek apakah input teks tidak kosong atau valid (misalnya memiliki karakter @ untuk email)?
9. Apa kegunaan utama dari inisiasi objek FocusNode pada formulir (form) di Flutter?
10. Aplikasi Anda menampilkan layar opsi (Screen B) yang dipanggil dari layar utama (Screen A). Pengguna memilih opsi "Ya". Bagaimana cara terbaik untuk kembali ke layar A sekaligus mengembalikan data string "Ya" tersebut?
11. Dalam arsitektur Named Routes, properti metode (callback) apa pada MaterialApp yang akan dipanggil ketika aplikasi memanggil sebuah rute bernama secara dinamis yang mungkin tidak didefinisikan secara statis di routes (memungkinkan kita mengekstrak argumen di dalamnya)?
12. Dibandingkan kerangka kerja UI tradisional, Flutter lebih menyarankan prinsip komposisi (composition) daripada pewarisan (inheritance). Contoh paling jelas dari penerapan prinsip komposisi dalam Flutter adalah:
13. Anda menggunakan rute bernama (Named Route) dan ingin mengirim parameter kompleks. Jika Anda ingin mengekstrak argumen tersebut secara langsung di dalam metode build() dari layar target tanpa menggunakan konstruktor kelas, Anda dapat mengeksekusi:
14. Konsep atau fitur bahasa Dart yang secara eksplisit membedakan variabel yang boleh bernilai null dan yang tidak, dengan tujuan menghindari error Null Reference Exception pada saat kompilasi disebut:
15. Dalam menciptakan aplikasi yang adaptif/responsif terhadap dimensi perangkat, pemanggilan MediaQuery.of(context) sering digunakan untuk...

Bagian B: Benar atau Salah

Tentukan apakah pernyataan berikut ini Benar atau Salah. (Masing-masing bernilai 2 Poin)

16. Widget di Flutter tidak dapat memodifikasi state-nya sendiri setelah render pertama kali disebut sebagai StatelessWidget.
17. Metode initState() pada siklus hidup (lifecycle) sebuah StatefulWidget dipanggil berkali-kali setiap kali widget dipicu untuk di-render ulang (misal saat setState dipanggil).
18. Untuk kompilasi aplikasi Flutter versi Release atau Production agar performanya optimal seperti native, Dart menggunakan sistem kompilasi Ahead-of-Time (AOT).
19. Jika seorang developer ingin menyusun tiga elemen: Gambar profil, teks nama, dan ikon bintang, di mana gambar profil berada tepat di belakang (sebagai latar) teks nama secara bertumpuk (lapisan kedalaman z-index), widget dasar yang digunakan adalah Column.
20. Saat Anda mendeklarasikan konfigurasi initialRoute: '/' pada widget MaterialApp, Anda disarankan agar tidak mendeklarasikan properti home: secara bersamaan karena dapat memicu konflik rute default.
21. Penggunaan widget Form sebenarnya bersifat opsional, namun pembungkusan form field di dalamnya memudahkan pelacakan status input dan eksekusi validasi secara massal dengan menggunakan GlobalKey<FormState>.
22. Bahasa pemrograman Dart mengeksekusi kodenya secara asinkron dengan memblokir antar muka aplikasi (UI thread freeze) setiap kali menunggu respons HTTP.
23. Pemanggilan instruksi Navigator.pushNamed(context, '/settings') tidak akan menghapus layar saat ini dari memori, melainkan menambahkan layar Settings ke urutan paling atas dari tumpukan rute (Route Stack).
24. ListView.builder digunakan khusus untuk me-render anak-anak (children) hanya pada bagian yang terlihat di layar, sehingga ini lebih efisien pada alokasi memori dibandingkan ListView standar untuk data list yang panjang tak terbatas.
25. Properti ThemeData pada level atas MaterialApp dapat digunakan untuk menetapkan desain tipografi global (fontFamily) dan skema warna primer/aksen agar seragam di semua layar.

Bagian C: Isian Singkat

Lengkapi potongan kode berikut ini untuk menguji logika pemrograman Anda. (Masing-masing bernilai 5 Poin)

26. Untuk memberitahu Flutter bahwa ada perubahan variabel yang mengharuskan pembaruan antarmuka (UI), kita perlu membungkus perubahan tersebut di dalam sebuah blok ________().
void _incrementCounter() {
  ________(() {
    _counter++;
  });
}
27. Saat kita berada di "Layar Kedua" dan ingin kembali ke "Layar Pertama", kita menghapus rute saat ini dari stack navigasi dengan memanggil metode Navigator.________().
ElevatedButton(
  onPressed: () {
    Navigator.________(context);
  },
  child: Text('Go back!'),
)
28. Di dalam TextFormField, properti yang berfungsi menerima fungsi callback untuk mengecek apakah input pengguna sah (valid) atau mengalami error adalah ________.
TextFormField(
  ________: (String? val) {
    if (val == null || val.isEmpty) {
      return 'Field tidak boleh kosong';
    }
    return null;
  },
)
29. Untuk menambahkan fungsionalitas interaksi sentuhan (tap) pada widget statis (seperti Icon atau Container), kita harus membungkusnya dengan widget pendeteksi gestur, yaitu ________.
________(
  onTap: () {
    print('Widget diklik!');
  },
  child: Icon(Icons.lightbulb_outline),
)
30. Saat menggunakan tata letak Column, jika kita ingin menyusun seluruh children agar berada persis di tengah secara vertikal (sepanjang sumbu utama), kita harus mengatur properti ________ dengan nilai MainAxisAlignment.center.
Column(
  ________: MainAxisAlignment.center,
  children: [
    Text('Satu'),
    Text('Dua'),
  ],
)

Bagian D: Esai / Studi Kasus

Berikan jawaban yang terstruktur dan analitis. (Bernilai 25 Poin)

31. Studi Kasus Aplikasi E-Commerce:

Anda bertugas merancang navigasi dan arsitektur form aplikasi jual beli sederhana menggunakan Flutter. Terdapat tiga layar utama yang dibutuhkan: 1. Layar Login (Menerima input email, password, dan sebuah tombol submit). 2. Layar Daftar Produk (Menampilkan katalog atau kisi gambar produk). 3. Layar Detail Produk (Menampilkan gambar produk dalam ukuran penuh, judul, dan deskripsi produk yang dipilih).

Berdasarkan prinsip Widget Tree, Flutter Forms, dan Routing (Navigator 1.0):

a) Penentuan Widget State (State Management) Identifikasi tipe widget yang cocok (StatelessWidget atau StatefulWidget) untuk masing-masing layar di atas. Berikan penjelasan logis mengapa Anda memilih tipe widget tersebut untuk layar tersebut!

b) Perancangan Formulir Validasi (Forms & User Interaction) Pada Layar Login, jelaskan strategi Anda merancang form input agar ketika pengguna menekan "Submit", aplikasi dapat memvalidasi email (wajib tidak kosong) dan password (minimal 6 karakter) secara serentak tanpa mengumpulkan status nilai manual dari properti onChanged satu persatu. Komponen kunci apa yang harus di-instansiasi?

c) Penanganan Rute (Navigation & Data Passing) Jelaskan proses navigasi yang Anda rekomendasikan untuk berpindah dari Layar Daftar Produk ke Layar Detail Produk ketika suatu gambar produk di-tap. Jelaskan dengan mekanisme parameter rute atau fungsi push bagaimana data identitas produk (misal: ID Produk / Objek Produk) dipindahtangankan agar dapat dirender oleh Layar Detail Produk!

✓

Ujian Selesai!

Jawaban Anda telah berhasil dikirim dan tersimpan dengan aman di server.

📄 Bukti Pengumpulan

Nama -
NPM -
Kelas -
Waktu Pengumpulan -
Pelanggaran -
Status ✅ Terkirim