Tugas Mobile Programing
Tugas Mobile Programing
17231154
A. Model
Poli.dart
class Poli {
String? id;
String namaPoli;
B. UI
1. Beranda.dart
1. import 'package:flutter/material.dart';
2. import '../widget/sidebar.dart';
3.
4. class Beranda extends StatelessWidget {
5. const Beranda({super.key});
6.
7. @override
8. Widget build(BuildContext context) {
9. return Scaffold(
10. drawer: Sidebar(), // Memanggil Sidebar widget
11. appBar: AppBar(
12. title: Text("Beranda"),
13. ),
14. body: Center(
15. child: Text("Selamat Datang"),
16. ),
17. );
18. }
19. }
20.
2.Login.dart
import 'package:flutter/material.dart';
@override
_LoginState createState() => _LoginState();
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: SingleChildScrollView(
child: SafeArea(
child: Container(
height: MediaQuery.of(context).size.height,
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(
"Login Admin",
style: TextStyle(fontSize: 22, fontWeight: FontWeight.w500),
),
SizedBox(height: 50),
Center(
child: Form(
key: _formKey,
child: Container(
width: MediaQuery.of(context).size.width / 1.3,
child: Column(
children: [
_usernameTextField(),
SizedBox(height: 20),
_passwordTextField(),
SizedBox(height: 40),
_tombolLogin(),
],
),
),
),
),
],
),
),
),
),
);
}
Widget _usernameTextField() {
return TextFormField(
decoration: InputDecoration(labelText: "Username"),
controller: _usernameCtrl,
);
}
Widget _passwordTextField() {
return TextFormField(
decoration: InputDecoration(labelText: "Password"),
obscureText: true,
controller: _passwordCtrl,
);
}
Widget _tombolLogin() {
return Container(
width: MediaQuery.of(context).size.width,
child: ElevatedButton(
child: Text("Login"),
onPressed: () {
// Logic for login action
},
),
);
}
}
3) Poli_Detail.dart
import 'package:flutter/material.dart';
import 'poli_page.dart';
import 'poli_update_form.dart';
import '../model/poli.dart';
@override
State<PoliDetail> createState() => _PoliDetailState();
}
_tombolUbah() {
return ElevatedButton(
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => PoliUpdateForm(poli: widget.poli),
),
);
},
style: ElevatedButton.styleFrom(backgroundColor: Colors.green),
child: const Text("Ubah"),
);
}
_tombolHapus() {
return ElevatedButton(
onPressed: () {
AlertDialog alertDialog = AlertDialog(
content: const Text("Yakin ingin menghapus data ini?"),
actions: [
// tombol ya
ElevatedButton(
onPressed: () {
Navigator.pop(context);
Navigator.pushReplacement(
context,
MaterialPageRoute(builder: (context) => PoliPage()),
);
},
child: const Text("YA"),
style: ElevatedButton.styleFrom(backgroundColor: Colors.red),
),
// tombol batal
ElevatedButton(
onPressed: () {
Navigator.pop(context);
},
child: Text("Tidak"),
style: ElevatedButton.styleFrom(backgroundColor: Colors.green),
)
],
);
showDialog(context: context, builder: (context) => alertDialog);
},
style: ElevatedButton.styleFrom(backgroundColor: Colors.red),
child: const Text("Hapus"),
);
}
}
4. Poli_Form.dart
import 'package:flutter/material.dart';
import 'package:klinik_app/model/poli.dart';
import 'package:klinik_app/ui/poli_detail.dart';
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text("Tambah Poli")),
body: SingleChildScrollView(
child: Form(
key: _formKey,
child: Column(
children: [
_fieldNamaPoli(),
SizedBox(height: 20),
_tombolSimpan(),
],
),
),
),
);
}
_fieldNamaPoli() {
return TextField(
decoration: const InputDecoration(labelText: "Nama Poli"),
controller: _namaPoliCtrl,
);
}
_tombolSimpan() {
return ElevatedButton(
onPressed: () {
Poli poli = Poli(namaPoli: _namaPoliCtrl.text);
Navigator.pushReplacement(
context,
MaterialPageRoute(builder: (context) => PoliDetail(poli: poli)),
);
},
child: const Text("Simpan"),
);
}
}
5. Poli_item.dart
import 'package:flutter/material.dart';
import '../model/poli.dart';
import 'poli_detail.dart';
@override
Widget build(BuildContext context) {
return GestureDetector(
child: Card(
child: ListTile(
title: Text("${poli.namaPoli}"),
),
),
onTap: () {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => PoliDetail(poli: poli)),
);
},
);
}
}
6. Poli_page.dart
import 'package:flutter/material.dart';
import '../widget/sidebar.dart';
import '../model/poli.dart';
import 'poli_detail.dart';
import 'poli_item.dart';
import 'poli_form.dart';
@override
State<PoliPage> createState() => _PoliPageState();
}
7. Poli_Update_form.dart
import 'package:flutter/material.dart';
import '../model/poli.dart';
import '/ui/poli_detail.dart';
@override
void initState() {
super.initState();
setState(() {
_namaPoliCtrl.text = widget.poli.namaPoli;
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text("Ubah Poli")),
body: SingleChildScrollView(
child: Form(
key: _formKey,
child: Column(
children: [
_fieldNamaPoli(),
SizedBox(height: 20),
_tombolSimpan(),
],
),
),
),
);
}
_fieldNamaPoli() {
return TextField(
decoration: const InputDecoration(labelText: "Nama Poli"),
controller: _namaPoliCtrl,
);
}
_tombolSimpan() {
return ElevatedButton(
onPressed: () {
Poli poli = Poli(namaPoli: _namaPoliCtrl.text);
Navigator.pop(context);
Navigator.pushReplacement(
context,
MaterialPageRoute(builder: (context) => PoliDetail(poli: poli)),
);
},
child: const Text("Simpan Perubahan"),
);
}
}
8.Sidebar.dart
import 'package:flutter/material.dart';
import '../ui/beranda.dart';
import '../ui/login.dart';
import '../ui/poli_page.dart';
@override
Widget build(BuildContext context) {
return Drawer(
child: ListView(
padding: EdgeInsets.zero,
children: [
UserAccountsDrawerHeader(
accountName: Text("NAUFAL"),
accountEmail: Text("[email protected]"),
),
ListTile(
leading: Icon(Icons.home),
title: Text("Beranda"),
onTap: () {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => Beranda()),
);
},
),
ListTile(
leading: Icon(Icons.accessible),
title: Text("Poli"),
onTap: () {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => PoliPage()),
);
},
),
ListTile(
leading: Icon(Icons.people),
title: Text("Pegawai"),
onTap: () {
// Tambahkan fungsi navigasi ke halaman Pegawai jika diperlukan
},
),
ListTile(
leading: Icon(Icons.account_box_sharp),
title: Text("Pasien"),
onTap: () {
// Tambahkan fungsi navigasi ke halaman Pasien jika diperlukan
},
),
ListTile(
leading: Icon(Icons.logout_rounded),
title: Text("Keluar"),
onTap: () {
Navigator.pushAndRemoveUntil(
context,
MaterialPageRoute(builder: (context) => Login()),
(Route<dynamic> route) => false,
);
},
),
],
),
);
}
}
9.Main.dart
import 'package:flutter/material.dart';
import 'ui/beranda.dart';
void main() {
runApp(const MyApp());
}
@override
Widget build(BuildContext context) {
return const MaterialApp(
debugShowCheckedModeBanner: false, // Menonaktifkan banner debug
title: 'Klinik', // Judul aplikasi
home: Beranda(), // Halaman awal aplikasi
);
}
}
Output