Perbarui logika pengambilan data penerima penyaluran di WargaDashboardController dengan menambahkan pengecekan ID pengguna dan logging untuk debugging. Modifikasi tampilan di WargaPenerimaanView dan WargaPengaduanView untuk meningkatkan pengalaman pengguna dengan menambahkan indikator refresh dan memperbaiki layout. Perbarui BantuanCard untuk menampilkan informasi dengan lebih baik dan menambahkan tombol aksi untuk detail. Implementasikan CustomScrollView untuk stabilitas tampilan yang lebih baik.
This commit is contained in:
@ -2,27 +2,27 @@ C/C++ Structured LogO
|
|||||||
M
|
M
|
||||||
KC:\dev\flutter\packages\flutter_tools\gradle\src\main\groovy\CMakeLists.txtC
|
KC:\dev\flutter\packages\flutter_tools\gradle\src\main\groovy\CMakeLists.txtC
|
||||||
A
|
A
|
||||||
?com.android.build.gradle.internal.cxx.io.EncodedFileFingerPrint <08><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2<18> <20><><EFBFBD><EFBFBD><EFBFBD>2<EFBFBD>
|
?com.android.build.gradle.internal.cxx.io.EncodedFileFingerPrint <08>ɚ<EFBFBD><EFBFBD>2<18> <20><><EFBFBD><EFBFBD><EFBFBD>2<EFBFBD>
|
||||||
|
|
||||||
}D:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\arm64-v8a\additional_project_files.txt <08><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2 <20><><EFBFBD><EFBFBD><EFBFBD>2~
|
}D:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\arm64-v8a\additional_project_files.txt <08>ɚ<EFBFBD><EFBFBD>2 <20><><EFBFBD><EFBFBD><EFBFBD>2~
|
||||||
|
|
|
|
||||||
zD:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\arm64-v8a\android_gradle_build.json <08><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2<18> <20><><EFBFBD><EFBFBD><EFBFBD>2<EFBFBD>
|
zD:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\arm64-v8a\android_gradle_build.json <08>ɚ<EFBFBD><EFBFBD>2<18> <20><><EFBFBD><EFBFBD><EFBFBD>2<EFBFBD>
|
||||||
<EFBFBD>
|
<EFBFBD>
|
||||||
D:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\arm64-v8a\android_gradle_build_mini.json <08><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2<18> <20><><EFBFBD><EFBFBD><EFBFBD>2p
|
D:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\arm64-v8a\android_gradle_build_mini.json <08>ɚ<EFBFBD><EFBFBD>2<18> <20><><EFBFBD><EFBFBD><EFBFBD>2p
|
||||||
n
|
n
|
||||||
lD:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\arm64-v8a\build.ninja <08><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2<18><> <20><><EFBFBD><EFBFBD><EFBFBD>2t
|
lD:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\arm64-v8a\build.ninja <08>ɚ<EFBFBD><EFBFBD>2<18><> <20><><EFBFBD><EFBFBD><EFBFBD>2t
|
||||||
r
|
r
|
||||||
pD:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\arm64-v8a\build.ninja.txt <08><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2y
|
pD:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\arm64-v8a\build.ninja.txt <08>ɚ<EFBFBD><EFBFBD>2y
|
||||||
w
|
w
|
||||||
uD:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\arm64-v8a\build_file_index.txt <08><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2
|
uD:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\arm64-v8a\build_file_index.txt <08>ɚ<EFBFBD><EFBFBD>2
|
||||||
K <20><><EFBFBD><EFBFBD><EFBFBD>2z
|
K <20><><EFBFBD><EFBFBD><EFBFBD>2z
|
||||||
x
|
x
|
||||||
vD:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\arm64-v8a\compile_commands.json <08>ɚ<EFBFBD><C99A>2 ~
|
vD:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\arm64-v8a\compile_commands.json <08>ɚ<EFBFBD><C99A>2 ~
|
||||||
|
|
|
|
||||||
zD:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\arm64-v8a\compile_commands.json.bin <08>ɚ<EFBFBD><C99A>2
|
zD:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\arm64-v8a\compile_commands.json.bin <08>ɚ<EFBFBD><C99A>2
|
||||||
<EFBFBD>
|
<EFBFBD>
|
||||||
<EFBFBD>
|
<EFBFBD>
|
||||||
<EFBFBD>D:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\arm64-v8a\metadata_generation_command.txt <08>ɚ<EFBFBD><C99A>2<18> <20><><EFBFBD><EFBFBD><EFBFBD>2w
|
<EFBFBD>D:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\arm64-v8a\metadata_generation_command.txt <08>ɚ<EFBFBD><C99A>2<18> <20><><EFBFBD><EFBFBD><EFBFBD>2w
|
||||||
u
|
u
|
||||||
sD:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\arm64-v8a\prefab_config.json <08>ɚ<EFBFBD><C99A>2
|
sD:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\arm64-v8a\prefab_config.json <08>ɚ<EFBFBD><C99A>2
|
||||||
( <20><><EFBFBD><EFBFBD><EFBFBD>2|
|
( <20><><EFBFBD><EFBFBD><EFBFBD>2|
|
@ -2,27 +2,27 @@ C/C++ Structured LogO
|
|||||||
M
|
M
|
||||||
KC:\dev\flutter\packages\flutter_tools\gradle\src\main\groovy\CMakeLists.txtC
|
KC:\dev\flutter\packages\flutter_tools\gradle\src\main\groovy\CMakeLists.txtC
|
||||||
A
|
A
|
||||||
?com.android.build.gradle.internal.cxx.io.EncodedFileFingerPrint <08><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2<18> <20><><EFBFBD><EFBFBD><EFBFBD>2<EFBFBD>
|
?com.android.build.gradle.internal.cxx.io.EncodedFileFingerPrint <08>Ԛ<EFBFBD><EFBFBD>2<18> <20><><EFBFBD><EFBFBD><EFBFBD>2<EFBFBD>
|
||||||
<EFBFBD>
|
<EFBFBD>
|
||||||
D:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\armeabi-v7a\additional_project_files.txt <08><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2 <20><><EFBFBD><EFBFBD><EFBFBD>2<EFBFBD>
|
D:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\armeabi-v7a\additional_project_files.txt <08>Ԛ<EFBFBD><EFBFBD>2 <20><><EFBFBD><EFBFBD><EFBFBD>2<EFBFBD>
|
||||||
~
|
~
|
||||||
|D:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\armeabi-v7a\android_gradle_build.json <08><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2<18> <20><><EFBFBD><EFBFBD><EFBFBD>2<EFBFBD>
|
|D:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\armeabi-v7a\android_gradle_build.json <08>Ԛ<EFBFBD><EFBFBD>2<18> <20><><EFBFBD><EFBFBD><EFBFBD>2<EFBFBD>
|
||||||
<EFBFBD>
|
<EFBFBD>
|
||||||
<EFBFBD>D:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\armeabi-v7a\android_gradle_build_mini.json <08><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2<18> <20><><EFBFBD><EFBFBD><EFBFBD>2r
|
<EFBFBD>D:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\armeabi-v7a\android_gradle_build_mini.json <08>Ԛ<EFBFBD><EFBFBD>2<18> <20><><EFBFBD><EFBFBD><EFBFBD>2r
|
||||||
p
|
p
|
||||||
nD:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\armeabi-v7a\build.ninja <08><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2<18><> <20><><EFBFBD><EFBFBD><EFBFBD>2v
|
nD:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\armeabi-v7a\build.ninja <08>Ԛ<EFBFBD><EFBFBD>2<18><> <20><><EFBFBD><EFBFBD><EFBFBD>2v
|
||||||
t
|
t
|
||||||
rD:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\armeabi-v7a\build.ninja.txt <08><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2{
|
rD:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\armeabi-v7a\build.ninja.txt <08>Ԛ<EFBFBD><EFBFBD>2{
|
||||||
y
|
y
|
||||||
wD:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\armeabi-v7a\build_file_index.txt <08><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2
|
wD:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\armeabi-v7a\build_file_index.txt <08>Ԛ<EFBFBD><EFBFBD>2
|
||||||
K <20><><EFBFBD><EFBFBD><EFBFBD>2|
|
K <20><><EFBFBD><EFBFBD><EFBFBD>2|
|
||||||
z
|
z
|
||||||
xD:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\armeabi-v7a\compile_commands.json <08>Ԛ<EFBFBD><D49A>2 <09>
|
xD:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\armeabi-v7a\compile_commands.json <08>Ԛ<EFBFBD><D49A>2 <09>
|
||||||
~
|
~
|
||||||
|D:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\armeabi-v7a\compile_commands.json.bin <08>Ԛ<EFBFBD><D49A>2
|
|D:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\armeabi-v7a\compile_commands.json.bin <08>Ԛ<EFBFBD><D49A>2
|
||||||
<EFBFBD>
|
<EFBFBD>
|
||||||
<EFBFBD>
|
<EFBFBD>
|
||||||
<EFBFBD>D:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\armeabi-v7a\metadata_generation_command.txt <08>Ԛ<EFBFBD><D49A>2<18> <20><><EFBFBD><EFBFBD><EFBFBD>2y
|
<EFBFBD>D:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\armeabi-v7a\metadata_generation_command.txt <08>Ԛ<EFBFBD><D49A>2<18> <20><><EFBFBD><EFBFBD><EFBFBD>2y
|
||||||
w
|
w
|
||||||
uD:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\armeabi-v7a\prefab_config.json <08>Ԛ<EFBFBD><D49A>2
|
uD:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\armeabi-v7a\prefab_config.json <08>Ԛ<EFBFBD><D49A>2
|
||||||
( <20><><EFBFBD><EFBFBD><EFBFBD>2~
|
( <20><><EFBFBD><EFBFBD><EFBFBD>2~
|
@ -2,27 +2,27 @@ C/C++ Structured LogO
|
|||||||
M
|
M
|
||||||
KC:\dev\flutter\packages\flutter_tools\gradle\src\main\groovy\CMakeLists.txtC
|
KC:\dev\flutter\packages\flutter_tools\gradle\src\main\groovy\CMakeLists.txtC
|
||||||
A
|
A
|
||||||
?com.android.build.gradle.internal.cxx.io.EncodedFileFingerPrint ؔ<EFBFBD><EFBFBD><EFBFBD>2<18> <20><><EFBFBD><EFBFBD><EFBFBD>2{
|
?com.android.build.gradle.internal.cxx.io.EncodedFileFingerPrint <08>ښ<EFBFBD><EFBFBD>2<18> <20><><EFBFBD><EFBFBD><EFBFBD>2{
|
||||||
y
|
y
|
||||||
wD:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\x86\additional_project_files.txt ؔ<EFBFBD><EFBFBD><EFBFBD>2 <20><><EFBFBD><EFBFBD><EFBFBD>2x
|
wD:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\x86\additional_project_files.txt <08>ښ<EFBFBD><EFBFBD>2 <20><><EFBFBD><EFBFBD><EFBFBD>2x
|
||||||
v
|
v
|
||||||
tD:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\x86\android_gradle_build.json ؔ<EFBFBD><EFBFBD><EFBFBD>2<18> <20><><EFBFBD><EFBFBD><EFBFBD>2}
|
tD:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\x86\android_gradle_build.json <08>ښ<EFBFBD><EFBFBD>2<18> <20><><EFBFBD><EFBFBD><EFBFBD>2}
|
||||||
{
|
{
|
||||||
yD:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\x86\android_gradle_build_mini.json ؔ<EFBFBD><EFBFBD><EFBFBD>2<18> <20><><EFBFBD><EFBFBD><EFBFBD>2j
|
yD:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\x86\android_gradle_build_mini.json <08>ښ<EFBFBD><EFBFBD>2<18> <20><><EFBFBD><EFBFBD><EFBFBD>2j
|
||||||
h
|
h
|
||||||
fD:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\x86\build.ninja ؔ<EFBFBD><EFBFBD><EFBFBD>2<18><> <20><><EFBFBD><EFBFBD><EFBFBD>2n
|
fD:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\x86\build.ninja <08>ښ<EFBFBD><EFBFBD>2<18><> <20><><EFBFBD><EFBFBD><EFBFBD>2n
|
||||||
l
|
l
|
||||||
jD:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\x86\build.ninja.txt ؔ<EFBFBD><EFBFBD><EFBFBD>2s
|
jD:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\x86\build.ninja.txt <08>ښ<EFBFBD><EFBFBD>2s
|
||||||
q
|
q
|
||||||
oD:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\x86\build_file_index.txt ؔ<EFBFBD><EFBFBD><EFBFBD>2
|
oD:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\x86\build_file_index.txt <08>ښ<EFBFBD><EFBFBD>2
|
||||||
K <20><><EFBFBD><EFBFBD><EFBFBD>2t
|
K <20><><EFBFBD><EFBFBD><EFBFBD>2t
|
||||||
r
|
r
|
||||||
pD:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\x86\compile_commands.json <08>ښ<EFBFBD><DA9A>2 x
|
pD:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\x86\compile_commands.json <08>ښ<EFBFBD><DA9A>2 x
|
||||||
v
|
v
|
||||||
tD:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\x86\compile_commands.json.bin <08>ښ<EFBFBD><DA9A>2
|
tD:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\x86\compile_commands.json.bin <08>ښ<EFBFBD><DA9A>2
|
||||||
~
|
~
|
||||||
|
|
|
|
||||||
zD:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\x86\metadata_generation_command.txt <08>ښ<EFBFBD><DA9A>2<18> <20><><EFBFBD><EFBFBD><EFBFBD>2q
|
zD:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\x86\metadata_generation_command.txt <08>ښ<EFBFBD><DA9A>2<18> <20><><EFBFBD><EFBFBD><EFBFBD>2q
|
||||||
o
|
o
|
||||||
mD:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\x86\prefab_config.json <08>ښ<EFBFBD><DA9A>2
|
mD:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\x86\prefab_config.json <08>ښ<EFBFBD><DA9A>2
|
||||||
( <20><><EFBFBD><EFBFBD><EFBFBD>2v
|
( <20><><EFBFBD><EFBFBD><EFBFBD>2v
|
@ -2,27 +2,27 @@ C/C++ Structured LogO
|
|||||||
M
|
M
|
||||||
KC:\dev\flutter\packages\flutter_tools\gradle\src\main\groovy\CMakeLists.txtC
|
KC:\dev\flutter\packages\flutter_tools\gradle\src\main\groovy\CMakeLists.txtC
|
||||||
A
|
A
|
||||||
?com.android.build.gradle.internal.cxx.io.EncodedFileFingerPrint <08><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2<18> <20><><EFBFBD><EFBFBD><EFBFBD>2~
|
?com.android.build.gradle.internal.cxx.io.EncodedFileFingerPrint <08>ߚ<EFBFBD><EFBFBD>2<18> <20><><EFBFBD><EFBFBD><EFBFBD>2~
|
||||||
|
|
|
|
||||||
zD:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\x86_64\additional_project_files.txt <08><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2 <20><><EFBFBD><EFBFBD><EFBFBD>2{
|
zD:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\x86_64\additional_project_files.txt <08>ߚ<EFBFBD><EFBFBD>2 <20><><EFBFBD><EFBFBD><EFBFBD>2{
|
||||||
y
|
y
|
||||||
wD:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\x86_64\android_gradle_build.json <08><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2<18> <20><><EFBFBD><EFBFBD><EFBFBD>2<EFBFBD>
|
wD:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\x86_64\android_gradle_build.json <08>ߚ<EFBFBD><EFBFBD>2<18> <20><><EFBFBD><EFBFBD><EFBFBD>2<EFBFBD>
|
||||||
~
|
~
|
||||||
|D:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\x86_64\android_gradle_build_mini.json <08><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2<18> <20><><EFBFBD><EFBFBD><EFBFBD>2m
|
|D:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\x86_64\android_gradle_build_mini.json <08>ߚ<EFBFBD><EFBFBD>2<18> <20><><EFBFBD><EFBFBD><EFBFBD>2m
|
||||||
k
|
k
|
||||||
iD:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\x86_64\build.ninja <08><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2<18><> <20><><EFBFBD><EFBFBD><EFBFBD>2q
|
iD:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\x86_64\build.ninja <08>ߚ<EFBFBD><EFBFBD>2<18><> <20><><EFBFBD><EFBFBD><EFBFBD>2q
|
||||||
o
|
o
|
||||||
mD:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\x86_64\build.ninja.txt <08><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2v
|
mD:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\x86_64\build.ninja.txt <08>ߚ<EFBFBD><EFBFBD>2v
|
||||||
t
|
t
|
||||||
rD:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\x86_64\build_file_index.txt <08><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2
|
rD:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\x86_64\build_file_index.txt <08>ߚ<EFBFBD><EFBFBD>2
|
||||||
K <20><><EFBFBD><EFBFBD><EFBFBD>2w
|
K <20><><EFBFBD><EFBFBD><EFBFBD>2w
|
||||||
u
|
u
|
||||||
sD:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\x86_64\compile_commands.json <08>ߚ<EFBFBD><DF9A>2 {
|
sD:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\x86_64\compile_commands.json <08>ߚ<EFBFBD><DF9A>2 {
|
||||||
y
|
y
|
||||||
wD:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\x86_64\compile_commands.json.bin <08>ߚ<EFBFBD><DF9A>2
|
wD:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\x86_64\compile_commands.json.bin <08>ߚ<EFBFBD><DF9A>2
|
||||||
<EFBFBD>
|
<EFBFBD>
|
||||||
|
|
||||||
}D:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\x86_64\metadata_generation_command.txt <08>ߚ<EFBFBD><DF9A>2<18> <20><><EFBFBD><EFBFBD><EFBFBD>2t
|
}D:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\x86_64\metadata_generation_command.txt <08>ߚ<EFBFBD><DF9A>2<18> <20><><EFBFBD><EFBFBD><EFBFBD>2t
|
||||||
r
|
r
|
||||||
pD:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\x86_64\prefab_config.json <08><><EFBFBD><EFBFBD><EFBFBD>2
|
pD:\KULIAH\Matkul\SKRIPSI\penyaluran_app\penyaluran_app\android\app\.cxx\Debug\626b5o2n\x86_64\prefab_config.json <08><><EFBFBD><EFBFBD><EFBFBD>2
|
||||||
( <20><><EFBFBD><EFBFBD><EFBFBD>2y
|
( <20><><EFBFBD><EFBFBD><EFBFBD>2y
|
@ -211,8 +211,18 @@ class WargaDashboardController extends GetxController {
|
|||||||
// Reset data terlebih dahulu untuk memastikan tidak ada data lama yang tersimpan
|
// Reset data terlebih dahulu untuk memastikan tidak ada data lama yang tersimpan
|
||||||
penerimaPenyaluran.clear();
|
penerimaPenyaluran.clear();
|
||||||
|
|
||||||
|
// Log untuk debugging
|
||||||
|
print('DEBUG PENERIMAAN: Memulai fetchPenerimaPenyaluran()');
|
||||||
|
|
||||||
|
// Pastikan user sudah login dan memiliki ID
|
||||||
|
if (user?.id == null) {
|
||||||
|
print('DEBUG PENERIMAAN: User ID null, tidak bisa mengambil data');
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
|
||||||
// Gunakan langsung ID pengguna sebagai warga_id
|
// Gunakan langsung ID pengguna sebagai warga_id
|
||||||
final wargaId = user!.id;
|
final wargaId = user!.id;
|
||||||
|
print('DEBUG PENERIMAAN: Mengambil data untuk warga ID: $wargaId');
|
||||||
|
|
||||||
// Ambil data penerima penyaluran dengan join ke warga, stok bantuan, dan penyaluran bantuan
|
// Ambil data penerima penyaluran dengan join ke warga, stok bantuan, dan penyaluran bantuan
|
||||||
final response =
|
final response =
|
||||||
@ -230,105 +240,126 @@ class WargaDashboardController extends GetxController {
|
|||||||
)
|
)
|
||||||
''').eq('warga_id', wargaId).order('created_at', ascending: false);
|
''').eq('warga_id', wargaId).order('created_at', ascending: false);
|
||||||
|
|
||||||
|
print(
|
||||||
|
'DEBUG PENERIMAAN: Respons diterima dengan ${response.length} item');
|
||||||
|
|
||||||
final List<PenerimaPenyaluranModel> penerima = [];
|
final List<PenerimaPenyaluranModel> penerima = [];
|
||||||
|
|
||||||
// Loop melalui setiap data penerima
|
// Loop melalui setiap data penerima
|
||||||
for (var item in response) {
|
for (var item in response) {
|
||||||
// Pastikan data penerima sesuai dengan tipe data yang diharapkan
|
try {
|
||||||
Map<String, dynamic> sanitizedPenerimaData =
|
// Pastikan data penerima sesuai dengan tipe data yang diharapkan
|
||||||
Map<String, dynamic>.from(item);
|
Map<String, dynamic> sanitizedPenerimaData =
|
||||||
|
Map<String, dynamic>.from(item);
|
||||||
|
|
||||||
// Konversi jumlah_bantuan ke double jika bertipe String
|
// Konversi jumlah_bantuan ke double jika bertipe String
|
||||||
if (sanitizedPenerimaData['jumlah_bantuan'] is String) {
|
if (sanitizedPenerimaData['jumlah_bantuan'] is String) {
|
||||||
sanitizedPenerimaData['jumlah_bantuan'] =
|
sanitizedPenerimaData['jumlah_bantuan'] =
|
||||||
double.tryParse(sanitizedPenerimaData['jumlah_bantuan']) ?? 0.0;
|
double.tryParse(sanitizedPenerimaData['jumlah_bantuan']) ?? 0.0;
|
||||||
}
|
|
||||||
|
|
||||||
// Ambil data dari stok bantuan jika tersedia
|
|
||||||
if (sanitizedPenerimaData['stok_bantuan'] != null) {
|
|
||||||
// Cek apakah bantuan berupa uang atau barang
|
|
||||||
final isUang =
|
|
||||||
sanitizedPenerimaData['stok_bantuan']['is_uang'] ?? false;
|
|
||||||
sanitizedPenerimaData['is_uang'] = isUang;
|
|
||||||
|
|
||||||
// Ambil satuan bantuan
|
|
||||||
final satuan = sanitizedPenerimaData['stok_bantuan']['satuan'] ?? '';
|
|
||||||
sanitizedPenerimaData['satuan'] = satuan;
|
|
||||||
|
|
||||||
// Ambil nama kategori bantuan
|
|
||||||
if (sanitizedPenerimaData['stok_bantuan']['kategori_bantuan'] !=
|
|
||||||
null) {
|
|
||||||
final kategoriNama = sanitizedPenerimaData['stok_bantuan']
|
|
||||||
['kategori_bantuan']['nama'] ??
|
|
||||||
'';
|
|
||||||
sanitizedPenerimaData['kategori_nama'] = kategoriNama;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Ambil data dari penyaluran bantuan jika tersedia
|
|
||||||
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 status penyaluran
|
|
||||||
final statusPenyaluran =
|
|
||||||
sanitizedPenerimaData['penyaluran_bantuan']['status'] ?? '';
|
|
||||||
sanitizedPenerimaData['status_penyaluran'] = statusPenyaluran;
|
|
||||||
|
|
||||||
// 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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Ambil kategori bantuan dari relasi langsung jika ada
|
// Ambil data dari stok bantuan jika tersedia
|
||||||
if (sanitizedPenerimaData['penyaluran_bantuan']['kategori_bantuan'] !=
|
if (sanitizedPenerimaData['stok_bantuan'] != null) {
|
||||||
null) {
|
// Cek apakah bantuan berupa uang atau barang
|
||||||
final kategoriNama = sanitizedPenerimaData['penyaluran_bantuan']
|
final isUang =
|
||||||
['kategori_bantuan']['nama'] ??
|
sanitizedPenerimaData['stok_bantuan']['is_uang'] ?? false;
|
||||||
'';
|
sanitizedPenerimaData['is_uang'] = isUang;
|
||||||
// Jika belum ada kategori_nama dari stok_bantuan, gunakan dari relasi langsung
|
|
||||||
if (sanitizedPenerimaData['kategori_nama'] == null ||
|
// Ambil satuan bantuan
|
||||||
sanitizedPenerimaData['kategori_nama'].isEmpty) {
|
final satuan =
|
||||||
|
sanitizedPenerimaData['stok_bantuan']['satuan'] ?? '';
|
||||||
|
sanitizedPenerimaData['satuan'] = satuan;
|
||||||
|
|
||||||
|
// Ambil nama kategori bantuan
|
||||||
|
if (sanitizedPenerimaData['stok_bantuan']['kategori_bantuan'] !=
|
||||||
|
null) {
|
||||||
|
final kategoriNama = sanitizedPenerimaData['stok_bantuan']
|
||||||
|
['kategori_bantuan']['nama'] ??
|
||||||
|
'';
|
||||||
sanitizedPenerimaData['kategori_nama'] = kategoriNama;
|
sanitizedPenerimaData['kategori_nama'] = kategoriNama;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
var model = PenerimaPenyaluranModel.fromJson(sanitizedPenerimaData);
|
// Ambil data dari penyaluran bantuan jika tersedia
|
||||||
penerima.add(model);
|
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 status penyaluran
|
||||||
|
final statusPenyaluran =
|
||||||
|
sanitizedPenerimaData['penyaluran_bantuan']['status'] ?? '';
|
||||||
|
sanitizedPenerimaData['status_penyaluran'] = statusPenyaluran;
|
||||||
|
|
||||||
|
// 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;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Ambil kategori bantuan dari relasi langsung jika ada
|
||||||
|
if (sanitizedPenerimaData['penyaluran_bantuan']
|
||||||
|
['kategori_bantuan'] !=
|
||||||
|
null) {
|
||||||
|
final kategoriNama = sanitizedPenerimaData['penyaluran_bantuan']
|
||||||
|
['kategori_bantuan']['nama'] ??
|
||||||
|
'';
|
||||||
|
// Jika belum ada kategori_nama dari stok_bantuan, gunakan dari relasi langsung
|
||||||
|
if (sanitizedPenerimaData['kategori_nama'] == null ||
|
||||||
|
sanitizedPenerimaData['kategori_nama'].isEmpty) {
|
||||||
|
sanitizedPenerimaData['kategori_nama'] = kategoriNama;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var model = PenerimaPenyaluranModel.fromJson(sanitizedPenerimaData);
|
||||||
|
penerima.add(model);
|
||||||
|
print('DEBUG PENERIMAAN: Berhasil parse item: ${model.id}');
|
||||||
|
} catch (parseError) {
|
||||||
|
print('DEBUG PENERIMAAN: Error parsing item: $parseError');
|
||||||
|
print('DEBUG PENERIMAAN: Data yang gagal di-parse: $item');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Update nilai observable
|
// Pastikan list tidak kosong sebelum assign
|
||||||
penerimaPenyaluran.assignAll(penerima);
|
if (penerima.isNotEmpty) {
|
||||||
|
// Update nilai observable
|
||||||
|
penerimaPenyaluran.assignAll(penerima);
|
||||||
|
print(
|
||||||
|
'DEBUG PENERIMAAN: Berhasil assign ${penerima.length} item ke list');
|
||||||
|
|
||||||
var diterima =
|
var diterima =
|
||||||
penerima.where((p) => p.statusPenerimaan == 'DITERIMA').length;
|
penerima.where((p) => p.statusPenerimaan == 'DITERIMA').length;
|
||||||
totalPenyaluranDiterima.value = diterima;
|
totalPenyaluranDiterima.value = diterima;
|
||||||
|
|
||||||
// Log untuk debugging
|
// Log untuk debugging
|
||||||
print(
|
print(
|
||||||
'Berhasil memuat ${penerima.length} data penerimaan untuk warga ID: $wargaId');
|
'Berhasil memuat ${penerima.length} data penerimaan untuk warga ID: $wargaId');
|
||||||
|
} else {
|
||||||
|
print(
|
||||||
|
'DEBUG PENERIMAAN: Tidak ada data penerimaan yang berhasil di-parse');
|
||||||
|
}
|
||||||
|
|
||||||
return penerima;
|
return penerima;
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
print('Error fetchPenerimaPenyaluran: $e');
|
print('Error fetchPenerimaPenyaluran: $e');
|
||||||
|
// Pastikan list kosong jika terjadi error
|
||||||
|
penerimaPenyaluran.clear();
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -15,13 +15,28 @@ class WargaPenerimaanView extends GetView<WargaDashboardController> {
|
|||||||
return const Center(child: CircularProgressIndicator());
|
return const Center(child: CircularProgressIndicator());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Debug print untuk melihat jumlah item
|
||||||
|
print(
|
||||||
|
'DEBUG: Jumlah penerimaan tersedia: ${controller.penerimaPenyaluran.length}');
|
||||||
|
|
||||||
return RefreshIndicator(
|
return RefreshIndicator(
|
||||||
onRefresh: () async {
|
onRefresh: () async {
|
||||||
controller.fetchData();
|
// Tambahkan delay untuk memastikan refresh indicator terlihat
|
||||||
|
await Future.delayed(const Duration(milliseconds: 300));
|
||||||
|
controller.fetchPenerimaPenyaluran();
|
||||||
},
|
},
|
||||||
child: controller.penerimaPenyaluran.isEmpty
|
child: controller.penerimaPenyaluran.isEmpty
|
||||||
? _buildEmptyState()
|
? ListView(
|
||||||
: _buildPenerimaanList(),
|
physics: const AlwaysScrollableScrollPhysics(),
|
||||||
|
children: [
|
||||||
|
SizedBox(
|
||||||
|
height: Get.height *
|
||||||
|
0.7, // Pastikan tinggi cukup untuk memungkinkan scroll
|
||||||
|
child: _buildEmptyState(),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
)
|
||||||
|
: _buildPenerimaanList(context),
|
||||||
);
|
);
|
||||||
}),
|
}),
|
||||||
);
|
);
|
||||||
@ -86,21 +101,48 @@ class WargaPenerimaanView extends GetView<WargaDashboardController> {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
Widget _buildPenerimaanList() {
|
Widget _buildPenerimaanList(BuildContext context) {
|
||||||
return ListView.builder(
|
// Debug print untuk melihat jumlah item
|
||||||
padding: const EdgeInsets.all(16),
|
print(
|
||||||
itemCount: controller.penerimaPenyaluran.length,
|
'DEBUG: Membangun ListView dengan ${controller.penerimaPenyaluran.length} item bantuan');
|
||||||
itemBuilder: (context, index) {
|
|
||||||
final item = controller.penerimaPenyaluran[index];
|
|
||||||
|
|
||||||
return BantuanCard(
|
// Menggunakan CustomScrollView dan SliverList untuk layout yang lebih stabil
|
||||||
item: item,
|
return CustomScrollView(
|
||||||
onTap: () {
|
physics: const AlwaysScrollableScrollPhysics(),
|
||||||
// Navigasi ke detail penerimaan
|
slivers: [
|
||||||
Get.toNamed('/warga/detail-penerimaan', arguments: {'id': item.id});
|
SliverPadding(
|
||||||
},
|
padding: const EdgeInsets.all(16),
|
||||||
);
|
sliver: SliverList(
|
||||||
},
|
delegate: SliverChildBuilderDelegate(
|
||||||
|
(context, index) {
|
||||||
|
// Pastikan index dalam batas array
|
||||||
|
if (index >= controller.penerimaPenyaluran.length) {
|
||||||
|
return const SizedBox.shrink();
|
||||||
|
}
|
||||||
|
|
||||||
|
final item = controller.penerimaPenyaluran[index];
|
||||||
|
|
||||||
|
// Debug
|
||||||
|
print('DEBUG: Membangun item $index dengan id: ${item.id}');
|
||||||
|
|
||||||
|
// Menggunakan SizedBox untuk memberikan batas lebar dan tinggi
|
||||||
|
return SizedBox(
|
||||||
|
width: MediaQuery.of(context).size.width,
|
||||||
|
child: BantuanCard(
|
||||||
|
item: item,
|
||||||
|
onTap: () {
|
||||||
|
// Navigasi ke detail penerimaan
|
||||||
|
Get.toNamed('/warga/detail-penerimaan',
|
||||||
|
arguments: {'id': item.id});
|
||||||
|
},
|
||||||
|
),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
childCount: controller.penerimaPenyaluran.length,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -13,13 +13,26 @@ class WargaPengaduanView extends GetView<WargaDashboardController> {
|
|||||||
return const Center(child: CircularProgressIndicator());
|
return const Center(child: CircularProgressIndicator());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Debug print untuk melihat jumlah item
|
||||||
|
print('DEBUG: Jumlah pengaduan tersedia: ${controller.pengaduan.length}');
|
||||||
|
|
||||||
return RefreshIndicator(
|
return RefreshIndicator(
|
||||||
onRefresh: () async {
|
onRefresh: () async {
|
||||||
|
// Tambahkan delay untuk memastikan refresh indicator terlihat
|
||||||
|
await Future.delayed(const Duration(milliseconds: 300));
|
||||||
controller.fetchData();
|
controller.fetchData();
|
||||||
},
|
},
|
||||||
child: controller.pengaduan.isEmpty
|
child: controller.pengaduan.isEmpty
|
||||||
? _buildEmptyState()
|
? ListView(
|
||||||
: _buildPengaduanList(),
|
physics: const AlwaysScrollableScrollPhysics(),
|
||||||
|
children: [
|
||||||
|
SizedBox(
|
||||||
|
height: Get.height * 0.7,
|
||||||
|
child: _buildEmptyState(),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
)
|
||||||
|
: _buildPengaduanList(context),
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -56,195 +69,414 @@ class WargaPengaduanView extends GetView<WargaDashboardController> {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
Widget _buildPengaduanList() {
|
Widget _buildPengaduanList(BuildContext context) {
|
||||||
return ListView.builder(
|
// Log untuk debugging jumlah item
|
||||||
padding: const EdgeInsets.all(16),
|
print(
|
||||||
itemCount: controller.pengaduan.length,
|
'DEBUG: Membangun ListView dengan ${controller.pengaduan.length} pengaduan');
|
||||||
itemBuilder: (context, index) {
|
|
||||||
final item = controller.pengaduan[index];
|
|
||||||
|
|
||||||
// Tentukan status dan warna berdasarkan status pengaduan
|
// Menggunakan CustomScrollView untuk layout yang lebih stabil
|
||||||
Color statusColor;
|
return CustomScrollView(
|
||||||
String statusText;
|
physics: const AlwaysScrollableScrollPhysics(),
|
||||||
|
slivers: [
|
||||||
|
SliverPadding(
|
||||||
|
padding: const EdgeInsets.all(16),
|
||||||
|
sliver: SliverList(
|
||||||
|
delegate: SliverChildBuilderDelegate(
|
||||||
|
(context, index) {
|
||||||
|
// Pastikan index valid
|
||||||
|
if (index >= controller.pengaduan.length) {
|
||||||
|
return const SizedBox.shrink();
|
||||||
|
}
|
||||||
|
|
||||||
switch (item.status?.toUpperCase()) {
|
final item = controller.pengaduan[index];
|
||||||
case 'MENUNGGU':
|
print(
|
||||||
statusColor = Colors.orange;
|
'DEBUG: Membangun item pengaduan $index dengan id: ${item.id}');
|
||||||
statusText = 'Menunggu';
|
|
||||||
break;
|
|
||||||
case 'TINDAKAN':
|
|
||||||
statusColor = Colors.blue;
|
|
||||||
statusText = 'Tindakan';
|
|
||||||
break;
|
|
||||||
case 'SELESAI':
|
|
||||||
statusColor = Colors.green;
|
|
||||||
statusText = 'Selesai';
|
|
||||||
break;
|
|
||||||
case 'DITOLAK':
|
|
||||||
statusColor = Colors.red;
|
|
||||||
statusText = 'Ditolak';
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
statusColor = Colors.grey;
|
|
||||||
statusText = item.status ?? 'Tidak Diketahui';
|
|
||||||
}
|
|
||||||
|
|
||||||
return Card(
|
// Tentukan status dan warna berdasarkan status pengaduan
|
||||||
margin: const EdgeInsets.only(bottom: 16),
|
Color statusColor;
|
||||||
shape: RoundedRectangleBorder(
|
String statusText;
|
||||||
borderRadius: BorderRadius.circular(12),
|
|
||||||
),
|
switch (item.status?.toUpperCase()) {
|
||||||
elevation: 2,
|
case 'MENUNGGU':
|
||||||
child: InkWell(
|
statusColor = Colors.orange;
|
||||||
onTap: () {
|
statusText = 'Menunggu';
|
||||||
// Navigasi ke detail pengaduan
|
break;
|
||||||
Get.toNamed('/warga/detail-pengaduan',
|
case 'TINDAKAN':
|
||||||
arguments: {'id': item.id});
|
statusColor = Colors.blue;
|
||||||
},
|
statusText = 'Tindakan';
|
||||||
borderRadius: BorderRadius.circular(12),
|
break;
|
||||||
child: Padding(
|
case 'SELESAI':
|
||||||
padding: const EdgeInsets.all(16),
|
statusColor = Colors.green;
|
||||||
child: Column(
|
statusText = 'Selesai';
|
||||||
crossAxisAlignment: CrossAxisAlignment.start,
|
break;
|
||||||
children: [
|
case 'DITOLAK':
|
||||||
Row(
|
statusColor = Colors.red;
|
||||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
statusText = 'Ditolak';
|
||||||
children: [
|
break;
|
||||||
Expanded(
|
default:
|
||||||
child: Text(
|
statusColor = Colors.grey;
|
||||||
item.judul ?? 'Pengaduan #${index + 1}',
|
statusText = item.status ?? 'Tidak Diketahui';
|
||||||
style: const TextStyle(
|
}
|
||||||
fontSize: 18,
|
|
||||||
fontWeight: FontWeight.bold,
|
// Menggunakan SizedBox untuk memberikan batas lebar yang jelas
|
||||||
),
|
return SizedBox(
|
||||||
maxLines: 1,
|
width: MediaQuery.of(context).size.width,
|
||||||
overflow: TextOverflow.ellipsis,
|
child: Card(
|
||||||
),
|
margin: const EdgeInsets.only(bottom: 16),
|
||||||
),
|
shape: RoundedRectangleBorder(
|
||||||
Container(
|
borderRadius: BorderRadius.circular(12),
|
||||||
padding: const EdgeInsets.symmetric(
|
side: BorderSide(
|
||||||
horizontal: 12,
|
color: statusColor.withOpacity(0.3),
|
||||||
vertical: 6,
|
width: 1,
|
||||||
),
|
|
||||||
decoration: BoxDecoration(
|
|
||||||
color: statusColor.withOpacity(0.1),
|
|
||||||
borderRadius: BorderRadius.circular(20),
|
|
||||||
border: Border.all(
|
|
||||||
color: statusColor,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
child: Text(
|
|
||||||
statusText,
|
|
||||||
style: TextStyle(
|
|
||||||
color: statusColor,
|
|
||||||
fontWeight: FontWeight.bold,
|
|
||||||
fontSize: 12,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
const SizedBox(height: 12),
|
|
||||||
|
|
||||||
// Informasi penyaluran bantuan
|
|
||||||
if (item.penerimaPenyaluran != null)
|
|
||||||
Container(
|
|
||||||
padding: const EdgeInsets.all(8),
|
|
||||||
margin: const EdgeInsets.only(bottom: 12),
|
|
||||||
decoration: BoxDecoration(
|
|
||||||
color: Colors.blue.shade50,
|
|
||||||
borderRadius: BorderRadius.circular(8),
|
|
||||||
),
|
),
|
||||||
|
),
|
||||||
|
elevation: 3,
|
||||||
|
child: InkWell(
|
||||||
|
onTap: () {
|
||||||
|
// Navigasi ke detail pengaduan
|
||||||
|
Get.toNamed('/warga/detail-pengaduan',
|
||||||
|
arguments: {'id': item.id});
|
||||||
|
},
|
||||||
|
borderRadius: BorderRadius.circular(12),
|
||||||
child: Column(
|
child: Column(
|
||||||
crossAxisAlignment: CrossAxisAlignment.start,
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
mainAxisSize: MainAxisSize.min,
|
||||||
children: [
|
children: [
|
||||||
Text(
|
// Header dengan warna sesuai status
|
||||||
'Penyaluran: ${item.namaPenyaluran}',
|
Container(
|
||||||
style: const TextStyle(
|
width: double.infinity,
|
||||||
fontWeight: FontWeight.bold,
|
padding: const EdgeInsets.symmetric(
|
||||||
|
horizontal: 16, vertical: 12),
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
color: statusColor.withOpacity(0.1),
|
||||||
|
borderRadius: const BorderRadius.only(
|
||||||
|
topLeft: Radius.circular(12),
|
||||||
|
topRight: Radius.circular(12),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
child: Row(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||||
|
children: [
|
||||||
|
Expanded(
|
||||||
|
child: Row(
|
||||||
|
children: [
|
||||||
|
Icon(
|
||||||
|
Icons.report_problem,
|
||||||
|
color: statusColor,
|
||||||
|
),
|
||||||
|
const SizedBox(width: 8),
|
||||||
|
Flexible(
|
||||||
|
child: Text(
|
||||||
|
item.judul ??
|
||||||
|
'Pengaduan #${index + 1}',
|
||||||
|
style: TextStyle(
|
||||||
|
fontSize: 18,
|
||||||
|
fontWeight: FontWeight.bold,
|
||||||
|
color: statusColor,
|
||||||
|
),
|
||||||
|
overflow: TextOverflow.ellipsis,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Container(
|
||||||
|
padding: const EdgeInsets.symmetric(
|
||||||
|
horizontal: 12,
|
||||||
|
vertical: 6,
|
||||||
|
),
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
color: Colors.white,
|
||||||
|
borderRadius: BorderRadius.circular(20),
|
||||||
|
border: Border.all(
|
||||||
|
color: statusColor,
|
||||||
|
width: 1.0,
|
||||||
|
),
|
||||||
|
boxShadow: [
|
||||||
|
BoxShadow(
|
||||||
|
color: Colors.black.withOpacity(0.05),
|
||||||
|
blurRadius: 3,
|
||||||
|
offset: const Offset(0, 1),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
child: Row(
|
||||||
|
mainAxisSize: MainAxisSize.min,
|
||||||
|
children: [
|
||||||
|
Icon(
|
||||||
|
_getStatusIcon(item.status),
|
||||||
|
size: 14,
|
||||||
|
color: statusColor,
|
||||||
|
),
|
||||||
|
const SizedBox(width: 4),
|
||||||
|
Text(
|
||||||
|
statusText,
|
||||||
|
style: TextStyle(
|
||||||
|
color: statusColor,
|
||||||
|
fontWeight: FontWeight.bold,
|
||||||
|
fontSize: 12,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
const SizedBox(height: 4),
|
|
||||||
Row(
|
Padding(
|
||||||
children: [
|
padding: const EdgeInsets.all(16),
|
||||||
Expanded(
|
child: Column(
|
||||||
child: Text(
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
'Jenis: ${item.jenisBantuan}',
|
children: [
|
||||||
style: TextStyle(
|
// Informasi penyaluran bantuan jika ada
|
||||||
fontSize: 12,
|
if (item.penerimaPenyaluran != null)
|
||||||
color: Colors.grey.shade700,
|
Container(
|
||||||
|
width: double.infinity,
|
||||||
|
padding: const EdgeInsets.all(12),
|
||||||
|
margin: const EdgeInsets.only(bottom: 16),
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
color: Colors.blue.shade50,
|
||||||
|
borderRadius: BorderRadius.circular(10),
|
||||||
|
border: Border.all(
|
||||||
|
color: Colors.blue.shade200,
|
||||||
|
width: 1.0,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
child: Column(
|
||||||
|
crossAxisAlignment:
|
||||||
|
CrossAxisAlignment.start,
|
||||||
|
children: [
|
||||||
|
Row(
|
||||||
|
children: [
|
||||||
|
Icon(
|
||||||
|
Icons.volunteer_activism,
|
||||||
|
color: Colors.blue.shade700,
|
||||||
|
size: 18,
|
||||||
|
),
|
||||||
|
const SizedBox(width: 8),
|
||||||
|
Text(
|
||||||
|
'Bantuan Terkait',
|
||||||
|
style: TextStyle(
|
||||||
|
fontWeight: FontWeight.bold,
|
||||||
|
color: Colors.blue.shade800,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
const SizedBox(height: 8),
|
||||||
|
Container(
|
||||||
|
padding: const EdgeInsets.all(8),
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
color: Colors.white,
|
||||||
|
borderRadius:
|
||||||
|
BorderRadius.circular(8),
|
||||||
|
),
|
||||||
|
child: Column(
|
||||||
|
crossAxisAlignment:
|
||||||
|
CrossAxisAlignment.start,
|
||||||
|
children: [
|
||||||
|
Text(
|
||||||
|
'Penyaluran: ${item.namaPenyaluran ?? "Tidak tersedia"}',
|
||||||
|
style: const TextStyle(
|
||||||
|
fontWeight: FontWeight.w500,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
const SizedBox(height: 6),
|
||||||
|
Row(
|
||||||
|
children: [
|
||||||
|
Expanded(
|
||||||
|
child: _buildInfoItem(
|
||||||
|
'Jenis',
|
||||||
|
item.jenisBantuan ??
|
||||||
|
"Tidak tersedia",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Expanded(
|
||||||
|
child: _buildInfoItem(
|
||||||
|
'Jumlah',
|
||||||
|
item.jumlahBantuan ??
|
||||||
|
"Tidak tersedia",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
|
||||||
|
// Deskripsi pengaduan
|
||||||
|
if (item.deskripsi != null &&
|
||||||
|
item.deskripsi!.isNotEmpty)
|
||||||
|
Container(
|
||||||
|
width: double.infinity,
|
||||||
|
padding: const EdgeInsets.all(12),
|
||||||
|
margin: const EdgeInsets.only(bottom: 16),
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
color: Colors.grey.shade50,
|
||||||
|
borderRadius: BorderRadius.circular(10),
|
||||||
|
border: Border.all(
|
||||||
|
color: Colors.grey.shade200,
|
||||||
|
width: 1.0,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
child: Column(
|
||||||
|
crossAxisAlignment:
|
||||||
|
CrossAxisAlignment.start,
|
||||||
|
children: [
|
||||||
|
Text(
|
||||||
|
'Deskripsi Masalah:',
|
||||||
|
style: TextStyle(
|
||||||
|
fontWeight: FontWeight.bold,
|
||||||
|
color: Colors.grey.shade800,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
const SizedBox(height: 6),
|
||||||
|
Text(
|
||||||
|
item.deskripsi!,
|
||||||
|
style: TextStyle(
|
||||||
|
color: Colors.grey.shade700,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
|
||||||
|
// Informasi tanggal
|
||||||
|
Container(
|
||||||
|
width: double.infinity,
|
||||||
|
padding: const EdgeInsets.all(10),
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
color: Colors.grey.shade50,
|
||||||
|
borderRadius: BorderRadius.circular(8),
|
||||||
|
border: Border.all(
|
||||||
|
color: Colors.grey.shade200,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
child: Row(
|
||||||
|
children: [
|
||||||
|
Icon(
|
||||||
|
Icons.calendar_today,
|
||||||
|
size: 16,
|
||||||
|
color: Colors.grey.shade600,
|
||||||
|
),
|
||||||
|
const SizedBox(width: 8),
|
||||||
|
Text(
|
||||||
|
'Dilaporkan pada: ',
|
||||||
|
style: TextStyle(
|
||||||
|
fontWeight: FontWeight.w500,
|
||||||
|
color: Colors.grey.shade700,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Expanded(
|
||||||
|
child: Text(
|
||||||
|
item.tanggalPengaduan != null
|
||||||
|
? DateTimeHelper.formatDateTime(
|
||||||
|
item.tanggalPengaduan!)
|
||||||
|
: '-',
|
||||||
|
style: TextStyle(
|
||||||
|
color: Colors.grey.shade800,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
],
|
||||||
Expanded(
|
),
|
||||||
child: Text(
|
),
|
||||||
'Jumlah: ${item.jumlahBantuan}',
|
|
||||||
style: TextStyle(
|
// Footer dengan tombol aksi
|
||||||
fontSize: 12,
|
Container(
|
||||||
color: Colors.grey.shade700,
|
width: double.infinity,
|
||||||
),
|
decoration: const BoxDecoration(
|
||||||
|
border: Border(
|
||||||
|
top: BorderSide(
|
||||||
|
color: Colors.black12,
|
||||||
|
width: 1,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
],
|
),
|
||||||
|
padding: const EdgeInsets.symmetric(
|
||||||
|
horizontal: 16, vertical: 12),
|
||||||
|
child: Row(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.end,
|
||||||
|
children: [
|
||||||
|
ElevatedButton.icon(
|
||||||
|
onPressed: () {
|
||||||
|
// Navigasi ke detail pengaduan
|
||||||
|
Get.toNamed('/warga/detail-pengaduan',
|
||||||
|
arguments: {'id': item.id});
|
||||||
|
},
|
||||||
|
icon: const Icon(Icons.visibility),
|
||||||
|
label: const Text('Lihat Detail'),
|
||||||
|
style: ElevatedButton.styleFrom(
|
||||||
|
foregroundColor: Colors.white,
|
||||||
|
backgroundColor: statusColor,
|
||||||
|
padding: const EdgeInsets.symmetric(
|
||||||
|
horizontal: 16, vertical: 8),
|
||||||
|
shape: RoundedRectangleBorder(
|
||||||
|
borderRadius: BorderRadius.circular(8),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
|
||||||
if (item.deskripsi != null && item.deskripsi!.isNotEmpty)
|
|
||||||
Padding(
|
|
||||||
padding: const EdgeInsets.only(bottom: 12),
|
|
||||||
child: Text(
|
|
||||||
item.deskripsi!,
|
|
||||||
maxLines: 2,
|
|
||||||
overflow: TextOverflow.ellipsis,
|
|
||||||
style: TextStyle(
|
|
||||||
color: Colors.grey.shade700,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
Row(
|
|
||||||
children: [
|
|
||||||
Icon(
|
|
||||||
Icons.calendar_today,
|
|
||||||
size: 16,
|
|
||||||
color: Colors.grey.shade600,
|
|
||||||
),
|
|
||||||
const SizedBox(width: 8),
|
|
||||||
Text(
|
|
||||||
item.tanggalPengaduan != null
|
|
||||||
? DateTimeHelper.formatDateTime(
|
|
||||||
item.tanggalPengaduan!)
|
|
||||||
: '-',
|
|
||||||
style: TextStyle(
|
|
||||||
color: Colors.grey.shade600,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
],
|
|
||||||
),
|
),
|
||||||
const SizedBox(height: 16),
|
);
|
||||||
const Divider(height: 1),
|
},
|
||||||
const SizedBox(height: 16),
|
childCount: controller.pengaduan.length,
|
||||||
Row(
|
|
||||||
mainAxisAlignment: MainAxisAlignment.end,
|
|
||||||
children: [
|
|
||||||
TextButton.icon(
|
|
||||||
onPressed: () {
|
|
||||||
// Navigasi ke detail pengaduan
|
|
||||||
Get.toNamed('/warga/detail-pengaduan',
|
|
||||||
arguments: {'id': item.id});
|
|
||||||
},
|
|
||||||
icon: const Icon(Icons.visibility),
|
|
||||||
label: const Text('Lihat Detail'),
|
|
||||||
),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
);
|
),
|
||||||
},
|
],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Helper method untuk mendapatkan icon berdasarkan status
|
||||||
|
IconData _getStatusIcon(String? status) {
|
||||||
|
switch (status?.toUpperCase()) {
|
||||||
|
case 'MENUNGGU':
|
||||||
|
return Icons.hourglass_empty;
|
||||||
|
case 'TINDAKAN':
|
||||||
|
return Icons.engineering;
|
||||||
|
case 'SELESAI':
|
||||||
|
return Icons.check_circle;
|
||||||
|
case 'DITOLAK':
|
||||||
|
return Icons.cancel;
|
||||||
|
default:
|
||||||
|
return Icons.help_outline;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Widget untuk item informasi
|
||||||
|
Widget _buildInfoItem(String label, String value) {
|
||||||
|
return Column(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
children: [
|
||||||
|
Text(
|
||||||
|
label,
|
||||||
|
style: TextStyle(
|
||||||
|
fontSize: 12,
|
||||||
|
color: Colors.grey.shade600,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
const SizedBox(height: 2),
|
||||||
|
Text(
|
||||||
|
value,
|
||||||
|
style: TextStyle(
|
||||||
|
fontWeight: FontWeight.w500,
|
||||||
|
color: Colors.grey.shade800,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -37,106 +37,167 @@ class BantuanCard extends StatelessWidget {
|
|||||||
|
|
||||||
// Tampilan kompak untuk daftar ringkasan
|
// Tampilan kompak untuk daftar ringkasan
|
||||||
if (isCompact) {
|
if (isCompact) {
|
||||||
return Card(
|
return ConstrainedBox(
|
||||||
elevation: 2,
|
constraints: const BoxConstraints(minHeight: 100),
|
||||||
shape: RoundedRectangleBorder(
|
child: Card(
|
||||||
borderRadius: BorderRadius.circular(12),
|
elevation: 3,
|
||||||
),
|
margin: const EdgeInsets.only(bottom: 12),
|
||||||
child: InkWell(
|
shape: RoundedRectangleBorder(
|
||||||
onTap: onTap,
|
borderRadius: BorderRadius.circular(12),
|
||||||
borderRadius: BorderRadius.circular(12),
|
side: BorderSide(
|
||||||
child: Padding(
|
color: (item.isUang == true ? Colors.green : Colors.blue)
|
||||||
padding: const EdgeInsets.all(12),
|
.withOpacity(0.3),
|
||||||
child: Row(
|
width: 1,
|
||||||
children: [
|
),
|
||||||
Container(
|
),
|
||||||
padding: const EdgeInsets.all(10),
|
child: InkWell(
|
||||||
decoration: BoxDecoration(
|
onTap: onTap,
|
||||||
color: (item.isUang == true ? Colors.green : Colors.blue)
|
borderRadius: BorderRadius.circular(12),
|
||||||
.withOpacity(0.1),
|
child: Padding(
|
||||||
borderRadius: BorderRadius.circular(10),
|
padding: const EdgeInsets.all(12),
|
||||||
),
|
child: Row(
|
||||||
child: Icon(
|
crossAxisAlignment: CrossAxisAlignment.center,
|
||||||
item.isUang == true
|
mainAxisSize: MainAxisSize.max, // Ensure max width for main Row
|
||||||
? Icons.attach_money
|
children: [
|
||||||
: Icons.inventory_2,
|
Container(
|
||||||
color: item.isUang == true ? Colors.green : Colors.blue,
|
padding: const EdgeInsets.all(12),
|
||||||
size: 24,
|
decoration: BoxDecoration(
|
||||||
),
|
color: (item.isUang == true ? Colors.green : Colors.blue)
|
||||||
),
|
.withOpacity(0.1),
|
||||||
const SizedBox(width: 12),
|
borderRadius: BorderRadius.circular(12),
|
||||||
Expanded(
|
border: Border.all(
|
||||||
child: Column(
|
color:
|
||||||
crossAxisAlignment: CrossAxisAlignment.start,
|
(item.isUang == true ? Colors.green : Colors.blue)
|
||||||
children: [
|
.withOpacity(0.3),
|
||||||
Text(
|
width: 1,
|
||||||
item.namaPenyaluran ?? item.keterangan ?? 'Bantuan',
|
|
||||||
style: const TextStyle(
|
|
||||||
fontWeight: FontWeight.bold,
|
|
||||||
fontSize: 16,
|
|
||||||
),
|
|
||||||
maxLines: 1,
|
|
||||||
overflow: TextOverflow.ellipsis,
|
|
||||||
),
|
|
||||||
const SizedBox(height: 4),
|
|
||||||
Text(
|
|
||||||
item.kategoriNama ?? 'Bantuan',
|
|
||||||
style: TextStyle(
|
|
||||||
color: Colors.grey.shade700,
|
|
||||||
fontSize: 14,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
const SizedBox(height: 4),
|
|
||||||
Text(
|
|
||||||
item.tanggalPenerimaan != null
|
|
||||||
? DateFormat('dd MMMM yyyy', 'id_ID')
|
|
||||||
.format(item.tanggalPenerimaan!)
|
|
||||||
: '-',
|
|
||||||
style: TextStyle(
|
|
||||||
color: Colors.grey.shade600,
|
|
||||||
fontSize: 12,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
),
|
|
||||||
const SizedBox(width: 8),
|
|
||||||
Column(
|
|
||||||
crossAxisAlignment: CrossAxisAlignment.end,
|
|
||||||
children: [
|
|
||||||
StatusBadge(
|
|
||||||
status: item.statusPenerimaan ?? 'BELUMMENERIMA',
|
|
||||||
fontSize: 10,
|
|
||||||
padding: const EdgeInsets.symmetric(
|
|
||||||
horizontal: 8,
|
|
||||||
vertical: 4,
|
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
if (item.statusPenyaluran != null &&
|
child: Icon(
|
||||||
item.statusPenyaluran!.isNotEmpty)
|
item.isUang == true
|
||||||
Padding(
|
? Icons.attach_money
|
||||||
padding: const EdgeInsets.only(top: 4),
|
: Icons.inventory_2,
|
||||||
child: _buildPenyaluranStatusBadge(
|
color: item.isUang == true ? Colors.green : Colors.blue,
|
||||||
item.statusPenyaluran!,
|
size: 28,
|
||||||
fontSize: 10,
|
),
|
||||||
|
),
|
||||||
|
const SizedBox(width: 12),
|
||||||
|
Expanded(
|
||||||
|
flex: 3, // Allocate more space to content
|
||||||
|
child: Column(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
mainAxisSize: MainAxisSize.min,
|
||||||
|
children: [
|
||||||
|
Text(
|
||||||
|
item.namaPenyaluran ?? item.keterangan ?? 'Bantuan',
|
||||||
|
style: const TextStyle(
|
||||||
|
fontWeight: FontWeight.bold,
|
||||||
|
fontSize: 16,
|
||||||
|
),
|
||||||
|
overflow: TextOverflow.ellipsis,
|
||||||
|
maxLines: 1,
|
||||||
|
),
|
||||||
|
const SizedBox(height: 6),
|
||||||
|
Text(
|
||||||
|
item.kategoriNama ?? 'Bantuan',
|
||||||
|
style: TextStyle(
|
||||||
|
color: Colors.grey.shade700,
|
||||||
|
fontSize: 14,
|
||||||
|
fontWeight: FontWeight.w500,
|
||||||
|
),
|
||||||
|
overflow: TextOverflow.ellipsis,
|
||||||
|
maxLines: 1,
|
||||||
|
),
|
||||||
|
const SizedBox(height: 6),
|
||||||
|
Row(
|
||||||
|
mainAxisSize: MainAxisSize.min,
|
||||||
|
children: [
|
||||||
|
Icon(
|
||||||
|
Icons.calendar_today,
|
||||||
|
size: 14,
|
||||||
|
color: Colors.grey.shade600,
|
||||||
|
),
|
||||||
|
const SizedBox(width: 4),
|
||||||
|
Flexible(
|
||||||
|
child: Text(
|
||||||
|
item.tanggalPenerimaan != null
|
||||||
|
? DateFormat('dd MMMM yyyy', 'id_ID')
|
||||||
|
.format(item.tanggalPenerimaan!)
|
||||||
|
: '-',
|
||||||
|
style: TextStyle(
|
||||||
|
color: Colors.grey.shade600,
|
||||||
|
fontSize: 12,
|
||||||
|
),
|
||||||
|
overflow: TextOverflow.ellipsis,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
const SizedBox(width: 8),
|
||||||
|
Expanded(
|
||||||
|
flex: 2, // Allocate less space to status/amount
|
||||||
|
child: Column(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.end,
|
||||||
|
mainAxisSize: MainAxisSize.min,
|
||||||
|
children: [
|
||||||
|
StatusBadge(
|
||||||
|
status: item.statusPenerimaan ?? 'BELUMMENERIMA',
|
||||||
|
fontSize: 11,
|
||||||
padding: const EdgeInsets.symmetric(
|
padding: const EdgeInsets.symmetric(
|
||||||
horizontal: 8,
|
horizontal: 8,
|
||||||
vertical: 4,
|
vertical: 4,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
if (item.statusPenyaluran != null &&
|
||||||
const SizedBox(height: 8),
|
item.statusPenyaluran!.isNotEmpty)
|
||||||
Text(
|
Padding(
|
||||||
formattedJumlah,
|
padding: const EdgeInsets.only(top: 6),
|
||||||
style: TextStyle(
|
child: StatusBadge(
|
||||||
fontWeight: FontWeight.bold,
|
status: item.statusPenyaluran!,
|
||||||
color: item.isUang == true ? Colors.green : Colors.blue,
|
fontSize: 11,
|
||||||
fontSize: 14,
|
padding: const EdgeInsets.symmetric(
|
||||||
),
|
horizontal: 8,
|
||||||
|
vertical: 4,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
const SizedBox(height: 8),
|
||||||
|
Container(
|
||||||
|
padding: const EdgeInsets.symmetric(
|
||||||
|
horizontal: 8, vertical: 4),
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
color: (item.isUang == true
|
||||||
|
? Colors.green
|
||||||
|
: Colors.blue)
|
||||||
|
.withOpacity(0.1),
|
||||||
|
borderRadius: BorderRadius.circular(8),
|
||||||
|
border: Border.all(
|
||||||
|
color: (item.isUang == true
|
||||||
|
? Colors.green
|
||||||
|
: Colors.blue)
|
||||||
|
.withOpacity(0.3),
|
||||||
|
width: 1,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
child: Text(
|
||||||
|
formattedJumlah,
|
||||||
|
style: TextStyle(
|
||||||
|
fontWeight: FontWeight.bold,
|
||||||
|
color: item.isUang == true
|
||||||
|
? Colors.green.shade700
|
||||||
|
: Colors.blue.shade700,
|
||||||
|
fontSize: 14,
|
||||||
|
),
|
||||||
|
overflow: TextOverflow.ellipsis,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
),
|
),
|
||||||
],
|
),
|
||||||
),
|
],
|
||||||
],
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
@ -144,150 +205,209 @@ class BantuanCard extends StatelessWidget {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Tampilan detail untuk halaman daftar lengkap
|
// Tampilan detail untuk halaman daftar lengkap
|
||||||
return Card(
|
return ConstrainedBox(
|
||||||
margin: const EdgeInsets.only(bottom: 16),
|
constraints: const BoxConstraints(minHeight: 200),
|
||||||
shape: RoundedRectangleBorder(
|
child: Card(
|
||||||
borderRadius: BorderRadius.circular(12),
|
margin: const EdgeInsets.only(bottom: 16),
|
||||||
),
|
shape: RoundedRectangleBorder(
|
||||||
elevation: 2,
|
borderRadius: BorderRadius.circular(12),
|
||||||
child: InkWell(
|
side: BorderSide(
|
||||||
onTap: onTap,
|
color: (item.isUang == true ? Colors.green : Colors.blue)
|
||||||
borderRadius: BorderRadius.circular(12),
|
.withOpacity(0.3),
|
||||||
child: Padding(
|
width: 1,
|
||||||
padding: const EdgeInsets.all(16),
|
),
|
||||||
|
),
|
||||||
|
elevation: 3,
|
||||||
|
child: InkWell(
|
||||||
|
onTap: onTap,
|
||||||
|
borderRadius: BorderRadius.circular(12),
|
||||||
child: Column(
|
child: Column(
|
||||||
crossAxisAlignment: CrossAxisAlignment.start,
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
mainAxisSize: MainAxisSize.min,
|
||||||
children: [
|
children: [
|
||||||
Row(
|
Container(
|
||||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
width: double.infinity,
|
||||||
children: [
|
padding:
|
||||||
Expanded(
|
const EdgeInsets.symmetric(horizontal: 16, vertical: 12),
|
||||||
child: Text(
|
decoration: BoxDecoration(
|
||||||
item.namaPenyaluran ?? item.keterangan ?? 'Bantuan',
|
color: (item.isUang == true ? Colors.green : Colors.blue)
|
||||||
style: const TextStyle(
|
.withOpacity(0.1),
|
||||||
fontSize: 18,
|
borderRadius: const BorderRadius.only(
|
||||||
fontWeight: FontWeight.bold,
|
topLeft: Radius.circular(12),
|
||||||
),
|
topRight: Radius.circular(12),
|
||||||
maxLines: 1,
|
|
||||||
overflow: TextOverflow.ellipsis,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
Wrap(
|
|
||||||
spacing: 8,
|
|
||||||
children: [
|
|
||||||
StatusBadge(status: item.statusPenyaluran ?? ""),
|
|
||||||
StatusBadge(
|
|
||||||
status: item.statusPenerimaan ?? 'BELUMMENERIMA',
|
|
||||||
),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
if (item.deskripsiPenyaluran != null &&
|
|
||||||
item.deskripsiPenyaluran!.isNotEmpty)
|
|
||||||
Padding(
|
|
||||||
padding: const EdgeInsets.only(top: 8.0),
|
|
||||||
child: Text(
|
|
||||||
item.deskripsiPenyaluran!,
|
|
||||||
style: TextStyle(
|
|
||||||
color: Colors.grey.shade700,
|
|
||||||
fontSize: 14,
|
|
||||||
),
|
|
||||||
maxLines: 2,
|
|
||||||
overflow: TextOverflow.ellipsis,
|
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
const SizedBox(height: 16),
|
child: Row(
|
||||||
Row(
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||||
children: [
|
children: [
|
||||||
Icon(
|
Expanded(
|
||||||
Icons.category,
|
child: Row(
|
||||||
size: 16,
|
children: [
|
||||||
color: Colors.grey.shade600,
|
Icon(
|
||||||
),
|
item.isUang == true
|
||||||
const SizedBox(width: 8),
|
? Icons.attach_money
|
||||||
Text(
|
: Icons.inventory_2,
|
||||||
item.kategoriNama ?? 'Bantuan',
|
color: item.isUang == true
|
||||||
style: TextStyle(
|
? Colors.green.shade700
|
||||||
color: Colors.grey.shade700,
|
: Colors.blue.shade700,
|
||||||
fontWeight: FontWeight.w500,
|
),
|
||||||
),
|
const SizedBox(width: 8),
|
||||||
),
|
Flexible(
|
||||||
],
|
child: Text(
|
||||||
),
|
item.namaPenyaluran ??
|
||||||
const SizedBox(height: 8),
|
item.keterangan ??
|
||||||
Row(
|
'Bantuan',
|
||||||
children: [
|
style: TextStyle(
|
||||||
Icon(
|
fontSize: 18,
|
||||||
Icons.calendar_today,
|
fontWeight: FontWeight.bold,
|
||||||
size: 16,
|
color: item.isUang == true
|
||||||
color: Colors.grey.shade600,
|
? Colors.green.shade800
|
||||||
),
|
: Colors.blue.shade800,
|
||||||
const SizedBox(width: 8),
|
),
|
||||||
Text(
|
overflow: TextOverflow.ellipsis,
|
||||||
item.tanggalPenerimaan != null
|
),
|
||||||
? DateFormat('dd MMMM yyyy', 'id_ID')
|
),
|
||||||
.format(item.tanggalPenerimaan!)
|
],
|
||||||
: '-',
|
|
||||||
style: TextStyle(
|
|
||||||
color: Colors.grey.shade600,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
const SizedBox(height: 8),
|
|
||||||
Row(
|
|
||||||
children: [
|
|
||||||
Icon(
|
|
||||||
Icons.location_on,
|
|
||||||
size: 16,
|
|
||||||
color: Colors.grey.shade600,
|
|
||||||
),
|
|
||||||
const SizedBox(width: 8),
|
|
||||||
Expanded(
|
|
||||||
child: Text(
|
|
||||||
item.lokasiPenyaluranNama ?? 'Lokasi tidak tersedia',
|
|
||||||
style: TextStyle(
|
|
||||||
color: Colors.grey.shade600,
|
|
||||||
),
|
),
|
||||||
maxLines: 1,
|
|
||||||
overflow: TextOverflow.ellipsis,
|
|
||||||
),
|
),
|
||||||
),
|
Container(
|
||||||
],
|
padding: const EdgeInsets.symmetric(
|
||||||
),
|
horizontal: 10, vertical: 5),
|
||||||
const SizedBox(height: 8),
|
decoration: BoxDecoration(
|
||||||
Row(
|
color: Colors.white,
|
||||||
children: [
|
borderRadius: BorderRadius.circular(20),
|
||||||
Icon(
|
boxShadow: [
|
||||||
item.isUang == true
|
BoxShadow(
|
||||||
? Icons.attach_money
|
color: Colors.black.withOpacity(0.1),
|
||||||
: Icons.inventory_2,
|
blurRadius: 4,
|
||||||
size: 16,
|
offset: const Offset(0, 2),
|
||||||
color: Colors.grey.shade600,
|
),
|
||||||
),
|
],
|
||||||
const SizedBox(width: 8),
|
),
|
||||||
Text(
|
child: Text(
|
||||||
formattedJumlah,
|
formattedJumlah,
|
||||||
style: TextStyle(
|
style: TextStyle(
|
||||||
fontWeight: FontWeight.bold,
|
fontWeight: FontWeight.bold,
|
||||||
color: item.isUang == true ? Colors.green : Colors.blue,
|
color: item.isUang == true
|
||||||
|
? Colors.green.shade700
|
||||||
|
: Colors.blue.shade700,
|
||||||
|
fontSize: 14,
|
||||||
|
),
|
||||||
|
),
|
||||||
),
|
),
|
||||||
),
|
],
|
||||||
],
|
),
|
||||||
),
|
),
|
||||||
const SizedBox(height: 16),
|
Padding(
|
||||||
const Divider(height: 1),
|
padding: const EdgeInsets.all(16),
|
||||||
const SizedBox(height: 16),
|
child: Column(
|
||||||
Row(
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
mainAxisAlignment: MainAxisAlignment.end,
|
children: [
|
||||||
children: [
|
Wrap(
|
||||||
TextButton.icon(
|
spacing: 8,
|
||||||
onPressed: onTap,
|
runSpacing: 8,
|
||||||
icon: const Icon(Icons.visibility),
|
children: [
|
||||||
label: const Text('Lihat Detail'),
|
if (item.statusPenyaluran != null &&
|
||||||
),
|
item.statusPenyaluran!.isNotEmpty)
|
||||||
],
|
StatusBadge(
|
||||||
|
status: item.statusPenyaluran!,
|
||||||
|
),
|
||||||
|
StatusBadge(
|
||||||
|
status: item.statusPenerimaan ?? 'BELUMMENERIMA',
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
if (item.deskripsiPenyaluran != null &&
|
||||||
|
item.deskripsiPenyaluran!.isNotEmpty)
|
||||||
|
Container(
|
||||||
|
width: double.infinity,
|
||||||
|
margin: const EdgeInsets.only(top: 16, bottom: 8),
|
||||||
|
padding: const EdgeInsets.all(12),
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
color: Colors.grey.shade50,
|
||||||
|
borderRadius: BorderRadius.circular(8),
|
||||||
|
border: Border.all(
|
||||||
|
color: Colors.grey.shade200,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
child: Column(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
children: [
|
||||||
|
Text(
|
||||||
|
'Deskripsi:',
|
||||||
|
style: TextStyle(
|
||||||
|
fontWeight: FontWeight.bold,
|
||||||
|
color: Colors.grey.shade700,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
const SizedBox(height: 4),
|
||||||
|
Text(
|
||||||
|
item.deskripsiPenyaluran!,
|
||||||
|
style: TextStyle(
|
||||||
|
color: Colors.grey.shade700,
|
||||||
|
fontSize: 14,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
const SizedBox(height: 16),
|
||||||
|
Container(
|
||||||
|
width: double.infinity,
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
color: Colors.grey.shade50,
|
||||||
|
borderRadius: BorderRadius.circular(12),
|
||||||
|
border: Border.all(color: Colors.grey.shade200),
|
||||||
|
),
|
||||||
|
padding: const EdgeInsets.all(12),
|
||||||
|
child: Column(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
children: [
|
||||||
|
_buildInfoRow(
|
||||||
|
Icons.category,
|
||||||
|
'Kategori:',
|
||||||
|
item.kategoriNama ?? 'Bantuan',
|
||||||
|
),
|
||||||
|
const Divider(height: 16),
|
||||||
|
_buildInfoRow(
|
||||||
|
Icons.calendar_today,
|
||||||
|
'Tanggal:',
|
||||||
|
item.tanggalPenerimaan != null
|
||||||
|
? DateFormat('dd MMMM yyyy', 'id_ID')
|
||||||
|
.format(item.tanggalPenerimaan!)
|
||||||
|
: '-',
|
||||||
|
),
|
||||||
|
const Divider(height: 16),
|
||||||
|
_buildInfoRow(
|
||||||
|
Icons.location_on,
|
||||||
|
'Lokasi:',
|
||||||
|
item.lokasiPenyaluranNama ??
|
||||||
|
'Lokasi tidak tersedia',
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Container(
|
||||||
|
width: double.infinity,
|
||||||
|
padding: const EdgeInsets.fromLTRB(16, 0, 16, 16),
|
||||||
|
child: Row(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.end,
|
||||||
|
children: [
|
||||||
|
TextButton.icon(
|
||||||
|
onPressed: onTap,
|
||||||
|
icon: const Icon(Icons.visibility),
|
||||||
|
label: const Text('Lihat Detail'),
|
||||||
|
style: TextButton.styleFrom(
|
||||||
|
foregroundColor: item.isUang == true
|
||||||
|
? Colors.green.shade600
|
||||||
|
: Colors.blue.shade600,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
@ -296,50 +416,33 @@ class BantuanCard extends StatelessWidget {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Widget untuk menampilkan badge status penyaluran
|
Widget _buildInfoRow(IconData icon, String label, String value) {
|
||||||
Widget _buildPenyaluranStatusBadge(
|
return Row(
|
||||||
String status, {
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
double fontSize = 12,
|
mainAxisSize: MainAxisSize.min,
|
||||||
EdgeInsets padding =
|
children: [
|
||||||
const EdgeInsets.symmetric(horizontal: 12, vertical: 6),
|
Icon(
|
||||||
}) {
|
icon,
|
||||||
Color statusColor;
|
size: 18,
|
||||||
String statusText;
|
color: Colors.grey.shade600,
|
||||||
|
|
||||||
switch (status.toUpperCase()) {
|
|
||||||
case 'DIJADWALKAN':
|
|
||||||
case 'DISETUJUI':
|
|
||||||
statusColor = Colors.blue;
|
|
||||||
statusText = 'Dijadwalkan';
|
|
||||||
break;
|
|
||||||
case 'TERLAKSANA':
|
|
||||||
statusColor = Colors.green;
|
|
||||||
statusText = 'Terlaksana';
|
|
||||||
break;
|
|
||||||
case 'BATALTERLAKSANA':
|
|
||||||
statusColor = Colors.red;
|
|
||||||
statusText = 'Dibatalkan';
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
statusColor = Colors.grey;
|
|
||||||
statusText = status;
|
|
||||||
}
|
|
||||||
|
|
||||||
return Container(
|
|
||||||
padding: padding,
|
|
||||||
decoration: BoxDecoration(
|
|
||||||
color: statusColor.withOpacity(0.1),
|
|
||||||
borderRadius: BorderRadius.circular(20),
|
|
||||||
border: Border.all(color: statusColor),
|
|
||||||
),
|
|
||||||
child: Text(
|
|
||||||
statusText,
|
|
||||||
style: TextStyle(
|
|
||||||
color: statusColor,
|
|
||||||
fontWeight: FontWeight.bold,
|
|
||||||
fontSize: fontSize,
|
|
||||||
),
|
),
|
||||||
),
|
const SizedBox(width: 12),
|
||||||
|
Text(
|
||||||
|
label,
|
||||||
|
style: const TextStyle(
|
||||||
|
fontWeight: FontWeight.bold,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
const SizedBox(width: 8),
|
||||||
|
Expanded(
|
||||||
|
child: Text(
|
||||||
|
value,
|
||||||
|
style: TextStyle(
|
||||||
|
color: Colors.grey.shade800,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user