Perbarui tampilan di beberapa view untuk meningkatkan konsistensi dan pengalaman pengguna. Ganti penggunaan parameter key dengan super.key di beberapa widget. Tambahkan pengecekan null pada data pengaduan untuk mencegah kesalahan saat menampilkan informasi. Modifikasi beberapa metode untuk menyederhanakan kode dan meningkatkan keterbacaan.
This commit is contained in:
@ -16,7 +16,7 @@ import 'package:penyaluran_app/app/widgets/inputs/dropdown_input.dart';
|
||||
import 'package:penyaluran_app/app/widgets/inputs/text_input.dart';
|
||||
|
||||
class DetailPengaduanView extends GetView<PengaduanController> {
|
||||
const DetailPengaduanView({Key? key}) : super(key: key);
|
||||
const DetailPengaduanView({super.key});
|
||||
|
||||
// Definisi konstanta warna status untuk konsistensi
|
||||
static const Color statusMenungguColor = Colors.orange;
|
||||
@ -123,8 +123,9 @@ class DetailPengaduanView extends GetView<PengaduanController> {
|
||||
if (!snapshot.hasData) return const SizedBox();
|
||||
|
||||
final data = snapshot.data;
|
||||
if (data == null || data['pengaduan'] == null)
|
||||
if (data == null || data['pengaduan'] == null) {
|
||||
return const SizedBox();
|
||||
}
|
||||
|
||||
final pengaduan = PengaduanModel.fromJson(data['pengaduan']);
|
||||
|
||||
@ -1511,7 +1512,7 @@ class DetailPengaduanView extends GetView<PengaduanController> {
|
||||
} catch (e) {
|
||||
// Tutup loading dialog jika terjadi error
|
||||
Navigator.of(dialogContext, rootNavigator: true).pop();
|
||||
throw e;
|
||||
rethrow;
|
||||
}
|
||||
}
|
||||
} catch (e) {
|
||||
|
@ -3,7 +3,6 @@ import 'package:get/get.dart';
|
||||
import 'package:penyaluran_app/app/modules/petugas_desa/controllers/pengaduan_controller.dart';
|
||||
import 'package:penyaluran_app/app/theme/app_theme.dart';
|
||||
import 'package:penyaluran_app/app/utils/date_time_helper.dart';
|
||||
import 'package:penyaluran_app/app/routes/app_pages.dart';
|
||||
|
||||
class PengaduanView extends GetView<PengaduanController> {
|
||||
const PengaduanView({super.key});
|
||||
|
@ -111,78 +111,75 @@ class WargaDashboardController extends GetxController {
|
||||
)
|
||||
''').eq('warga_id', wargaId).order('created_at', ascending: false);
|
||||
|
||||
if (response != null) {
|
||||
final List<PenerimaPenyaluranModel> penerima = [];
|
||||
for (var item in response) {
|
||||
Map<String, dynamic> sanitizedPenerimaData =
|
||||
Map<String, dynamic>.from(item);
|
||||
final List<PenerimaPenyaluranModel> penerima = [];
|
||||
for (var item in response) {
|
||||
Map<String, dynamic> sanitizedPenerimaData =
|
||||
Map<String, dynamic>.from(item);
|
||||
|
||||
if (sanitizedPenerimaData['jumlah_bantuan'] is String) {
|
||||
var jumlahBantuan = double.tryParse(
|
||||
sanitizedPenerimaData['jumlah_bantuan'] as String);
|
||||
sanitizedPenerimaData['jumlah_bantuan'] = jumlahBantuan;
|
||||
}
|
||||
|
||||
// Tambahkan informasi apakah bantuan uang atau bukan dan satuan
|
||||
if (sanitizedPenerimaData['stok_bantuan'] != null) {
|
||||
// Cek apakah bantuan uang
|
||||
final isUang =
|
||||
sanitizedPenerimaData['stok_bantuan']['is_uang'] ?? false;
|
||||
sanitizedPenerimaData['is_uang'] = isUang;
|
||||
|
||||
// Ambil satuan
|
||||
final satuan =
|
||||
sanitizedPenerimaData['stok_bantuan']['satuan'] ?? '';
|
||||
sanitizedPenerimaData['satuan'] = satuan;
|
||||
|
||||
// Ambil nama kategori bantuan jika tersedia
|
||||
if (sanitizedPenerimaData['stok_bantuan']['kategori_bantuan'] !=
|
||||
null) {
|
||||
final kategoriNama = sanitizedPenerimaData['stok_bantuan']
|
||||
['kategori_bantuan']['nama'] ??
|
||||
'';
|
||||
sanitizedPenerimaData['kategori_nama'] = kategoriNama;
|
||||
}
|
||||
}
|
||||
|
||||
// Tambahkan informasi dari penyaluran bantuan
|
||||
if (sanitizedPenerimaData['penyaluran_bantuan'] != null) {
|
||||
// Ambil nama penyaluran
|
||||
final namaPenyaluran =
|
||||
sanitizedPenerimaData['penyaluran_bantuan']['nama'] ?? '';
|
||||
sanitizedPenerimaData['nama_penyaluran'] = namaPenyaluran;
|
||||
|
||||
// Ambil deskripsi penyaluran
|
||||
final deskripsiPenyaluran =
|
||||
sanitizedPenerimaData['penyaluran_bantuan']['deskripsi'] ?? '';
|
||||
sanitizedPenerimaData['deskripsi_penyaluran'] = deskripsiPenyaluran;
|
||||
|
||||
// Ambil lokasi penyaluran jika tersedia
|
||||
if (sanitizedPenerimaData['penyaluran_bantuan']
|
||||
['lokasi_penyaluran'] !=
|
||||
null) {
|
||||
final lokasiNama = sanitizedPenerimaData['penyaluran_bantuan']
|
||||
['lokasi_penyaluran']['nama'] ??
|
||||
'';
|
||||
sanitizedPenerimaData['lokasi_penyaluran_nama'] = lokasiNama;
|
||||
|
||||
final lokasiAlamat = sanitizedPenerimaData['penyaluran_bantuan']
|
||||
['lokasi_penyaluran']['alamat_lengkap'] ??
|
||||
'';
|
||||
sanitizedPenerimaData['lokasi_penyaluran_alamat'] = lokasiAlamat;
|
||||
}
|
||||
}
|
||||
|
||||
var model = PenerimaPenyaluranModel.fromJson(sanitizedPenerimaData);
|
||||
penerima.add(model);
|
||||
if (sanitizedPenerimaData['jumlah_bantuan'] is String) {
|
||||
var jumlahBantuan = double.tryParse(
|
||||
sanitizedPenerimaData['jumlah_bantuan'] as String);
|
||||
sanitizedPenerimaData['jumlah_bantuan'] = jumlahBantuan;
|
||||
}
|
||||
|
||||
penerimaPenyaluran.assignAll(penerima);
|
||||
// Tambahkan informasi apakah bantuan uang atau bukan dan satuan
|
||||
if (sanitizedPenerimaData['stok_bantuan'] != null) {
|
||||
// Cek apakah bantuan uang
|
||||
final isUang =
|
||||
sanitizedPenerimaData['stok_bantuan']['is_uang'] ?? false;
|
||||
sanitizedPenerimaData['is_uang'] = isUang;
|
||||
|
||||
var diterima =
|
||||
penerima.where((p) => p.statusPenerimaan == 'DITERIMA').length;
|
||||
totalPenyaluranDiterima.value = diterima;
|
||||
// Ambil satuan
|
||||
final satuan = sanitizedPenerimaData['stok_bantuan']['satuan'] ?? '';
|
||||
sanitizedPenerimaData['satuan'] = satuan;
|
||||
|
||||
// Ambil nama kategori bantuan jika tersedia
|
||||
if (sanitizedPenerimaData['stok_bantuan']['kategori_bantuan'] !=
|
||||
null) {
|
||||
final kategoriNama = sanitizedPenerimaData['stok_bantuan']
|
||||
['kategori_bantuan']['nama'] ??
|
||||
'';
|
||||
sanitizedPenerimaData['kategori_nama'] = kategoriNama;
|
||||
}
|
||||
}
|
||||
|
||||
// Tambahkan informasi dari penyaluran bantuan
|
||||
if (sanitizedPenerimaData['penyaluran_bantuan'] != null) {
|
||||
// Ambil nama penyaluran
|
||||
final namaPenyaluran =
|
||||
sanitizedPenerimaData['penyaluran_bantuan']['nama'] ?? '';
|
||||
sanitizedPenerimaData['nama_penyaluran'] = namaPenyaluran;
|
||||
|
||||
// Ambil deskripsi penyaluran
|
||||
final deskripsiPenyaluran =
|
||||
sanitizedPenerimaData['penyaluran_bantuan']['deskripsi'] ?? '';
|
||||
sanitizedPenerimaData['deskripsi_penyaluran'] = deskripsiPenyaluran;
|
||||
|
||||
// Ambil lokasi penyaluran jika tersedia
|
||||
if (sanitizedPenerimaData['penyaluran_bantuan']
|
||||
['lokasi_penyaluran'] !=
|
||||
null) {
|
||||
final lokasiNama = sanitizedPenerimaData['penyaluran_bantuan']
|
||||
['lokasi_penyaluran']['nama'] ??
|
||||
'';
|
||||
sanitizedPenerimaData['lokasi_penyaluran_nama'] = lokasiNama;
|
||||
|
||||
final lokasiAlamat = sanitizedPenerimaData['penyaluran_bantuan']
|
||||
['lokasi_penyaluran']['alamat_lengkap'] ??
|
||||
'';
|
||||
sanitizedPenerimaData['lokasi_penyaluran_alamat'] = lokasiAlamat;
|
||||
}
|
||||
}
|
||||
|
||||
var model = PenerimaPenyaluranModel.fromJson(sanitizedPenerimaData);
|
||||
penerima.add(model);
|
||||
}
|
||||
|
||||
penerimaPenyaluran.assignAll(penerima);
|
||||
|
||||
var diterima =
|
||||
penerima.where((p) => p.statusPenerimaan == 'DITERIMA').length;
|
||||
totalPenyaluranDiterima.value = diterima;
|
||||
} catch (e) {
|
||||
print('Error fetchPenerimaPenyaluran: $e');
|
||||
}
|
||||
@ -198,10 +195,6 @@ class WargaDashboardController extends GetxController {
|
||||
.eq('user_id', user!.id)
|
||||
.single();
|
||||
|
||||
if (wargaResponse == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
final wargaId = wargaResponse['id'];
|
||||
|
||||
final response = await _supabaseService.client
|
||||
@ -210,28 +203,26 @@ class WargaDashboardController extends GetxController {
|
||||
.eq('warga_id', wargaId)
|
||||
.order('created_at', ascending: false);
|
||||
|
||||
if (response != null) {
|
||||
final List<PengajuanKelayakanBantuanModel> pengajuan = [];
|
||||
for (var item in response) {
|
||||
// Konversi status ke enum
|
||||
if (item['status'] != null) {
|
||||
final statusStr = item['status'].toString();
|
||||
item['status'] = statusStr; // Pastikan status dalam format string
|
||||
}
|
||||
|
||||
pengajuan.add(PengajuanKelayakanBantuanModel.fromJson(item));
|
||||
final List<PengajuanKelayakanBantuanModel> pengajuan = [];
|
||||
for (var item in response) {
|
||||
// Konversi status ke enum
|
||||
if (item['status'] != null) {
|
||||
final statusStr = item['status'].toString();
|
||||
item['status'] = statusStr; // Pastikan status dalam format string
|
||||
}
|
||||
pengajuanKelayakan.assignAll(pengajuan);
|
||||
|
||||
// Hitung jumlah berdasarkan status
|
||||
totalPengajuanMenunggu.value =
|
||||
pengajuan.where((p) => p.status == StatusKelayakan.MENUNGGU).length;
|
||||
totalPengajuanTerverifikasi.value = pengajuan
|
||||
.where((p) => p.status == StatusKelayakan.TERVERIFIKASI)
|
||||
.length;
|
||||
totalPengajuanDitolak.value =
|
||||
pengajuan.where((p) => p.status == StatusKelayakan.DITOLAK).length;
|
||||
pengajuan.add(PengajuanKelayakanBantuanModel.fromJson(item));
|
||||
}
|
||||
pengajuanKelayakan.assignAll(pengajuan);
|
||||
|
||||
// Hitung jumlah berdasarkan status
|
||||
totalPengajuanMenunggu.value =
|
||||
pengajuan.where((p) => p.status == StatusKelayakan.MENUNGGU).length;
|
||||
totalPengajuanTerverifikasi.value = pengajuan
|
||||
.where((p) => p.status == StatusKelayakan.TERVERIFIKASI)
|
||||
.length;
|
||||
totalPengajuanDitolak.value =
|
||||
pengajuan.where((p) => p.status == StatusKelayakan.DITOLAK).length;
|
||||
} catch (e) {
|
||||
print('Error fetching pengajuan kelayakan: $e');
|
||||
}
|
||||
|
@ -13,7 +13,7 @@ import 'package:penyaluran_app/app/widgets/cards/info_card.dart';
|
||||
import 'dart:io';
|
||||
|
||||
class WargaDetailPengaduanView extends GetView<WargaDashboardController> {
|
||||
const WargaDetailPengaduanView({Key? key}) : super(key: key);
|
||||
const WargaDetailPengaduanView({super.key});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
@ -71,8 +71,9 @@ class WargaDetailPengaduanView extends GetView<WargaDashboardController> {
|
||||
if (!snapshot.hasData) return const SizedBox();
|
||||
|
||||
final data = snapshot.data;
|
||||
if (data == null || data['pengaduan'] == null)
|
||||
if (data == null || data['pengaduan'] == null) {
|
||||
return const SizedBox();
|
||||
}
|
||||
|
||||
final pengaduan = PengaduanModel.fromJson(data['pengaduan']);
|
||||
|
||||
@ -228,8 +229,7 @@ class WargaDetailPengaduanView extends GetView<WargaDashboardController> {
|
||||
}
|
||||
|
||||
// Dialog untuk menambahkan atau mengedit feedback
|
||||
void _showFeedbackDialog(BuildContext context, PengaduanModel pengaduan,
|
||||
{bool isEdit = false}) {
|
||||
void _showFeedbackDialog(BuildContext context, PengaduanModel pengaduan) {
|
||||
final formKey = GlobalKey<FormState>();
|
||||
final feedbackController =
|
||||
TextEditingController(text: pengaduan.feedbackWarga);
|
||||
@ -1084,8 +1084,7 @@ class WargaDetailPengaduanView extends GetView<WargaDashboardController> {
|
||||
class TambahTindakanPengaduanView extends StatefulWidget {
|
||||
final String pengaduanId;
|
||||
|
||||
const TambahTindakanPengaduanView({Key? key, required this.pengaduanId})
|
||||
: super(key: key);
|
||||
const TambahTindakanPengaduanView({super.key, required this.pengaduanId});
|
||||
|
||||
@override
|
||||
State<TambahTindakanPengaduanView> createState() =>
|
||||
|
@ -7,7 +7,7 @@ import 'package:penyaluran_app/app/widgets/bantuan_card.dart';
|
||||
import 'package:penyaluran_app/app/widgets/section_header.dart';
|
||||
|
||||
class WargaDashboardView extends GetView<WargaDashboardController> {
|
||||
const WargaDashboardView({Key? key}) : super(key: key);
|
||||
const WargaDashboardView({super.key});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
|
@ -7,7 +7,7 @@ import 'package:penyaluran_app/app/theme/app_theme.dart';
|
||||
import 'package:penyaluran_app/app/widgets/status_badge.dart';
|
||||
|
||||
class WargaDetailPenerimaanView extends GetView<WargaDashboardController> {
|
||||
const WargaDetailPenerimaanView({Key? key}) : super(key: key);
|
||||
const WargaDetailPenerimaanView({super.key});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
|
@ -4,7 +4,7 @@ import 'package:penyaluran_app/app/modules/warga/controllers/warga_dashboard_con
|
||||
import 'package:penyaluran_app/app/widgets/bantuan_card.dart';
|
||||
|
||||
class WargaPenerimaanView extends GetView<WargaDashboardController> {
|
||||
const WargaPenerimaanView({Key? key}) : super(key: key);
|
||||
const WargaPenerimaanView({super.key});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
@ -29,8 +29,8 @@ class WargaPenerimaanView extends GetView<WargaDashboardController> {
|
||||
Get.toNamed('/riwayat-penyaluran');
|
||||
},
|
||||
backgroundColor: Colors.blue,
|
||||
child: const Icon(Icons.history),
|
||||
tooltip: 'Riwayat Penerimaan',
|
||||
child: const Icon(Icons.history),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
@ -1,11 +1,10 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:intl/intl.dart';
|
||||
import 'package:penyaluran_app/app/modules/warga/controllers/warga_dashboard_controller.dart';
|
||||
import 'package:penyaluran_app/app/utils/date_time_helper.dart';
|
||||
|
||||
class WargaPengaduanView extends GetView<WargaDashboardController> {
|
||||
const WargaPengaduanView({Key? key}) : super(key: key);
|
||||
const WargaPengaduanView({super.key});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
|
@ -9,7 +9,7 @@ import 'package:penyaluran_app/app/widgets/app_bottom_navigation_bar.dart';
|
||||
import 'package:penyaluran_app/app/theme/app_theme.dart';
|
||||
|
||||
class WargaView extends GetView<WargaDashboardController> {
|
||||
const WargaView({Key? key}) : super(key: key);
|
||||
const WargaView({super.key});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
|
Reference in New Issue
Block a user