From 757198cb83d89700d1a83114b7ba1b2d8d56d1e9 Mon Sep 17 00:00:00 2001 From: kicap Date: Fri, 14 Jul 2023 11:31:03 +0800 Subject: [PATCH] tambah lihat informasi dan halaman lainnya --- .env | 8 +- .gitignore | 1 + lib/app/app.dart | 8 + lib/app/app.router.dart | 258 ++++++++++++-- lib/app/mycd | 3 + lib/model/dana_sosial_model.dart | 13 +- lib/services/other_function.dart | 7 + .../admin_index_tracking_view_model.dart | 16 +- .../dana_sosial_admin_view.dart | 22 +- .../data_siswa/data_siswa_view.dart | 30 +- .../data_siswa/data_siswa_view_model.dart | 8 +- .../edit_siswa/edit_siswa_view.dart | 236 +++++++++++++ .../edit_siswa/edit_siswa_view_model.dart | 67 ++++ .../profil/profil_view.dart | 56 ++- .../sejarah/sejarah_view.dart | 46 +++ .../sejarah/sejarah_view_model.dart | 11 + .../struktur_organisasi_view.dart | 320 ++++++++++++++++++ .../struktur_organisasi_view_model.dart | 54 +++ .../visi_misi/visi_misi_view.dart | 73 ++++ .../visi_misi/visi_misi_view_model.dart | 18 + .../views/login_screen/login_screen_view.dart | 1 + .../tambah_dana_sosial_view.dart | 46 +-- .../tambah_dana_sosial_view_model.dart | 5 +- lib/ui/widgets/my_textformfield.dart | 6 + pubspec.lock | 8 + pubspec.yaml | 1 + 26 files changed, 1220 insertions(+), 102 deletions(-) create mode 100755 lib/app/mycd create mode 100644 lib/ui/views/admin_index_tracking/edit_siswa/edit_siswa_view.dart create mode 100644 lib/ui/views/admin_index_tracking/edit_siswa/edit_siswa_view_model.dart create mode 100644 lib/ui/views/admin_index_tracking/sejarah/sejarah_view.dart create mode 100644 lib/ui/views/admin_index_tracking/sejarah/sejarah_view_model.dart create mode 100644 lib/ui/views/admin_index_tracking/struktur_organisasi/struktur_organisasi_view.dart create mode 100644 lib/ui/views/admin_index_tracking/struktur_organisasi/struktur_organisasi_view_model.dart create mode 100644 lib/ui/views/admin_index_tracking/visi_misi/visi_misi_view.dart create mode 100644 lib/ui/views/admin_index_tracking/visi_misi/visi_misi_view_model.dart diff --git a/.env b/.env index 9bf3caa..040441b 100644 --- a/.env +++ b/.env @@ -1,2 +1,6 @@ -url = 'http://20.20.20.25/panti_asuhan2/' -api_url = 'http://20.20.20.25/panti_asuhan2/api/' \ No newline at end of file +url = 'https://panti-asuhan.s-keytech.com/' +api_url = 'https://panti-asuhan.s-keytech.com/api/' +# url = 'http://172.29.85.181/panti_asuhan2/' +# api_url = 'http://172.29.85.181/panti_asuhan2/api/' +# url = 'http://20.20.20.25/panti_asuhan2/' +# api_url = 'http://20.20.20.25/panti_asuhan2/api/' \ No newline at end of file diff --git a/.gitignore b/.gitignore index 24476c5..085d138 100644 --- a/.gitignore +++ b/.gitignore @@ -31,6 +31,7 @@ migrate_working_dir/ .pub-cache/ .pub/ /build/ +.env # Symbolication related app.*.symbols diff --git a/lib/app/app.dart b/lib/app/app.dart index ea5aef1..0a4cbfa 100644 --- a/lib/app/app.dart +++ b/lib/app/app.dart @@ -1,6 +1,7 @@ import 'package:panti_asuhan/ui/views/admin_index_tracking/admin_index/admin_index_view.dart'; import 'package:panti_asuhan/ui/views/admin_index_tracking/dana_sosial_admin/dana_sosial_admin_view.dart'; import 'package:panti_asuhan/ui/views/admin_index_tracking/data_siswa/data_siswa_view.dart'; +import 'package:panti_asuhan/ui/views/admin_index_tracking/edit_siswa/edit_siswa_view.dart'; import 'package:panti_asuhan/ui/views/admin_index_tracking/profil/profil_view.dart'; import 'package:panti_asuhan/ui/views/tambah_dana_sosial/tambah_dana_sosial_view.dart'; import 'package:stacked_services/stacked_services.dart'; @@ -10,6 +11,9 @@ import '../services/http_services.dart'; import '../services/my_easyloading.dart'; import '../ui/views/admin_index_tracking/add_siswa_dialog/add_siswa_dialog/add_siswa_dialog_view.dart'; import '../ui/views/admin_index_tracking/admin_index_tracking_view.dart'; +import '../ui/views/admin_index_tracking/sejarah/sejarah_view.dart'; +import '../ui/views/admin_index_tracking/struktur_organisasi/struktur_organisasi_view.dart'; +import '../ui/views/admin_index_tracking/visi_misi/visi_misi_view.dart'; import '../ui/views/login_screen/login_screen_view.dart'; import '../ui/views/splash_screen/splash_screen_view.dart'; @@ -24,9 +28,13 @@ import '../ui/views/splash_screen/splash_screen_view.dart'; MaterialRoute(page: DanaSosialAdminView), MaterialRoute(page: DataSiswaView), MaterialRoute(page: ProfilView), + MaterialRoute(page: VisiMisiView), + MaterialRoute(page: SejarahView), + MaterialRoute(page: StrukturOrganisasiView), ], ), MaterialRoute(page: TambahDanaSosialView), + MaterialRoute(page: EditSiswaView) ], dialogs: [ StackedDialog(classType: AddSiswaDialogView), diff --git a/lib/app/app.router.dart b/lib/app/app.router.dart index 82b67ad..a4593ac 100644 --- a/lib/app/app.router.dart +++ b/lib/app/app.router.dart @@ -5,18 +5,26 @@ // ************************************************************************** // ignore_for_file: no_leading_underscores_for_library_prefixes -import 'package:flutter/material.dart' as _i6; +import 'package:flutter/material.dart' as _i7; import 'package:flutter/material.dart'; import 'package:panti_asuhan/ui/views/admin_index_tracking/admin_index/admin_index_view.dart' - as _i7; + as _i8; import 'package:panti_asuhan/ui/views/admin_index_tracking/admin_index_tracking_view.dart' as _i4; import 'package:panti_asuhan/ui/views/admin_index_tracking/dana_sosial_admin/dana_sosial_admin_view.dart' - as _i8; -import 'package:panti_asuhan/ui/views/admin_index_tracking/data_siswa/data_siswa_view.dart' as _i9; -import 'package:panti_asuhan/ui/views/admin_index_tracking/profil/profil_view.dart' +import 'package:panti_asuhan/ui/views/admin_index_tracking/data_siswa/data_siswa_view.dart' as _i10; +import 'package:panti_asuhan/ui/views/admin_index_tracking/edit_siswa/edit_siswa_view.dart' + as _i6; +import 'package:panti_asuhan/ui/views/admin_index_tracking/profil/profil_view.dart' + as _i11; +import 'package:panti_asuhan/ui/views/admin_index_tracking/sejarah/sejarah_view.dart' + as _i13; +import 'package:panti_asuhan/ui/views/admin_index_tracking/struktur_organisasi/struktur_organisasi_view.dart' + as _i14; +import 'package:panti_asuhan/ui/views/admin_index_tracking/visi_misi/visi_misi_view.dart' + as _i12; import 'package:panti_asuhan/ui/views/login_screen/login_screen_view.dart' as _i3; import 'package:panti_asuhan/ui/views/splash_screen/splash_screen_view.dart' @@ -24,7 +32,7 @@ import 'package:panti_asuhan/ui/views/splash_screen/splash_screen_view.dart' import 'package:panti_asuhan/ui/views/tambah_dana_sosial/tambah_dana_sosial_view.dart' as _i5; import 'package:stacked/stacked.dart' as _i1; -import 'package:stacked_services/stacked_services.dart' as _i11; +import 'package:stacked_services/stacked_services.dart' as _i15; class Routes { static const splashScreenView = '/'; @@ -35,11 +43,14 @@ class Routes { static const tambahDanaSosialView = '/tambah-dana-sosial-view'; + static const editSiswaView = '/edit-siswa-view'; + static const all = { splashScreenView, loginScreenView, adminIndexTrackingView, tambahDanaSosialView, + editSiswaView, }; } @@ -61,37 +72,50 @@ class StackedRouter extends _i1.RouterBase { Routes.tambahDanaSosialView, page: _i5.TambahDanaSosialView, ), + _i1.RouteDef( + Routes.editSiswaView, + page: _i6.EditSiswaView, + ), ]; final _pagesMap = { _i2.SplashScreenView: (data) { - return _i6.MaterialPageRoute( + return _i7.MaterialPageRoute( builder: (context) => const _i2.SplashScreenView(), settings: data, maintainState: false, ); }, _i3.LoginScreenView: (data) { - return _i6.MaterialPageRoute( + return _i7.MaterialPageRoute( builder: (context) => const _i3.LoginScreenView(), settings: data, maintainState: false, ); }, _i4.AdminIndexTrackingView: (data) { - return _i6.MaterialPageRoute( + return _i7.MaterialPageRoute( builder: (context) => const _i4.AdminIndexTrackingView(), settings: data, maintainState: false, ); }, _i5.TambahDanaSosialView: (data) { - return _i6.MaterialPageRoute( + return _i7.MaterialPageRoute( builder: (context) => const _i5.TambahDanaSosialView(), settings: data, maintainState: false, ); }, + _i6.EditSiswaView: (data) { + final args = data.getArgs(nullOk: false); + return _i7.MaterialPageRoute( + builder: (context) => + _i6.EditSiswaView(idSiswa: args.idSiswa, key: args.key), + settings: data, + maintainState: false, + ); + }, }; @override @@ -100,6 +124,22 @@ class StackedRouter extends _i1.RouterBase { Map get pagesMap => _pagesMap; } +class EditSiswaViewArguments { + const EditSiswaViewArguments({ + required this.idSiswa, + this.key, + }); + + final int idSiswa; + + final _i7.Key? key; + + @override + String toString() { + return '{"idSiswa": "$idSiswa", "key": "$key"}'; + } +} + class AdminIndexTrackingViewRoutes { static const adminIndexView = ''; @@ -109,11 +149,20 @@ class AdminIndexTrackingViewRoutes { static const profilView = 'profil-view'; + static const visiMisiView = 'visi-misi-view'; + + static const sejarahView = 'sejarah-view'; + + static const strukturOrganisasiView = 'struktur-organisasi-view'; + static const all = { adminIndexView, danaSosialAdminView, dataSiswaView, profilView, + visiMisiView, + sejarahView, + strukturOrganisasiView, }; } @@ -121,47 +170,80 @@ class AdminIndexTrackingViewRouter extends _i1.RouterBase { final _routes = <_i1.RouteDef>[ _i1.RouteDef( AdminIndexTrackingViewRoutes.adminIndexView, - page: _i7.AdminIndexView, + page: _i8.AdminIndexView, ), _i1.RouteDef( AdminIndexTrackingViewRoutes.danaSosialAdminView, - page: _i8.DanaSosialAdminView, + page: _i9.DanaSosialAdminView, ), _i1.RouteDef( AdminIndexTrackingViewRoutes.dataSiswaView, - page: _i9.DataSiswaView, + page: _i10.DataSiswaView, ), _i1.RouteDef( AdminIndexTrackingViewRoutes.profilView, - page: _i10.ProfilView, + page: _i11.ProfilView, + ), + _i1.RouteDef( + AdminIndexTrackingViewRoutes.visiMisiView, + page: _i12.VisiMisiView, + ), + _i1.RouteDef( + AdminIndexTrackingViewRoutes.sejarahView, + page: _i13.SejarahView, + ), + _i1.RouteDef( + AdminIndexTrackingViewRoutes.strukturOrganisasiView, + page: _i14.StrukturOrganisasiView, ), ]; final _pagesMap = { - _i7.AdminIndexView: (data) { - return _i6.MaterialPageRoute( - builder: (context) => const _i7.AdminIndexView(), + _i8.AdminIndexView: (data) { + return _i7.MaterialPageRoute( + builder: (context) => const _i8.AdminIndexView(), settings: data, maintainState: false, ); }, - _i8.DanaSosialAdminView: (data) { - return _i6.MaterialPageRoute( - builder: (context) => const _i8.DanaSosialAdminView(), + _i9.DanaSosialAdminView: (data) { + return _i7.MaterialPageRoute( + builder: (context) => const _i9.DanaSosialAdminView(), settings: data, maintainState: false, ); }, - _i9.DataSiswaView: (data) { - return _i6.MaterialPageRoute( - builder: (context) => const _i9.DataSiswaView(), + _i10.DataSiswaView: (data) { + return _i7.MaterialPageRoute( + builder: (context) => const _i10.DataSiswaView(), settings: data, maintainState: false, ); }, - _i10.ProfilView: (data) { - return _i6.MaterialPageRoute( - builder: (context) => const _i10.ProfilView(), + _i11.ProfilView: (data) { + return _i7.MaterialPageRoute( + builder: (context) => const _i11.ProfilView(), + settings: data, + maintainState: false, + ); + }, + _i12.VisiMisiView: (data) { + return _i7.MaterialPageRoute( + builder: (context) => _i12.VisiMisiView(), + settings: data, + maintainState: false, + ); + }, + _i13.SejarahView: (data) { + return _i7.MaterialPageRoute( + builder: (context) => _i13.SejarahView(), + settings: data, + maintainState: false, + ); + }, + _i14.StrukturOrganisasiView: (data) { + return _i7.MaterialPageRoute( + builder: (context) => _i14.StrukturOrganisasiView(), settings: data, maintainState: false, ); @@ -174,7 +256,7 @@ class AdminIndexTrackingViewRouter extends _i1.RouterBase { Map get pagesMap => _pagesMap; } -extension NavigatorStateExtension on _i11.NavigationService { +extension NavigatorStateExtension on _i15.NavigationService { Future navigateToSplashScreenView([ int? routerId, bool preventDuplicates = true, @@ -231,6 +313,23 @@ extension NavigatorStateExtension on _i11.NavigationService { transition: transition); } + Future navigateToEditSiswaView({ + required int idSiswa, + _i7.Key? key, + int? routerId, + bool preventDuplicates = true, + Map? parameters, + Widget Function(BuildContext, Animation, Animation, Widget)? + transition, + }) async { + return navigateTo(Routes.editSiswaView, + arguments: EditSiswaViewArguments(idSiswa: idSiswa, key: key), + id: routerId, + preventDuplicates: preventDuplicates, + parameters: parameters, + transition: transition); + } + Future navigateToNestedAdminIndexViewInAdminIndexTrackingViewRouter([ int? routerId, bool preventDuplicates = true, @@ -288,6 +387,50 @@ extension NavigatorStateExtension on _i11.NavigationService { transition: transition); } + Future navigateToNestedVisiMisiViewInAdminIndexTrackingViewRouter([ + int? routerId, + bool preventDuplicates = true, + Map? parameters, + Widget Function(BuildContext, Animation, Animation, Widget)? + transition, + ]) async { + return navigateTo(AdminIndexTrackingViewRoutes.visiMisiView, + id: routerId, + preventDuplicates: preventDuplicates, + parameters: parameters, + transition: transition); + } + + Future navigateToNestedSejarahViewInAdminIndexTrackingViewRouter([ + int? routerId, + bool preventDuplicates = true, + Map? parameters, + Widget Function(BuildContext, Animation, Animation, Widget)? + transition, + ]) async { + return navigateTo(AdminIndexTrackingViewRoutes.sejarahView, + id: routerId, + preventDuplicates: preventDuplicates, + parameters: parameters, + transition: transition); + } + + Future + navigateToNestedStrukturOrganisasiViewInAdminIndexTrackingViewRouter([ + int? routerId, + bool preventDuplicates = true, + Map? parameters, + Widget Function(BuildContext, Animation, Animation, Widget)? + transition, + ]) async { + return navigateTo( + AdminIndexTrackingViewRoutes.strukturOrganisasiView, + id: routerId, + preventDuplicates: preventDuplicates, + parameters: parameters, + transition: transition); + } + Future replaceWithSplashScreenView([ int? routerId, bool preventDuplicates = true, @@ -344,6 +487,23 @@ extension NavigatorStateExtension on _i11.NavigationService { transition: transition); } + Future replaceWithEditSiswaView({ + required int idSiswa, + _i7.Key? key, + int? routerId, + bool preventDuplicates = true, + Map? parameters, + Widget Function(BuildContext, Animation, Animation, Widget)? + transition, + }) async { + return replaceWith(Routes.editSiswaView, + arguments: EditSiswaViewArguments(idSiswa: idSiswa, key: key), + id: routerId, + preventDuplicates: preventDuplicates, + parameters: parameters, + transition: transition); + } + Future replaceWithNestedAdminIndexViewInAdminIndexTrackingViewRouter([ int? routerId, @@ -402,4 +562,48 @@ extension NavigatorStateExtension on _i11.NavigationService { parameters: parameters, transition: transition); } + + Future replaceWithNestedVisiMisiViewInAdminIndexTrackingViewRouter([ + int? routerId, + bool preventDuplicates = true, + Map? parameters, + Widget Function(BuildContext, Animation, Animation, Widget)? + transition, + ]) async { + return replaceWith(AdminIndexTrackingViewRoutes.visiMisiView, + id: routerId, + preventDuplicates: preventDuplicates, + parameters: parameters, + transition: transition); + } + + Future replaceWithNestedSejarahViewInAdminIndexTrackingViewRouter([ + int? routerId, + bool preventDuplicates = true, + Map? parameters, + Widget Function(BuildContext, Animation, Animation, Widget)? + transition, + ]) async { + return replaceWith(AdminIndexTrackingViewRoutes.sejarahView, + id: routerId, + preventDuplicates: preventDuplicates, + parameters: parameters, + transition: transition); + } + + Future + replaceWithNestedStrukturOrganisasiViewInAdminIndexTrackingViewRouter([ + int? routerId, + bool preventDuplicates = true, + Map? parameters, + Widget Function(BuildContext, Animation, Animation, Widget)? + transition, + ]) async { + return replaceWith( + AdminIndexTrackingViewRoutes.strukturOrganisasiView, + id: routerId, + preventDuplicates: preventDuplicates, + parameters: parameters, + transition: transition); + } } diff --git a/lib/app/mycd b/lib/app/mycd new file mode 100755 index 0000000..66f5995 --- /dev/null +++ b/lib/app/mycd @@ -0,0 +1,3 @@ +#!/bin/bash + +ffmpeg -i "rtsp://admin:admin123@192.168.2.109/cam/realmonitor?channel=1&subtype=1" -acodec copy -vcodec copy abcd.mp4 -y diff --git a/lib/model/dana_sosial_model.dart b/lib/model/dana_sosial_model.dart index d71bf39..d59026d 100644 --- a/lib/model/dana_sosial_model.dart +++ b/lib/model/dana_sosial_model.dart @@ -1,27 +1,25 @@ class DanaSosialModel { String? idDanaSosial; - String? keterangan; + String? nama; String? jumlah; String? tanggal; - String? jenis; + String? createdAt; String? updatedAt; DanaSosialModel( {this.idDanaSosial, - this.keterangan, + this.nama, this.jumlah, this.tanggal, - this.jenis, this.createdAt, this.updatedAt}); DanaSosialModel.fromJson(Map json) { idDanaSosial = json['id_dana_sosial']; - keterangan = json['keterangan']; + nama = json['nama']; jumlah = json['jumlah']; tanggal = json['tanggal']; - jenis = json['jenis']; createdAt = json['created_at']; updatedAt = json['updated_at']; } @@ -29,10 +27,9 @@ class DanaSosialModel { Map toJson() { final Map data = {}; data['id_dana_sosial'] = idDanaSosial; - data['keterangan'] = keterangan; + data['nama'] = nama; data['jumlah'] = jumlah; data['tanggal'] = tanggal; - data['jenis'] = jenis; data['created_at'] = createdAt; data['updated_at'] = updatedAt; return data; diff --git a/lib/services/other_function.dart b/lib/services/other_function.dart index b46b224..f58ea3e 100644 --- a/lib/services/other_function.dart +++ b/lib/services/other_function.dart @@ -1,3 +1,5 @@ +import 'package:intl/intl.dart'; + class OtherFunction { int umur(String tanggalLahir) { // change tanggalLahir to DateTime @@ -8,4 +10,9 @@ class OtherFunction { int year = now.year - date.year; return year; } + + String commaFormat(int number) { + final formatter = NumberFormat('#,###'); + return formatter.format(number); + } } diff --git a/lib/ui/views/admin_index_tracking/admin_index_tracking_view_model.dart b/lib/ui/views/admin_index_tracking/admin_index_tracking_view_model.dart index 9fd4826..1fa1e6c 100644 --- a/lib/ui/views/admin_index_tracking/admin_index_tracking_view_model.dart +++ b/lib/ui/views/admin_index_tracking/admin_index_tracking_view_model.dart @@ -16,12 +16,19 @@ class AdminIndexTrackingViewModel extends IndexTrackingViewModel { 'icon': Icons.people_alt_outlined, 'header': 'List Siswa' }, - {'name': 'Dana Sosial', 'icon': Icons.money, 'header': 'Dana Sosial'}, + {'name': 'Dana', 'icon': Icons.money, 'header': 'Dana Sosial'}, { 'name': 'Profil', - 'icon': Icons.list_alt_rounded, + 'icon': Icons.person_4_outlined, 'header': 'Profil Panti Asuhan' - } + }, + {'name': 'V & M', 'icon': Icons.list_alt_rounded, 'header': 'Visi & Misi'}, + {'name': 'Sejarah', 'icon': Icons.list_outlined, 'header': 'Sejarah'}, + { + 'name': 'S O', + 'icon': Icons.people_alt_outlined, + 'header': 'Struktur Organisasi' + }, ]; List> get bottomNavBarList => _bottomNavBarList; @@ -30,6 +37,9 @@ class AdminIndexTrackingViewModel extends IndexTrackingViewModel { AdminIndexTrackingViewRoutes.dataSiswaView, AdminIndexTrackingViewRoutes.danaSosialAdminView, AdminIndexTrackingViewRoutes.profilView, + AdminIndexTrackingViewRoutes.visiMisiView, + AdminIndexTrackingViewRoutes.sejarahView, + AdminIndexTrackingViewRoutes.strukturOrganisasiView ]; String header = 'Dana Sosial'; diff --git a/lib/ui/views/admin_index_tracking/dana_sosial_admin/dana_sosial_admin_view.dart b/lib/ui/views/admin_index_tracking/dana_sosial_admin/dana_sosial_admin_view.dart index 657cbf3..d94f879 100644 --- a/lib/ui/views/admin_index_tracking/dana_sosial_admin/dana_sosial_admin_view.dart +++ b/lib/ui/views/admin_index_tracking/dana_sosial_admin/dana_sosial_admin_view.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; import 'package:panti_asuhan/app/themes/app_colors.dart'; +import 'package:panti_asuhan/services/other_function.dart'; import 'package:stacked/stacked.dart'; import '../../../../app/themes/app_text.dart'; @@ -102,6 +103,10 @@ class DanaSosialAdminView extends StatelessWidget { horizontal: 15, vertical: 10), itemCount: model.danaSosialModelList.length, itemBuilder: (context, index) { + String jumlahDonasi = OtherFunction().commaFormat( + int.parse( + model.danaSosialModelList[index].jumlah ?? + '0')); return Card( child: ListTile( title: Text( @@ -109,10 +114,19 @@ class DanaSosialAdminView extends StatelessWidget { '', style: boldTextStyle.copyWith( fontSize: 13, color: mainColor)), - subtitle: Text( - 'Rp. ${model.danaSosialModelList[index].jumlah}', - style: regularTextStyle.copyWith( - fontSize: 13, color: mainColor)), + subtitle: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + model.danaSosialModelList[index].nama ?? + '', + style: regularTextStyle.copyWith( + fontSize: 13, color: mainColor)), + Text('Rp. $jumlahDonasi', + style: regularTextStyle.copyWith( + fontSize: 13, color: mainColor)), + ], + ), trailing: Container( width: 50, height: 50, diff --git a/lib/ui/views/admin_index_tracking/data_siswa/data_siswa_view.dart b/lib/ui/views/admin_index_tracking/data_siswa/data_siswa_view.dart index 49252bf..c22f1b5 100644 --- a/lib/ui/views/admin_index_tracking/data_siswa/data_siswa_view.dart +++ b/lib/ui/views/admin_index_tracking/data_siswa/data_siswa_view.dart @@ -1,9 +1,9 @@ import 'package:flutter/material.dart'; -import 'package:panti_asuhan/services/other_function.dart'; import 'package:stacked/stacked.dart'; import '../../../../app/themes/app_colors.dart'; import '../../../../app/themes/app_text.dart'; +import '../../../../services/other_function.dart'; import './data_siswa_view_model.dart'; class DataSiswaView extends StatelessWidget { @@ -100,16 +100,24 @@ class DataSiswaView extends StatelessWidget { subtitle: Text( 'Umur : ${OtherFunction().umur(model.siswaModelList[index].tanggalLahir ?? '')}'), // circle avatar - trailing: Container( - width: 50, - height: 50, - decoration: BoxDecoration( - color: mainColor, - borderRadius: BorderRadius.circular(50), - ), - child: const Icon( - Icons.person, - color: Colors.white, + trailing: GestureDetector( + onTap: () { + model.log.i( + 'Edit${model.siswaModelList[index].idSiswa!}'); + model.goToEditSiswa(int.parse(model + .siswaModelList[index].idSiswa!)); + }, + child: Container( + width: 50, + height: 50, + decoration: BoxDecoration( + color: mainColor, + borderRadius: BorderRadius.circular(50), + ), + child: const Icon( + Icons.person, + color: Colors.white, + ), ), )), ); diff --git a/lib/ui/views/admin_index_tracking/data_siswa/data_siswa_view_model.dart b/lib/ui/views/admin_index_tracking/data_siswa/data_siswa_view_model.dart index 6a9c311..98808d9 100644 --- a/lib/ui/views/admin_index_tracking/data_siswa/data_siswa_view_model.dart +++ b/lib/ui/views/admin_index_tracking/data_siswa/data_siswa_view_model.dart @@ -1,3 +1,5 @@ +import 'package:panti_asuhan/ui/views/admin_index_tracking/edit_siswa/edit_siswa_view.dart'; + import '../../../../app/app.dialogs.dart'; import '../../../../app/app.locator.dart'; import '../../../../app/app.logger.dart'; @@ -39,8 +41,8 @@ class DataSiswaViewModel extends CustomBaseViewModel { log.i(siswaModelList); } catch (e) { log.e(e); - setBusy(false); } finally { + setBusy(false); easyLoading.dismissLoading(); } } @@ -55,4 +57,8 @@ class DataSiswaViewModel extends CustomBaseViewModel { siswaModelList = []; await getData(); } + + goToEditSiswa(int idSiswa) async { + navigationService.navigateToView(EditSiswaView(idSiswa: idSiswa)); + } } diff --git a/lib/ui/views/admin_index_tracking/edit_siswa/edit_siswa_view.dart b/lib/ui/views/admin_index_tracking/edit_siswa/edit_siswa_view.dart new file mode 100644 index 0000000..73ab76d --- /dev/null +++ b/lib/ui/views/admin_index_tracking/edit_siswa/edit_siswa_view.dart @@ -0,0 +1,236 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_dotenv/flutter_dotenv.dart'; +import 'package:stacked/stacked.dart'; +import 'package:validatorless/validatorless.dart'; + +import '../../../../app/themes/app_colors.dart'; +import '../../../widgets/my_textformfield.dart'; +import './edit_siswa_view_model.dart'; + +class EditSiswaView extends StatelessWidget { + final int idSiswa; + + const EditSiswaView({required this.idSiswa, Key? key}) : super(key: key); + + @override + Widget build(BuildContext context) { + return ViewModelBuilder.reactive( + viewModelBuilder: () => EditSiswaViewModel(), + onViewModelReady: (EditSiswaViewModel model) async { + await model.init( + idSiswa, + ); + }, + builder: ( + BuildContext context, + EditSiswaViewModel model, + Widget? child, + ) { + return Scaffold( + appBar: AppBar( + title: const Text( + "Informasi Data Siswa", + style: TextStyle( + color: Colors.white, + fontSize: 20, + ), + ), + backgroundColor: mainColor, + elevation: 0, + // back button color to white + iconTheme: const IconThemeData(color: Colors.white), + ), + body: Padding( + padding: const EdgeInsets.all(20.0), + child: SingleChildScrollView( + child: Column( + mainAxisSize: MainAxisSize.min, + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Center( + child: Stack( + children: [ + CircleAvatar( + radius: 50, + backgroundColor: fontParagraphColor, + backgroundImage: model.siswaModel != null + ? NetworkImage( + '${dotenv.env['url']}${model.siswaModel!.imgUrl}', + ) + : null, + child: model.siswaModel == null + ? const Icon( + Icons.person, + size: 50, + color: Colors.white, + ) + : null, + ), + ], + ), + ), + const SizedBox(height: 10), + MyTextFormField( + labelText: 'Nama', + controller: model.namaController, + validator: + Validatorless.required('Nama tidak boleh kosong'), + enabled: false, + ), + const SizedBox(height: 10), + MyTextFormField( + labelText: 'Tanggal Lahir', + controller: model.tanggalLahirController, + readOnly: true, + validator: Validatorless.required( + 'Tanggal lahir tidak boleh kosong'), + enabled: false, + onTap: () { + // model.changeDate(context); + }, + ), + const SizedBox(height: 10), + MyTextFormField( + labelText: 'Tempat Lahir', + controller: model.tempatLahirController, + enabled: false, + validator: Validatorless.required( + 'Tempat lahir tidak boleh kosong'), + ), + const SizedBox(height: 10), + // create dropdown button + MyTextFormField( + labelText: 'Jenis Kelamin', + controller: model.jkController, + enabled: false, + validator: Validatorless.required( + 'Pendidikan SMP tidak boleh kosong'), + ), + const SizedBox(height: 10), + MyTextFormField( + labelText: 'No. Telepon', + controller: model.noTelponController, + enabled: false, + keyboardType: TextInputType.number, + validator: Validatorless.multiple( + [ + Validatorless.required( + 'No. telepon tidak boleh kosong'), + Validatorless.number('No. telepon harus berupa angka'), + ], + ), + ), + const SizedBox(height: 10), + MyTextFormField( + labelText: 'Agama', + controller: model.agamaController, + enabled: false, + keyboardType: TextInputType.emailAddress, + validator: + Validatorless.required('Agama tidak boleh kosong'), + ), + const SizedBox(height: 10), + MyTextFormField( + labelText: 'Kewarganegaraan', + controller: model.kewarganegaraanController, + enabled: false, + keyboardType: TextInputType.emailAddress, + validator: Validatorless.required( + 'Kewarganegaraan tidak boleh kosong'), + ), + const SizedBox(height: 10), + MyTextFormField( + labelText: 'Alamat', + controller: model.alamatController, + enabled: false, + maxLines: 2, + validator: + Validatorless.required('Alamat tidak boleh kosong'), + ), + const SizedBox(height: 10), + MyTextFormField( + labelText: 'Pendidikan SD', + controller: model.pendidikanSDController, + enabled: false, + validator: Validatorless.required( + 'Pendidikan SD tidak boleh kosong'), + ), + const SizedBox(height: 10), + MyTextFormField( + labelText: 'Pendidikan SMP', + controller: model.pendidikanSMPController, + enabled: false, + validator: Validatorless.required( + 'Pendidikan SMP tidak boleh kosong'), + ), + const SizedBox(height: 10), + MyTextFormField( + labelText: 'Pendidikan SMA', + controller: model.pendidikanSMAController, + enabled: false, + validator: Validatorless.required( + 'Pendidikan SMA tidak boleh kosong'), + ), + const SizedBox(height: 10), + MyTextFormField( + labelText: 'Kemampuan', + controller: model.kemampuanController, + enabled: false, + maxLines: 4, + validator: + Validatorless.required('Kemampuan tidak boleh kosong'), + ), + const SizedBox(height: 10), + MyTextFormField( + labelText: "Hobi", + controller: model.hobiController, + enabled: false, + maxLines: 4, + validator: + Validatorless.required('Hobi tidak boleh kosong'), + ), + // Row( + // mainAxisAlignment: MainAxisAlignment.end, + // children: [ + // TextButton( + // onPressed: () {}, + // child: const Text( + // 'Batal', + // style: TextStyle( + // color: dangerColor, + // ), + // ), + // ), + // TextButton( + // onPressed: () async { + // // if (model.formKey.currentState!.validate()) { + // // bool res = await model.postData(); + // // model.log.i("res: $res"); + // // if (res) { + // // completer( + // // DialogResponse( + // // confirmed: true, + // // ), + // // ); + // // } + // // } + // }, + // child: const Text( + // 'Simpan', + // style: TextStyle( + // color: blueColor, + // ), + // ), + // ), + // ], + // ), + ], + ), + ), + ), + ); + }, + ); + } +} diff --git a/lib/ui/views/admin_index_tracking/edit_siswa/edit_siswa_view_model.dart b/lib/ui/views/admin_index_tracking/edit_siswa/edit_siswa_view_model.dart new file mode 100644 index 0000000..4ed7f11 --- /dev/null +++ b/lib/ui/views/admin_index_tracking/edit_siswa/edit_siswa_view_model.dart @@ -0,0 +1,67 @@ +import 'package:flutter/material.dart'; + +import '../../../../app/app.locator.dart'; +import '../../../../app/app.logger.dart'; +import '../../../../app/core/custom_base_view_model.dart'; +import '../../../../model/siswa_model.dart'; +import '../../../../services/http_services.dart'; +import '../../../../services/my_easyloading.dart'; + +class EditSiswaViewModel extends CustomBaseViewModel { + final log = getLogger('EditSiswaViewModel'); + final _httpService = locator(); + final easyLoading = locator(); + SiswaModel? siswaModel; + List jenisKelaminList = ['Laki-laki', 'Perempuan']; + String jenisKelamin = 'Laki-laki'; + + TextEditingController namaController = TextEditingController(); + TextEditingController tanggalLahirController = TextEditingController(); + TextEditingController tempatLahirController = TextEditingController(); + TextEditingController alamatController = TextEditingController(); + TextEditingController noTelponController = TextEditingController(); + TextEditingController agamaController = TextEditingController(); + TextEditingController kewarganegaraanController = TextEditingController(); + TextEditingController pendidikanSDController = TextEditingController(); + TextEditingController pendidikanSMPController = TextEditingController(); + TextEditingController pendidikanSMAController = TextEditingController(); + TextEditingController kemampuanController = TextEditingController(); + TextEditingController hobiController = TextEditingController(); + TextEditingController jkController = TextEditingController(); + + Future init(int idSiswa) async { + log.i('idSiswa: $idSiswa'); + getData(idSiswa); + } + + getData(int idSiswa) async { + // log.i('idSiswa: $idSiswa'); + setBusy(true); + easyLoading.showLoading(); + try { + var response = await _httpService.get('siswa_detail?id=$idSiswa'); + var datanya = response.data['data']; + siswaModel = SiswaModel.fromJson(datanya); + notifyListeners(); + log.i(siswaModel!.imgUrl); + namaController.text = siswaModel!.nama!; + tanggalLahirController.text = siswaModel!.tanggalLahir!; + tempatLahirController.text = siswaModel!.tempatLahir!; + alamatController.text = siswaModel!.alamat!; + noTelponController.text = siswaModel!.noTelpon!; + agamaController.text = siswaModel!.agama!; + kewarganegaraanController.text = siswaModel!.kewarganegaraan!; + pendidikanSDController.text = siswaModel!.pendidikanSd!; + pendidikanSMPController.text = siswaModel!.pendidikanSmp!; + pendidikanSMAController.text = siswaModel!.pendidikanSma!; + kemampuanController.text = siswaModel!.kemampuan!; + hobiController.text = siswaModel!.hobi!; + jkController.text = siswaModel!.jenisKelamin!; + } catch (e) { + log.e(e); + } finally { + setBusy(false); + easyLoading.dismissLoading(); + } + } +} diff --git a/lib/ui/views/admin_index_tracking/profil/profil_view.dart b/lib/ui/views/admin_index_tracking/profil/profil_view.dart index b9caef5..1821fb7 100644 --- a/lib/ui/views/admin_index_tracking/profil/profil_view.dart +++ b/lib/ui/views/admin_index_tracking/profil/profil_view.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; import 'package:stacked/stacked.dart'; +import '../../../../app/themes/app_text.dart'; import './profil_view_model.dart'; class ProfilView extends StatelessWidget { @@ -18,10 +19,57 @@ class ProfilView extends StatelessWidget { ProfilViewModel model, Widget? child, ) { - return const Scaffold( - body: Center( - child: Text( - 'ProfilView', + return Scaffold( + body: Padding( + padding: const EdgeInsets.symmetric(horizontal: 20, vertical: 15), + child: Column( + children: [ + const Center( + child: Image( + image: AssetImage("assets/logo.png"), + width: 200, + height: 200, + ), + ), + const SizedBox(height: 10), + Text( + "PANTI ASUHAN ABADI AISYIYAH", + style: boldTextStyle.copyWith( + fontSize: 20, + ), + textAlign: TextAlign.center, + ), + const SizedBox(height: 10), + Row( + crossAxisAlignment: CrossAxisAlignment.center, + children: const [ + Icon(Icons.phone), + SizedBox(width: 15), + Expanded( + child: Text( + "081 343 434 343", + textAlign: TextAlign.justify, + style: regularTextStyle, + ), + ), + ], + ), + const SizedBox(height: 10), + Row( + crossAxisAlignment: CrossAxisAlignment.center, + children: const [ + Icon(Icons.location_on), + SizedBox(width: 15), + Expanded( + child: Text( + "Jln Panti Asuhan No. 3 Ujung Lare, Kec. Soreang, Kota Parepare, Sulawesi Selatan 91133", + textAlign: TextAlign.justify, + style: regularTextStyle, + ), + ), + ], + ), + ], ), ), ); diff --git a/lib/ui/views/admin_index_tracking/sejarah/sejarah_view.dart b/lib/ui/views/admin_index_tracking/sejarah/sejarah_view.dart new file mode 100644 index 0000000..6cfecd6 --- /dev/null +++ b/lib/ui/views/admin_index_tracking/sejarah/sejarah_view.dart @@ -0,0 +1,46 @@ +import 'package:flutter/material.dart'; +import 'package:stacked/stacked.dart'; + +import './sejarah_view_model.dart'; + +class SejarahView extends StatelessWidget { + @override + Widget build(BuildContext context) { + return ViewModelBuilder.nonReactive( + viewModelBuilder: () => SejarahViewModel(), + onModelReady: (SejarahViewModel model) async { + await model.init(); + }, + builder: ( + BuildContext context, + SejarahViewModel model, + Widget? child, + ) { + return Scaffold( + body: Padding( + padding: const EdgeInsets.all(20), + child: SingleChildScrollView( + child: Column( + children: [ + const Center( + child: Image( + image: AssetImage("assets/logo.png"), + width: 150, + height: 150, + ), + ), + SizedBox(height: 20), + Text( + model.isi1 + '\n\n' + model.isi2, + style: const TextStyle(fontSize: 18), + textAlign: TextAlign.justify, + ), + ], + ), + ), + ), + ); + }, + ); + } +} diff --git a/lib/ui/views/admin_index_tracking/sejarah/sejarah_view_model.dart b/lib/ui/views/admin_index_tracking/sejarah/sejarah_view_model.dart new file mode 100644 index 0000000..f5b8f44 --- /dev/null +++ b/lib/ui/views/admin_index_tracking/sejarah/sejarah_view_model.dart @@ -0,0 +1,11 @@ +import 'package:panti_asuhan/app/core/custom_base_view_model.dart'; + +class SejarahViewModel extends CustomBaseViewModel { + String isi1 = + "Panti Asuhan Abadi Aisiyah Kota Parepare dibangun secara bertahap yang peletakan batu pertamanya pada tahun 1960, dan mulai ditempati pada tahun 1962, sehingga tahun berdirinya Panti Asuhan Abadi Aisyiyah Kota Parepare pada Tahun 1963"; + + String isi2 = + "Pada perkembangannya dibangun bangunan yang ada pada sebelah kiri bangunan p[ertama, kemudia dibangun lagi Mushollah, dan pembangunannya sepenuhnya bantuan prisden Soeharto pada waktu itu. Pada perkembangan berikutnya karena jalan masukke Panti Asuhan Masih berupa pematang sawah, maka oleh Hj. Syamsiah Jabbar sebagai pengelolah pertama meminta Pemerintah untuk meninjau jalan tersebut dan pada tahun 1964-1965 oleh Pemerintah dibangun jalanan beraspal"; + + Future init() async {} +} diff --git a/lib/ui/views/admin_index_tracking/struktur_organisasi/struktur_organisasi_view.dart b/lib/ui/views/admin_index_tracking/struktur_organisasi/struktur_organisasi_view.dart new file mode 100644 index 0000000..5335aa5 --- /dev/null +++ b/lib/ui/views/admin_index_tracking/struktur_organisasi/struktur_organisasi_view.dart @@ -0,0 +1,320 @@ +import 'package:flutter/material.dart'; +import 'package:stacked/stacked.dart'; + +import './struktur_organisasi_view_model.dart'; + +class StrukturOrganisasiView extends StatelessWidget { + @override + Widget build(BuildContext context) { + return ViewModelBuilder.nonReactive( + viewModelBuilder: () => StrukturOrganisasiViewModel(), + onModelReady: (StrukturOrganisasiViewModel model) async { + await model.init(); + }, + builder: ( + BuildContext context, + StrukturOrganisasiViewModel model, + Widget? child, + ) { + return Scaffold( + body: Padding( + padding: const EdgeInsets.all(20), + child: SingleChildScrollView( + child: Column( + children: [ + const Center( + child: Image( + image: AssetImage("assets/logo.png"), + width: 150, + height: 150, + ), + ), + const SizedBox( + height: 20, + ), + const Text( + "Ketua", + style: TextStyle( + fontSize: 20, + fontWeight: FontWeight.bold, + ), + ), + const SizedBox( + height: 2, + ), + Text( + model.Ketua, + style: const TextStyle( + fontSize: 20, + ), + ), + const SizedBox( + height: 20, + ), + const Text( + "Sekretaris", + style: TextStyle( + fontSize: 20, + fontWeight: FontWeight.bold, + ), + ), + const SizedBox( + height: 2, + ), + Text( + model.Sekretaris, + style: const TextStyle( + fontSize: 20, + ), + ), + const SizedBox( + height: 20, + ), + const Text( + "Bendahara", + style: TextStyle( + fontSize: 20, + fontWeight: FontWeight.bold, + ), + ), + const SizedBox( + height: 2, + ), + Text( + model.Bendahara, + style: const TextStyle( + fontSize: 20, + ), + ), + const SizedBox( + height: 20, + ), + const Text( + "Seksi Pengasuh", + style: TextStyle( + fontSize: 20, + fontWeight: FontWeight.bold, + ), + ), + const SizedBox( + height: 2, + ), + Text( + '${model.SeksiPengasuh1}\n${model.SeksiPengasuh2}\n${model.SeksiPengasuh3}\n${model.SeksiPengasuh4}', + style: const TextStyle( + fontSize: 20, + ), + ), + const SizedBox( + height: 20, + ), + const Text( + "Seksi Ibadah", + style: TextStyle( + fontSize: 20, + fontWeight: FontWeight.bold, + ), + ), + const SizedBox( + height: 2, + ), + Text( + '${model.SeksiIbadah1}\n${model.SeksiIbadah2}\n${model.SeksiIbadah3}\n${model.SeksiIbadah4}', + style: const TextStyle( + fontSize: 20, + ), + ), + const SizedBox( + height: 20, + ), + const Text( + "Seksi Pendidikan", + style: TextStyle( + fontSize: 20, + fontWeight: FontWeight.bold, + ), + ), + const SizedBox( + height: 2, + ), + Text( + '${model.SeksiPendidikan1}\n${model.SeksiPendidikan2}', + style: const TextStyle( + fontSize: 20, + ), + ), + const SizedBox( + height: 20, + ), + const Text( + "Seksi Kesehatan", + style: TextStyle( + fontSize: 20, + fontWeight: FontWeight.bold, + ), + ), + const SizedBox( + height: 2, + ), + Text( + model.SeksiKesehatan, + style: const TextStyle( + fontSize: 20, + ), + ), + const SizedBox( + height: 20, + ), + const Text( + "Seksi Kebersihan", + style: TextStyle( + fontSize: 20, + fontWeight: FontWeight.bold, + ), + ), + const SizedBox( + height: 2, + ), + Text( + model.SeksiKebersihan, + style: const TextStyle( + fontSize: 20, + ), + ), + const SizedBox( + height: 20, + ), + const Text( + "Seksi Keterampilan", + style: TextStyle( + fontSize: 20, + fontWeight: FontWeight.bold, + ), + ), + Text( + model.SeksiKeterampilan1, + style: const TextStyle( + fontSize: 20, + ), + ), + const SizedBox( + height: 20, + ), + const Text( + "Seksi Sarana Prasarana", + style: TextStyle( + fontSize: 20, + fontWeight: FontWeight.bold, + ), + ), + Text( + model.SeksiSaranaPrasarana1, + style: const TextStyle( + fontSize: 20, + ), + ), + const SizedBox( + height: 20, + ), + const Text( + "Seksi Konsumsi", + style: TextStyle( + fontSize: 20, + fontWeight: FontWeight.bold, + ), + ), + Text( + '${model.SeksiKonsumsi1}\n${model.SeksiKonsumsi2}', + style: const TextStyle( + fontSize: 20, + ), + ), + const SizedBox( + height: 20, + ), + const Text( + "Seksi Keamanan", + style: TextStyle( + fontSize: 20, + fontWeight: FontWeight.bold, + ), + ), + Text( + '${model.SeksiKeamanan1}\n${model.SeksiKeamanan2}', + style: const TextStyle( + fontSize: 20, + ), + ), + const SizedBox( + height: 20, + ), + const Text( + "Seksi Gedung", + style: TextStyle( + fontSize: 20, + fontWeight: FontWeight.bold, + ), + ), + Text( + '${model.SeksiGedung1}\n${model.SeksiGedung2}\n${model.SeksiGedung3}\n${model.SeksiGedung4}', + style: const TextStyle( + fontSize: 20, + ), + ), + const SizedBox( + height: 20, + ), + const Text( + "Seksi Wisma", + style: TextStyle( + fontSize: 20, + fontWeight: FontWeight.bold, + ), + ), + Text( + '${model.SeksiWisma1}\n${model.SeksiWisma2}\n${model.SeksiWisma3}\n${model.SeksiWisma4}\n${model.SeksiWisma5}', + style: const TextStyle( + fontSize: 20, + ), + ), + const SizedBox( + height: 20, + ), + const Text( + "Kelompok Putri", + style: TextStyle( + fontSize: 20, + fontWeight: FontWeight.bold, + ), + ), + Text( + '${model.KelompokPutri1}\n${model.KelompokPutri2}\n${model.KelompokPutri3}', + style: const TextStyle( + fontSize: 20, + ), + ), + const SizedBox( + height: 20, + ), + const Text( + "Kelompok Putra", + style: TextStyle( + fontSize: 20, + fontWeight: FontWeight.bold, + ), + ), + Text( + '${model.KelompokPutra1}\n${model.KelompokPutra2}\n${model.KelompokPutra3}', + style: const TextStyle( + fontSize: 20, + ), + ), + ], + ), + ), + ), + ); + }, + ); + } +} diff --git a/lib/ui/views/admin_index_tracking/struktur_organisasi/struktur_organisasi_view_model.dart b/lib/ui/views/admin_index_tracking/struktur_organisasi/struktur_organisasi_view_model.dart new file mode 100644 index 0000000..3fd4d42 --- /dev/null +++ b/lib/ui/views/admin_index_tracking/struktur_organisasi/struktur_organisasi_view_model.dart @@ -0,0 +1,54 @@ +import 'package:panti_asuhan/app/core/custom_base_view_model.dart'; + +class StrukturOrganisasiViewModel extends CustomBaseViewModel { + String Ketua = "Dr. Andi Fitriani D, S.Ag, M.Pd"; + String Sekretaris = "Fitriana Buyanus, S.Si ., M.Kes"; + String Bendahara = "Hj. Djaliah, A.Ma"; + + String SeksiPengasuh1 = "Dra Hj, CIA"; + String SeksiPengasuh2 = "Dahang, S.Ag"; + String SeksiPengasuh3 = "Sumadin, S.Pd.I"; + String SeksiPengasuh4 = "Darwan"; + + String SeksiIbadah1 = "Drs. Najib La'ady"; + String SeksiIbadah2 = "Sumadin, S.Pd.I"; + String SeksiIbadah3 = "Ahmad"; + String SeksiIbadah4 = "Darwan"; + + String SeksiPendidikan1 = "Dra. Hj. CIA"; + String SeksiPendidikan2 = "Hj. Djaliah, A.Ma"; + + String SeksiKesehatan = "Haerul, SKM"; + String SeksiKebersihan = "Bd. Lina Sutomo"; + + String SeksiKeterampilan1 = "Yuslihudriani, S.Pd"; + + String SeksiSaranaPrasarana1 = "Muh.Adham, ST"; + + String SeksiKonsumsi1 = "Fatmawati"; + String SeksiKonsumsi2 = "Rasnaya"; + + String SeksiKeamanan1 = "Firdaus"; + String SeksiKeamanan2 = "Ahmad"; + + String SeksiGedung1 = "Dra. Bangsuari"; + String SeksiGedung2 = "Hidayani"; + String SeksiGedung3 = "Dahang. S,Ag"; + String SeksiGedung4 = "Saharia"; + + String SeksiWisma1 = "Drs. Muh, Yasmin"; + String SeksiWisma2 = "Hj. Hadilah"; + String SeksiWisma3 = "Muh.Adham, ST"; + String SeksiWisma4 = "Ahmad"; + String SeksiWisma5 = "Dahang, S.Ag"; + + String KelompokPutri1 = "St. Khadijah"; + String KelompokPutri2 = "St. Aisyah"; + String KelompokPutri3 = "St. Fatimah"; + + String KelompokPutra1 = "Ahmad Dahlan"; + String KelompokPutra2 = "Ar. Fahruddin"; + String KelompokPutra3 = "Amin Rais"; + + Future init() async {} +} diff --git a/lib/ui/views/admin_index_tracking/visi_misi/visi_misi_view.dart b/lib/ui/views/admin_index_tracking/visi_misi/visi_misi_view.dart new file mode 100644 index 0000000..18757a4 --- /dev/null +++ b/lib/ui/views/admin_index_tracking/visi_misi/visi_misi_view.dart @@ -0,0 +1,73 @@ +import 'package:flutter/material.dart'; +import 'package:stacked/stacked.dart'; + +import './visi_misi_view_model.dart'; + +class VisiMisiView extends StatelessWidget { + @override + Widget build(BuildContext context) { + return ViewModelBuilder.nonReactive( + viewModelBuilder: () => VisiMisiViewModel(), + onModelReady: (VisiMisiViewModel model) async { + await model.init(); + }, + builder: ( + BuildContext context, + VisiMisiViewModel model, + Widget? child, + ) { + return Scaffold( + body: Padding( + padding: const EdgeInsets.all(20), + child: SingleChildScrollView( + child: Column( + children: [ + const Center( + child: Image( + image: AssetImage("assets/logo.png"), + width: 150, + height: 150, + ), + ), + Center( + child: Text( + 'Visi', + style: const TextStyle(fontSize: 20), + ), + ), + SizedBox(height: 10), + Text( + model.visi, + style: const TextStyle(fontSize: 18), + textAlign: TextAlign.justify, + ), + SizedBox(height: 30), + Center( + child: Text( + 'Misi', + style: const TextStyle(fontSize: 20), + ), + ), + SizedBox(height: 10), + Text( + model.misi1 + + '\n\n' + + model.misi2 + + '\n\n' + + model.misi3 + + '\n\n' + + model.misi4 + + '\n\n' + + model.misi5, + style: const TextStyle(fontSize: 18), + textAlign: TextAlign.justify, + ), + ], + ), + ), + ), + ); + }, + ); + } +} diff --git a/lib/ui/views/admin_index_tracking/visi_misi/visi_misi_view_model.dart b/lib/ui/views/admin_index_tracking/visi_misi/visi_misi_view_model.dart new file mode 100644 index 0000000..772401f --- /dev/null +++ b/lib/ui/views/admin_index_tracking/visi_misi/visi_misi_view_model.dart @@ -0,0 +1,18 @@ +import 'package:panti_asuhan/app/core/custom_base_view_model.dart'; + +class VisiMisiViewModel extends CustomBaseViewModel { + String visi = + "Terwujudnya anak asuhan yang berakhlak mulia sesuai dengan tujuan Pensyarikatan "; + + String misi1 = + "1. Mengembangkan proses pengkaderan menuju masyarakat Islam yang sebenar-benarnya"; + String misi2 = + "2. Memberikan pembinaan Berbasis Keluarga Islami sehingga melahirkan anak asuhan yang berkarakter"; + String misi3 = + "3. Menegmbangkan Pendidikan Inklusif secara formal dan informal."; + String misi4 = + "4. Meningkatkan proses belajar sehingga menjadi anak asuhan yang berkualitas dan berprilaku Islami"; + String misi5 = + "5. Menjadikan LKSA ABADI Aisyyah sebagai tempat beramal bagu seluruh lapisan masyarakat"; + Future init() async {} +} diff --git a/lib/ui/views/login_screen/login_screen_view.dart b/lib/ui/views/login_screen/login_screen_view.dart index e2002be..d0f8ad3 100644 --- a/lib/ui/views/login_screen/login_screen_view.dart +++ b/lib/ui/views/login_screen/login_screen_view.dart @@ -63,6 +63,7 @@ class LoginScreenView extends StatelessWidget { hintText: "Password", prefixIcon: Icon(Icons.lock), // controller: model.passwordController, + obscureText: true, ), const SizedBox( height: 10, diff --git a/lib/ui/views/tambah_dana_sosial/tambah_dana_sosial_view.dart b/lib/ui/views/tambah_dana_sosial/tambah_dana_sosial_view.dart index 73f7fa8..08f835c 100644 --- a/lib/ui/views/tambah_dana_sosial/tambah_dana_sosial_view.dart +++ b/lib/ui/views/tambah_dana_sosial/tambah_dana_sosial_view.dart @@ -46,15 +46,15 @@ class TambahDanaSosialView extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( - "Keterangan", + "Nama Donator", style: regularTextStyle.copyWith(color: mainColor), ), MyTextFormField( - hintText: "Keterangan", - controller: model.ketController, - maxLines: 3, + hintText: "Nama Donatur", + controller: model.namaController, + maxLines: 1, validator: Validatorless.required( - 'Keterangan tidak boleh kosong'), + 'Nama Donatur tidak boleh kosong'), ), const SizedBox(height: 20), Text( @@ -82,46 +82,14 @@ class TambahDanaSosialView extends StatelessWidget { readOnly: true, controller: model.tanggalController, validator: Validatorless.required( - 'Tanggal lahir tidak boleh kosong'), + 'Tanggal tidak boleh kosong'), onTap: () { model.changeDate(context); }, ), const SizedBox(height: 20), - Text( - "Jenis Dana", - style: regularTextStyle.copyWith(color: mainColor), - ), - Container( - width: double.infinity, - height: 60, - padding: const EdgeInsets.symmetric(horizontal: 20), - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(25), - border: Border.all( - color: mainColor, - ), - ), - child: DropdownButtonHideUnderline( - child: DropdownButton( - value: model.jenisDana, - onChanged: (String? newValue) { - model.jenisDana = newValue!; - }, - items: model.jenisDanaList - .map>((String value) { - return DropdownMenuItem( - value: value, - child: Text(value, - style: const TextStyle(fontSize: 16)), - ); - }).toList(), - ), - ), - ), - const SizedBox(height: 20), MyButton( - text: "Simpan", + text: "Simpan Data", onPressed: () { if (model.formKey.currentState!.validate()) { model.log.i('Form Valid'); diff --git a/lib/ui/views/tambah_dana_sosial/tambah_dana_sosial_view_model.dart b/lib/ui/views/tambah_dana_sosial/tambah_dana_sosial_view_model.dart index 2167446..a2cec6c 100644 --- a/lib/ui/views/tambah_dana_sosial/tambah_dana_sosial_view_model.dart +++ b/lib/ui/views/tambah_dana_sosial/tambah_dana_sosial_view_model.dart @@ -18,7 +18,7 @@ class TambahDanaSosialViewModel extends CustomBaseViewModel { final formKey = GlobalKey(); - TextEditingController ketController = TextEditingController(); + TextEditingController namaController = TextEditingController(); TextEditingController jumlahController = TextEditingController(); TextEditingController tanggalController = TextEditingController(); @@ -44,8 +44,7 @@ class TambahDanaSosialViewModel extends CustomBaseViewModel { easyLoading.customLoading('Menambahkan data...'); try { var formData = FormData.fromMap({ - 'jenis': jenisDana, - 'keterangan': ketController.text, + 'nama': namaController.text, 'jumlah': jumlahController.text, 'tanggal': tanggalController.text, }); diff --git a/lib/ui/widgets/my_textformfield.dart b/lib/ui/widgets/my_textformfield.dart index 4cc22b8..9682beb 100644 --- a/lib/ui/widgets/my_textformfield.dart +++ b/lib/ui/widgets/my_textformfield.dart @@ -18,6 +18,8 @@ class MyTextFormField extends StatelessWidget { this.readOnly = false, this.onTap, this.keyboardType = TextInputType.text, + this.initialValue, + this.enabled = true, }) : super(key: key); final String? labelText; @@ -33,10 +35,14 @@ class MyTextFormField extends StatelessWidget { final bool readOnly; final VoidCallback? onTap; final TextInputType keyboardType; + final String? initialValue; + final bool enabled; @override Widget build(BuildContext context) { return TextFormField( + enabled: enabled, + initialValue: initialValue, onEditingComplete: onEditingComplete, maxLines: maxLines, controller: controller, diff --git a/pubspec.lock b/pubspec.lock index 4c0c09f..e404172 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -424,6 +424,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.6.3" + intl: + dependency: "direct main" + description: + name: intl + sha256: "3bc132a9dbce73a7e4a21a17d06e1878839ffbf975568bc875c60537824b0c4d" + url: "https://pub.dev" + source: hosted + version: "0.18.1" io: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index 6c3df1c..0c7fd9f 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -49,6 +49,7 @@ dependencies: # calendar_date_picker2: ^0.5.2 flutter_holo_date_picker: ^1.1.0 validatorless: ^1.2.3 + intl: dev_dependencies: flutter_test: