changes area to kecamatan and some changes

This commit is contained in:
kicap
2023-11-24 23:17:06 +08:00
parent ba5d6fa38b
commit 376721b015
11 changed files with 320 additions and 124 deletions

View File

@ -47,7 +47,7 @@ class AreaTpsView extends StatelessWidget {
child: Row(
children: [
Text(
"Jumlah Area TPS : ",
"Jumlah Kecamatan : ",
style: italicTextStyle.copyWith(
fontSize: 16,
fontWeight: FontWeight.bold,
@ -56,7 +56,7 @@ class AreaTpsView extends StatelessWidget {
const SizedBox(width: 10),
Expanded(
child: Text(
'${model.jumlahArea} TPS',
'${model.jumlahArea} Kecamatan',
style: boldTextStyle.copyWith(
fontSize: 16,
fontWeight: FontWeight.bold,
@ -110,7 +110,7 @@ class AreaTpsView extends StatelessWidget {
child: ListTile(
leading: Text('${i + 1}'),
title: Text(
'${model.listAreaModel[i].namaArea}'),
'${model.listKecamatanModel[i].name}'),
trailing: IconButton(
// trash bin icon
icon: const Icon(
@ -118,8 +118,8 @@ class AreaTpsView extends StatelessWidget {
color: mainColor,
),
onPressed: () {
model.cekSuara(
model.listAreaModel[i]);
model.cekSuara(model
.listKecamatanModel[i]);
},
),
),

View File

@ -7,7 +7,7 @@ import '../../../../model/my_response.model.dart';
class AreaTpsViewModel extends CustomBaseViewModel {
final log = getLogger('AreaTpsViewModel');
List<AreaModel> listAreaModel = [];
List<KecamatanModel> listKecamatanModel = [];
int jumlahArea = 0;
bool status = false;
@ -23,12 +23,14 @@ class AreaTpsViewModel extends CustomBaseViewModel {
try {
var response = await httpService.get('/area/cek_area_caleg/$idCaleg');
MyResponseModel myResponseModel = MyResponseModel.fromJson(response.data);
AreaListModel areaListModel =
AreaListModel.fromJson(myResponseModel.data);
listAreaModel = areaListModel.area ?? [];
log.i('listAreaModel: $listAreaModel');
jumlahArea = listAreaModel.length;
log.i('jumlahArea: $jumlahArea');
// log.i('myResponseModel: ${myResponseModel.data}');
KecamatanDetail kecamatanDetail =
KecamatanDetail.fromJson(myResponseModel.data);
// log.i('kecamatanDetail: ${kecamatanDetail.kecamatan}');
listKecamatanModel = kecamatanDetail.kecamatan ?? [];
jumlahArea = kecamatanDetail.jumlah!;
// log.i('jumlahArea: $jumlahArea');
status = true;
} catch (e) {
log.e(e.toString());
@ -38,13 +40,13 @@ class AreaTpsViewModel extends CustomBaseViewModel {
}
}
cekSuara(AreaModel areaModel) async {
cekSuara(KecamatanModel kecamatanModel) async {
await bottomSheetService.showCustomSheet(
data: areaModel.idArea,
data: kecamatanModel.kecamatanId,
barrierDismissible: true,
isScrollControlled: true,
title: 'Detail Suara Area ${areaModel.namaArea}',
description: 'Tim Survei',
title: 'Detail Suara Kecamatan ${kecamatanModel.name}',
description: 'Kecamatan',
ignoreSafeArea: false,
variant: BottomSheetType.detailSuaraBottomSheetView,
);

View File

@ -111,8 +111,27 @@ class LogSuaraView extends StatelessWidget {
model.listPemilih[i].namaPemilih!,
style: boldTextStyle,
),
subtitle: Text(
model.listPemilih[i].namaArea!,
subtitle: Column(
crossAxisAlignment:
CrossAxisAlignment.start,
children: [
CardWidget(
title: 'Tim',
value: model.listPemilih[i]
.namaTimSurvei!),
CardWidget(
title: 'Kec',
value: model
.listPemilih[i].kecamatan!),
CardWidget(
title: 'Kel / Desa',
value: model
.listPemilih[i].kelurahan!),
CardWidget(
title: 'TPS',
value: model.listPemilih[i].tps!
.toString()),
],
),
trailing: IconButton(
icon: const Icon(
@ -159,3 +178,48 @@ class LogSuaraView extends StatelessWidget {
);
}
}
class CardWidget extends StatelessWidget {
const CardWidget({
super.key,
required this.title,
required this.value,
});
final String title;
final String value;
@override
Widget build(BuildContext context) {
return Row(
children: [
Expanded(
flex: 3,
child: Text(
title,
style: italicTextStyle.copyWith(
fontSize: 12,
),
overflow: TextOverflow.ellipsis,
),
),
const Expanded(
flex: 1,
child: Text(
' : ',
),
),
Expanded(
flex: 6,
child: Text(
value,
style: boldTextStyle.copyWith(
fontSize: 12,
),
overflow: TextOverflow.ellipsis,
),
),
],
);
}
}

View File

@ -22,9 +22,9 @@ class LogSuaraViewModel extends CustomBaseViewModel {
try {
var response = await httpService.get('caleg/suara/$idCaleg');
MyResponseModel myResponseModel = MyResponseModel.fromJson(response.data);
PemilihDetailModel pemilihDetailModel =
PemilihDetailModel.fromJson(myResponseModel.data);
listPemilih = pemilihDetailModel.pemilihModel!;
PemilihDetail pemilihDetail =
PemilihDetail.fromJson(myResponseModel.data);
listPemilih = pemilihDetail.pemilihModel!;
counter = listPemilih.length;
status = true;

View File

@ -46,12 +46,12 @@ class PengaturanCalegView extends StatelessWidget {
background: warningColor,
),
const SizedBox(height: 10),
TopContainer(
title: 'Area\nTPS',
value: '${model.suaraCounter} TPS',
icon: Icons.location_on_outlined,
background: orangeColor,
),
// TopContainer(
// title: 'Area\nTPS',
// value: '${model.suaraCounter} TPS',
// icon: Icons.location_on_outlined,
// background: orangeColor,
// ),
const SizedBox(height: 10),
TopContainer(
title: 'Jumlah Tim Survei',

View File

@ -2,8 +2,8 @@ import 'package:flutter/material.dart';
import 'package:stacked/stacked.dart';
import 'package:stacked_services/stacked_services.dart';
import '../../../app/themes/app_colors.dart';
import '../../../app/themes/app_text.dart';
import '../../../../app/themes/app_colors.dart';
import '../../../../app/themes/app_text.dart';
import './detail_suara_bottom_sheet_view_model.dart';
class DetailSuaraBottomSheetView extends StatelessWidget {
@ -88,13 +88,22 @@ class DetailSuaraBottomSheetView extends StatelessWidget {
CrossAxisAlignment.start,
children: [
if (request!.description == 'Caleg')
Text(
model.listPemilih[i].namaTimSurvei!,
style: italicTextStyle,
),
Text(
model.listPemilih[i].namaArea!,
),
CardWidget(
title: 'Tim',
value: model
.listPemilih[i].namaTimSurvei!),
CardWidget(
title: 'Kec',
value:
model.listPemilih[i].kecamatan!),
CardWidget(
title: 'Kel / Desa',
value:
model.listPemilih[i].kelurahan!),
CardWidget(
title: 'TPS',
value: model.listPemilih[i].tps!
.toString()),
],
),
trailing: IconButton(
@ -139,3 +148,48 @@ class DetailSuaraBottomSheetView extends StatelessWidget {
);
}
}
class CardWidget extends StatelessWidget {
const CardWidget({
super.key,
required this.title,
required this.value,
});
final String title;
final String value;
@override
Widget build(BuildContext context) {
return Row(
children: [
Expanded(
flex: 3,
child: Text(
title,
style: italicTextStyle.copyWith(
fontSize: 12,
),
overflow: TextOverflow.ellipsis,
),
),
const Expanded(
flex: 1,
child: Text(
' : ',
),
),
Expanded(
flex: 6,
child: Text(
value,
style: boldTextStyle.copyWith(
fontSize: 12,
),
overflow: TextOverflow.ellipsis,
),
),
],
);
}
}

View File

@ -29,11 +29,11 @@ class DetailSuaraBottomSheetViewModel extends CustomBaseViewModel {
var response = await httpService.get(url);
MyResponseModel myResponseModel = MyResponseModel.fromJson(response.data);
PemilihDetailModel pemilihDetailModel =
PemilihDetailModel.fromJson(myResponseModel.data);
PemilihDetail pemilihDetail =
PemilihDetail.fromJson(myResponseModel.data);
listPemilih = pemilihDetailModel.pemilihModel!;
counter = pemilihDetailModel.jumlah!;
listPemilih = pemilihDetail.pemilihModel!;
counter = pemilihDetail.jumlah!;
this.status = true;
} catch (e) {
this.status = false;

View File

@ -41,69 +41,83 @@ class DetailSuaraPemilihBottomSheetView extends StatelessWidget {
topRight: Radius.circular(16.0),
),
),
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
Text(
request.title!,
style: boldTextStyle.copyWith(
fontSize: 16,
color: fontColor,
child: SingleChildScrollView(
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
Text(
request.title!,
style: boldTextStyle.copyWith(
fontSize: 16,
color: fontColor,
),
),
),
const SizedBox(height: 15),
Container(
height: 100,
width: 150,
decoration: BoxDecoration(
color: mainColor,
borderRadius: BorderRadius.circular(10),
),
child: GestureDetector(
onTap: () {
model.showImage(
context,
dotenv.env['url']! + request.data!.img!,
);
},
child: ClipRRect(
const SizedBox(height: 15),
Container(
height: 100,
width: 150,
decoration: BoxDecoration(
color: mainColor,
borderRadius: BorderRadius.circular(10),
child: Image.network(
dotenv.env['url']! + request.data!.img!,
fit: BoxFit.fill,
errorBuilder: (context, error, stackTrace) {
return const Center(
child: Icon(
Icons.error,
color: backgroundColor,
size: 50,
),
);
},
),
child: GestureDetector(
onTap: () {
model.showImage(
context,
dotenv.env['url']! + request.data!.img!,
);
},
child: ClipRRect(
borderRadius: BorderRadius.circular(10),
child: Image.network(
dotenv.env['url']! + request.data!.img!,
fit: BoxFit.fill,
errorBuilder: (context, error, stackTrace) {
return const Center(
child: Icon(
Icons.error,
color: backgroundColor,
size: 50,
),
);
},
),
),
),
),
),
_DetailChildWidget(
title: 'Nama',
value: request.data!.namaPemilih!,
),
_DetailChildWidget(
title: 'No KTP /\nNo HP',
value: request.data!.nikNomorHp!,
),
_DetailChildWidget(
title: 'Tanggal/\nWaktu',
value: model.myFunction
.convertDateTime2(request.data!.createdAt!),
),
_DetailChildWidget(
title: 'Caleg', value: request.data!.namaCaleg!),
_DetailChildWidget(
title: 'Tim Survei',
value: request.data!.namaTimSurvei!,
),
],
_DetailChildWidget(
title: 'Nama',
value: request.data!.namaPemilih!,
),
_DetailChildWidget(
title: 'No KTP /\nNo HP',
value: request.data!.nikNomorHp!,
),
_DetailChildWidget(
title: 'Tanggal/\nWaktu',
value: model.myFunction
.convertDateTime2(request.data!.createdAt!),
),
_DetailChildWidget(
title: 'Caleg', value: request.data!.namaCaleg!),
_DetailChildWidget(
title: 'Tim Survei',
value: request.data!.namaTimSurvei!,
),
_DetailChildWidget(
title: 'Kecamatan',
value: request.data!.kecamatan!,
),
_DetailChildWidget(
title: 'Kelurahan',
value: request.data!.kelurahan!,
),
_DetailChildWidget(
title: 'TPS',
value: request.data!.tps!.toString(),
),
],
),
),
),
);

View File

@ -25,15 +25,21 @@ class LoginScreenViewModel extends CustomBaseViewModel {
globalVar.backPressed = 'cantBack';
try {
// log.i('username: ${usernameController.text}');
// log.i('password: ${passwordController.text}');
var formData = FormData.fromMap({
'username': usernameController.text,
'password': passwordController.text,
});
// log.i('formData: $formData');
var response =
await httpService.postWithFormData('login/caleg', formData);
// log.i('response: ${response.data}');
MyResponseModel myResponseModel = MyResponseModel.fromJson(response.data);
var data = myResponseModel.data;
// log.i('data: $data');
CalegModel calegModel = CalegModel.fromJson(data);
// log.i('calegModel: ${calegModel.toJson()}');
await mySharedPrefs.setString('id', calegModel.idCaleg!.toString());