added add siswa and dana sosial
This commit is contained in:
@ -101,16 +101,6 @@ class AddSiswaDialogView extends StatelessWidget {
|
||||
],
|
||||
),
|
||||
const SizedBox(height: 10),
|
||||
MyTextFormField(
|
||||
labelText: 'NIS',
|
||||
controller: model.nisController,
|
||||
keyboardType: TextInputType.number,
|
||||
validator: Validatorless.multiple([
|
||||
Validatorless.required('NIS tidak boleh kosong'),
|
||||
Validatorless.number('NIS harus angka'),
|
||||
]),
|
||||
),
|
||||
const SizedBox(height: 10),
|
||||
MyTextFormField(
|
||||
labelText: 'Nama',
|
||||
controller: model.namaController,
|
||||
@ -128,6 +118,14 @@ class AddSiswaDialogView extends StatelessWidget {
|
||||
model.changeDate(context);
|
||||
},
|
||||
),
|
||||
const SizedBox(height: 10),
|
||||
MyTextFormField(
|
||||
labelText: 'Tempat Lahir',
|
||||
controller: model.tempatLahirController,
|
||||
validator: Validatorless.required(
|
||||
'Tempat lahir tidak boleh kosong'),
|
||||
),
|
||||
|
||||
const SizedBox(height: 10),
|
||||
// create dropdown button
|
||||
Container(
|
||||
@ -164,6 +162,36 @@ class AddSiswaDialogView extends StatelessWidget {
|
||||
),
|
||||
),
|
||||
const SizedBox(height: 10),
|
||||
MyTextFormField(
|
||||
labelText: 'No. Telepon',
|
||||
controller: model.noTelponController,
|
||||
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,
|
||||
keyboardType: TextInputType.emailAddress,
|
||||
validator:
|
||||
Validatorless.required('Agama tidak boleh kosong'),
|
||||
),
|
||||
const SizedBox(height: 10),
|
||||
MyTextFormField(
|
||||
labelText: 'Kewarganegaraan',
|
||||
controller: model.kewarganegaraanController,
|
||||
keyboardType: TextInputType.emailAddress,
|
||||
validator: Validatorless.required(
|
||||
'Kewarganegaraan tidak boleh kosong'),
|
||||
),
|
||||
const SizedBox(height: 10),
|
||||
MyTextFormField(
|
||||
labelText: 'Alamat',
|
||||
controller: model.alamatController,
|
||||
@ -173,11 +201,40 @@ class AddSiswaDialogView extends StatelessWidget {
|
||||
),
|
||||
const SizedBox(height: 10),
|
||||
MyTextFormField(
|
||||
labelText: 'Keahlian',
|
||||
controller: model.keahlianController,
|
||||
labelText: 'Pendidikan SD',
|
||||
controller: model.pendidikanSDController,
|
||||
validator: Validatorless.required(
|
||||
'Pendidikan SD tidak boleh kosong'),
|
||||
),
|
||||
const SizedBox(height: 10),
|
||||
MyTextFormField(
|
||||
labelText: 'Pendidikan SMP',
|
||||
controller: model.pendidikanSMPController,
|
||||
validator: Validatorless.required(
|
||||
'Pendidikan SMP tidak boleh kosong'),
|
||||
),
|
||||
const SizedBox(height: 10),
|
||||
MyTextFormField(
|
||||
labelText: 'Pendidikan SMA',
|
||||
controller: model.pendidikanSMAController,
|
||||
validator: Validatorless.required(
|
||||
'Pendidikan SMA tidak boleh kosong'),
|
||||
),
|
||||
const SizedBox(height: 10),
|
||||
MyTextFormField(
|
||||
labelText: 'Kemampuan',
|
||||
controller: model.kemampuanController,
|
||||
maxLines: 4,
|
||||
validator: Validatorless.required(
|
||||
'Keahlian tidak boleh kosong'),
|
||||
'Kemampuan tidak boleh kosong'),
|
||||
),
|
||||
const SizedBox(height: 10),
|
||||
MyTextFormField(
|
||||
labelText: "Hobi",
|
||||
controller: model.hobiController,
|
||||
maxLines: 4,
|
||||
validator:
|
||||
Validatorless.required('Hobi tidak boleh kosong'),
|
||||
),
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.end,
|
||||
@ -200,13 +257,13 @@ class AddSiswaDialogView extends StatelessWidget {
|
||||
if (model.formKey.currentState!.validate()) {
|
||||
bool res = await model.postData();
|
||||
model.log.i("res: $res");
|
||||
// if (res) {
|
||||
// completer(
|
||||
// DialogResponse(
|
||||
// confirmed: true,
|
||||
// ),
|
||||
// );
|
||||
// }
|
||||
if (res) {
|
||||
completer(
|
||||
DialogResponse(
|
||||
confirmed: true,
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
},
|
||||
child: const Text(
|
||||
|
||||
@ -4,10 +4,10 @@ import 'package:dio/dio.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_holo_date_picker/flutter_holo_date_picker.dart';
|
||||
import 'package:image_picker/image_picker.dart';
|
||||
import 'package:panti_asuhan/app/app.locator.dart';
|
||||
import 'package:panti_asuhan/app/core/custom_base_view_model.dart';
|
||||
|
||||
import '../../../../../app/app.locator.dart';
|
||||
import '../../../../../app/app.logger.dart';
|
||||
import '../../../../../app/core/custom_base_view_model.dart';
|
||||
import '../../../../../services/http_services.dart';
|
||||
import '../../../../../services/my_easyloading.dart';
|
||||
|
||||
@ -28,11 +28,18 @@ class AddSiswaDialogViewModel extends CustomBaseViewModel {
|
||||
// form and text controller
|
||||
final formKey = GlobalKey<FormState>();
|
||||
|
||||
TextEditingController nisController = TextEditingController();
|
||||
TextEditingController namaController = TextEditingController();
|
||||
TextEditingController tanggalLahirController = TextEditingController();
|
||||
TextEditingController tempatLahirController = TextEditingController();
|
||||
TextEditingController alamatController = TextEditingController();
|
||||
TextEditingController keahlianController = 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();
|
||||
|
||||
Future<void> init() async {}
|
||||
|
||||
@ -79,12 +86,19 @@ class AddSiswaDialogViewModel extends CustomBaseViewModel {
|
||||
easyLoading.customLoading('Menambahkan data...');
|
||||
try {
|
||||
var formData = FormData.fromMap({
|
||||
'nis': nisController.text,
|
||||
'nama': namaController.text,
|
||||
'jenis_kelamin': jenisKelamin,
|
||||
'tanggal_lahir': tanggalLahirController.text,
|
||||
'tempat_lahir': tempatLahirController.text,
|
||||
'alamat': alamatController.text,
|
||||
'keahlian': keahlianController.text,
|
||||
'no_telpon': noTelponController.text,
|
||||
'agama': agamaController.text,
|
||||
'kewarganegaraan': kewarganegaraanController.text,
|
||||
'pendidikan_sd': pendidikanSDController.text,
|
||||
'pendidikan_smp': pendidikanSMPController.text,
|
||||
'pendidikan_sma': pendidikanSMAController.text,
|
||||
'kemampuan': kemampuanController.text,
|
||||
'hobi': hobiController.text,
|
||||
'foto': await MultipartFile.fromFile(_imagePath!),
|
||||
});
|
||||
|
||||
|
||||
@ -88,27 +88,52 @@ class DanaSosialAdminView extends StatelessWidget {
|
||||
),
|
||||
],
|
||||
),
|
||||
child: ListView.builder(
|
||||
padding: const EdgeInsets.symmetric(
|
||||
horizontal: 15, vertical: 10),
|
||||
itemCount: 20,
|
||||
itemBuilder: (context, index) {
|
||||
return Card(
|
||||
child: GestureDetector(
|
||||
onTap: () {
|
||||
model.log.i('Card $index tapped');
|
||||
},
|
||||
child: ListTile(
|
||||
title: Text('1/02/15 - 10.00 am',
|
||||
style: boldTextStyle.copyWith(
|
||||
fontSize: 13, color: mainColor)),
|
||||
subtitle: Text('Progress $index'),
|
||||
trailing: Text('Pembangunan $index'),
|
||||
child: (model.danaSosialModelList.isEmpty)
|
||||
? Center(
|
||||
child: Text(
|
||||
'Tidak ada data',
|
||||
style: boldTextStyle.copyWith(
|
||||
fontSize: 20,
|
||||
),
|
||||
),
|
||||
)
|
||||
: ListView.builder(
|
||||
padding: const EdgeInsets.symmetric(
|
||||
horizontal: 15, vertical: 10),
|
||||
itemCount: model.danaSosialModelList.length,
|
||||
itemBuilder: (context, index) {
|
||||
return Card(
|
||||
child: ListTile(
|
||||
title: Text(
|
||||
model.danaSosialModelList[index].tanggal ??
|
||||
'',
|
||||
style: boldTextStyle.copyWith(
|
||||
fontSize: 13, color: mainColor)),
|
||||
subtitle: Text(
|
||||
'Rp. ${model.danaSosialModelList[index].jumlah}',
|
||||
style: regularTextStyle.copyWith(
|
||||
fontSize: 13, color: mainColor)),
|
||||
trailing: Container(
|
||||
width: 50,
|
||||
height: 50,
|
||||
decoration: BoxDecoration(
|
||||
color: mainColor,
|
||||
borderRadius: BorderRadius.circular(50),
|
||||
),
|
||||
child: IconButton(
|
||||
onPressed: () {
|
||||
// model.goToTambahDanaSosial();
|
||||
},
|
||||
icon: const Icon(
|
||||
Icons.edit,
|
||||
color: Colors.white,
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
},
|
||||
),
|
||||
);
|
||||
},
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
|
||||
@ -1,10 +1,48 @@
|
||||
import '../../../../app/app.locator.dart';
|
||||
import '../../../../app/app.logger.dart';
|
||||
import '../../../../app/app.router.dart';
|
||||
import '../../../../app/core/custom_base_view_model.dart';
|
||||
import '../../../../model/dana_sosial_model.dart';
|
||||
import '../../../../services/http_services.dart';
|
||||
import '../../../../services/my_easyloading.dart';
|
||||
|
||||
class DanaSosialAdminViewModel extends CustomBaseViewModel {
|
||||
final log = getLogger('DanaSosialAdminViewModel');
|
||||
Future<void> init() async {}
|
||||
final _httpService = locator<MyHttpServices>();
|
||||
final easyLoading = locator<MyEasyLoading>();
|
||||
|
||||
List<DanaSosialModel> danaSosialModelList = [];
|
||||
|
||||
Future<void> init() async {
|
||||
await getData();
|
||||
}
|
||||
|
||||
getData() async {
|
||||
setBusy(true);
|
||||
easyLoading.showLoading();
|
||||
try {
|
||||
var response = await _httpService.get('dana_sosial');
|
||||
log.i(response.data);
|
||||
danaSosialModelList = [];
|
||||
|
||||
var datanya = response.data['data'];
|
||||
// log.i(datanya.length);
|
||||
if (datanya.length > 0) {
|
||||
for (var item in datanya) {
|
||||
danaSosialModelList.add(DanaSosialModel.fromJson(item));
|
||||
}
|
||||
}
|
||||
|
||||
setBusy(false);
|
||||
notifyListeners();
|
||||
log.i(danaSosialModelList);
|
||||
} catch (e) {
|
||||
log.e(e);
|
||||
setBusy(false);
|
||||
} finally {
|
||||
easyLoading.dismissLoading();
|
||||
}
|
||||
}
|
||||
|
||||
goToTambahDanaSosial() {
|
||||
navigationService.navigateTo(Routes.tambahDanaSosialView);
|
||||
|
||||
@ -1,4 +1,5 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:panti_asuhan/services/other_function.dart';
|
||||
import 'package:stacked/stacked.dart';
|
||||
|
||||
import '../../../../app/themes/app_colors.dart';
|
||||
@ -75,38 +76,45 @@ class DataSiswaView extends StatelessWidget {
|
||||
),
|
||||
],
|
||||
),
|
||||
child: ListView.builder(
|
||||
padding: const EdgeInsets.symmetric(
|
||||
horizontal: 15, vertical: 10),
|
||||
itemCount: 20,
|
||||
itemBuilder: (context, index) {
|
||||
return Card(
|
||||
child: GestureDetector(
|
||||
onTap: () {
|
||||
model.log.i('Card $index tapped');
|
||||
child: (model.siswaModelList.isEmpty)
|
||||
? Center(
|
||||
child: Text(
|
||||
'Tidak ada data',
|
||||
style: boldTextStyle.copyWith(
|
||||
fontSize: 20,
|
||||
),
|
||||
),
|
||||
)
|
||||
: // ListView.builder(
|
||||
ListView.builder(
|
||||
padding: const EdgeInsets.symmetric(
|
||||
horizontal: 15, vertical: 10),
|
||||
itemCount: model.siswaModelList.length,
|
||||
itemBuilder: (context, index) {
|
||||
return Card(
|
||||
child: ListTile(
|
||||
title: Text(
|
||||
model.siswaModelList[index].nama ?? '',
|
||||
style: boldTextStyle.copyWith(
|
||||
fontSize: 13, color: mainColor)),
|
||||
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,
|
||||
),
|
||||
)),
|
||||
);
|
||||
},
|
||||
child: ListTile(
|
||||
title: Text('Namanya',
|
||||
style: boldTextStyle.copyWith(
|
||||
fontSize: 13, color: mainColor)),
|
||||
subtitle: Text('Umurnya : $index'),
|
||||
// circle avatar
|
||||
trailing: Container(
|
||||
width: 50,
|
||||
height: 50,
|
||||
decoration: BoxDecoration(
|
||||
color: mainColor,
|
||||
borderRadius: BorderRadius.circular(50),
|
||||
),
|
||||
child: const Icon(
|
||||
Icons.person,
|
||||
color: Colors.white,
|
||||
),
|
||||
)),
|
||||
),
|
||||
);
|
||||
},
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
|
||||
@ -1,12 +1,49 @@
|
||||
import 'package:panti_asuhan/app/core/custom_base_view_model.dart';
|
||||
|
||||
import '../../../../app/app.dialogs.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';
|
||||
import '../add_siswa_dialog/add_siswa_dialog/add_siswa_dialog_view.dart';
|
||||
|
||||
class DataSiswaViewModel extends CustomBaseViewModel {
|
||||
final log = getLogger('DataSiswaViewModel');
|
||||
Future<void> init() async {}
|
||||
final _httpService = locator<MyHttpServices>();
|
||||
final easyLoading = locator<MyEasyLoading>();
|
||||
|
||||
List<SiswaModel> siswaModelList = [];
|
||||
|
||||
Future<void> init() async {
|
||||
await getData();
|
||||
}
|
||||
|
||||
getData() async {
|
||||
setBusy(true);
|
||||
easyLoading.showLoading();
|
||||
try {
|
||||
var response = await _httpService.get('siswa');
|
||||
log.i(response.data);
|
||||
siswaModelList = [];
|
||||
|
||||
var datanya = response.data['data'];
|
||||
// log.i(datanya.length);
|
||||
if (datanya.length > 0) {
|
||||
for (var item in datanya) {
|
||||
siswaModelList.add(SiswaModel.fromJson(item));
|
||||
}
|
||||
}
|
||||
|
||||
setBusy(false);
|
||||
notifyListeners();
|
||||
log.i(siswaModelList);
|
||||
} catch (e) {
|
||||
log.e(e);
|
||||
setBusy(false);
|
||||
} finally {
|
||||
easyLoading.dismissLoading();
|
||||
}
|
||||
}
|
||||
|
||||
void addSiswa() async {
|
||||
final res = await dialogService.showCustomDialog(
|
||||
@ -15,5 +52,7 @@ class DataSiswaViewModel extends CustomBaseViewModel {
|
||||
);
|
||||
|
||||
if (res?.confirmed != true) return;
|
||||
siswaModelList = [];
|
||||
await getData();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user