Nomor : 1
1. Buat project Firebase Message
Nomor 2 :
A. ? : Membuat nilai menjadi akan mengeluarkan nilai null, kecuali kita yang
menentukan nilainya null
B. ! : Membuat nilai bukan 0, atau sudah fix tidak ada null di dalam nilai tersebut
C. .. : tidak akan mengulang target yang sama
E. => : fungsi yang hanya menyipkan 1 ekpresi, tidak bisa di tambahkan kondisi
if else
F. <T> : Type Generik yang sudah pasti, dan nilai yang sama dengan type yang
sudah dibuat
G. <T> [] :
H. _ (underscore) : sebuat class, variabel yang bersifat private, yang tidak bisa di
panggil di file lain atau di class lain.
J. this :
K. const : nilainya sudah diketahui ketika sedang berjalan proses kompilasi dan
tidak akan berubah nilainya
L. libary : untuk mengikat sebuah class yang ada file lain dan di panggil di file
tertentu
M. as : alias digunakan untuk menganti nama opsional atau mengubah type data
Nomo 3 :
● Alias digunakan untuk mendeklarasikan bidang dan akan mengembalikan tipe
yang diberikan
Nomor 4 :
● saya menggunakan state management BLOC, alasannya karena sudah
sering menggunakan bloc, lebih mudah dipahami dan banyak beberapa
contohnya di google untuk belajar
● di dalam BLOC, istiliah yang sering digunakan di dalam BLOC, yaitu event,
state, BLOC
● Event : merupakan inputan yang akan dilakukan.
● State : merupakan kondisi yang akan terjadi ketika ingin terjadi yang bisa kita
tentukan dari hasil event.
● BLOC : komponen yang menjalankan event dan state
● Contoh
Event
State
BLOC
Nomor 5 :
● Stateless Widget : Widget yang tidak dapat diubah
● Stateful Widget : Widget yang dapat diubah, dan ada setState untuk
mengubah widget tersebut
Nomor 6 :
● Margin : memperkecil sisi luar widget
Nomor 7 :
import 'package:flutter/material.dart';
runApp(const MyApp());
}
@override
State<MyHomePage> createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
int? selected;
//attention
@override
Widget build(BuildContext context) {
return Scaffold(
floatingActionButton: FloatingActionButton(
onPressed: () {},
backgroundColor: Colors.pink,
child: const Icon(Icons.add),
),
appBar: AppBar(
centerTitle: false,
title: Column(
children: const [
Text(
'Main Page',
),
Text(
'Welcome',
),
],
),
actions: [
IconButton(
onPressed: () {},
icon: const Icon(
Icons.add,
),
),
],
),
body: SingleChildScrollView(
child: Column(
children: [
const SizedBox(height: 15),
Row(
children: [
const SizedBox(width: 10),
_headerInformation('C1'),
const SizedBox(width: 15),
_headerInformation('C2'),
const SizedBox(width: 15),
_headerInformation('C3'),
const SizedBox(width: 10),
],
),
const SizedBox(height: 100),
ExpansionPanelList.radio(
initialOpenPanelValue: 2,
children: List.generate(
20,
(index) => ExpansionPanelRadio(
value: index,
headerBuilder: (BuildContext context, bool isExpanded) {
return ListTile(
title: Text('Menu ${index + 1}'),
);
},
body: Column(
children: [
ListTile(
trailing: GestureDetector(
onTap: () {
final snackBar = SnackBar(
content: Text('Menu ${index + 1}'),
);
ScaffoldMessenger.of(context)
.showSnackBar(snackBar);
},
child: Container(
height: 30,
width: 30,
color: Colors.blue,
alignment: Alignment.center,
child: const Text(
'Ok',
),
),
),
),
ListTile(
title: Text(
'Name ${index + 1}',
),
subtitle: Text(
'Address ${index + 1}',
),
),
],
),
),
),
),
],
),
),
);
}