0% found this document useful (0 votes)
3 views

Tugas Mobile Programing

The document outlines a mobile programming assignment that includes a Flutter application for managing medical clinic data. It features various components such as models, UI pages for login, home, and details of medical specialties (Poli), and a sidebar for navigation. The application allows users to add, update, and delete Poli data, with a structured layout for user interaction.

Uploaded by

17231154
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
3 views

Tugas Mobile Programing

The document outlines a mobile programming assignment that includes a Flutter application for managing medical clinic data. It features various components such as models, UI pages for login, home, and details of medical specialties (Poli), and a sidebar for navigation. The application allows users to add, update, and delete Poli data, with a structured layout for user interaction.

Uploaded by

17231154
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 20

Naufal Rafi Abori

17231154

Tugas mobile Programing

A. Model

Poli.dart

class Poli {
String? id;
String namaPoli;

Poli({this.id, required this.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';

class Login extends StatefulWidget {


const Login({Key? key}) : super(key: key);

@override
_LoginState createState() => _LoginState();
}

class _LoginState extends State<Login> {


final _formKey = GlobalKey<FormState>();
final _usernameCtrl = TextEditingController();
final _passwordCtrl = TextEditingController();

@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';

class PoliDetail extends StatefulWidget {


final Poli poli;

const PoliDetail({super.key, required this.poli});

@override
State<PoliDetail> createState() => _PoliDetailState();
}

class _PoliDetailState extends State<PoliDetail> {


@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text("Detail Poli")),
body: Column(
children: [
SizedBox(height: 20),
Text(
"Nama Poli : ${widget.poli.namaPoli}",
style: TextStyle(fontSize: 20),
),
SizedBox(height: 20),
Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: [
_tombolUbah(),
_tombolHapus(),
],
)
],
),
);
}

_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';

class PoliForm extends StatefulWidget {


const PoliForm({Key? key}) : super(key: key);
_PoliFormState createState() => _PoliFormState();
}

class _PoliFormState extends State<PoliForm> {


final _formKey = GlobalKey<FormState>();
final _namaPoliCtrl = TextEditingController();

@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';

class PoliItem extends StatelessWidget {


final Poli poli;
const PoliItem({super.key, required this.poli});

@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';

class PoliPage extends StatefulWidget {


const PoliPage({super.key});

@override
State<PoliPage> createState() => _PoliPageState();
}

class _PoliPageState extends State<PoliPage> {


@override
Widget build(BuildContext context) {
return Scaffold(
drawer: Sidebar(), // Menampilkan Sidebar di drawer
appBar: AppBar(
title: const Text("Data Poli"),
actions: [
GestureDetector(
child: const Icon(Icons.add), // Icon untuk menambah poli
onTap: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => PoliForm()), // Navigasi ke PoliForm
);
},
)
],
),
body: ListView(
children: [
PoliItem(poli: Poli(namaPoli: "Poli Anak")),
PoliItem(poli: Poli(namaPoli: "Poli Kandungan")),
PoliItem(poli: Poli(namaPoli: "Poli Gigi")),
PoliItem(poli: Poli(namaPoli: "Poli THT")),
],
),
);
}
}

7. Poli_Update_form.dart

import 'package:flutter/material.dart';
import '../model/poli.dart';
import '/ui/poli_detail.dart';

class PoliUpdateForm extends StatefulWidget {


final Poli poli;

const PoliUpdateForm({Key? key, required this.poli}) : super(key: key);


_PoliUpdateFormState createState() => _PoliUpdateFormState();
}

class _PoliUpdateFormState extends State<PoliUpdateForm> {


final _formKey = GlobalKey<FormState>();
final _namaPoliCtrl = TextEditingController();

@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';

class Sidebar extends StatelessWidget {


const Sidebar({Key? key}) : super(key: key);

@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());
}

class MyApp extends StatelessWidget {


const MyApp({super.key});

@override
Widget build(BuildContext context) {
return const MaterialApp(
debugShowCheckedModeBanner: false, // Menonaktifkan banner debug
title: 'Klinik', // Judul aplikasi
home: Beranda(), // Halaman awal aplikasi
);
}
}
Output

You might also like