TIF_NGANJUK_E41211358/lib/presentation/controller/pengaduan/controller_keluhan.dart

147 lines
4.6 KiB
Dart
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import 'dart:convert';
import 'dart:developer';
import 'package:e_surat_bendungan/config/api.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:http/http.dart' as http;
import 'package:image_cropper/image_cropper.dart';
import 'package:image_picker/image_picker.dart';
import '../controller_shared_prefs.dart';
class ControllerKeluhan extends GetxController {
TextEditingController controllerJudul = TextEditingController();
TextEditingController controllerTanggal = TextEditingController();
TextEditingController controllerIsi = TextEditingController();
TextEditingController controllerLokasi = TextEditingController();
TextEditingController controllerKategori = TextEditingController();
var isLoading = false.obs;
final sharedPrefsController = Get.find<ControllerSharedPrefs>();
var inputDate = ''.obs;
var croppedFile = Rx<CroppedFile?>(null);
var selectedCategory = ''.obs;
List<String> categoryList = [
"Administrasi",
"Teknis / Sistem",
"Pelayanan Publik",
"Keamanan & Privasi",
"Infrastruktur & Sarana",
" Lainnya"
].obs;
Future<void> selectDate(BuildContext context) async {
DateTime? picked = await showDatePicker(
context: context,
initialDate: DateTime.now(),
firstDate: DateTime(1900),
lastDate: DateTime(2100),
);
if (picked != null) {
// Format tanggal ke dd/MM/yyyy
String formattedDate =
"${picked.day.toString().padLeft(2, '0')}/${picked.month.toString().padLeft(2, '0')}/${picked.year}";
controllerTanggal.text = formattedDate;
String dateInput =
"${picked.year}-${picked.month.toString().padLeft(2, '0')}-${picked.day.toString().padLeft(2, '0')}";
inputDate.value = dateInput;
}
}
Future<void> pickImage(ImageSource source) async {
final pickedImage = await pickedFileImage(source);
if (pickedImage != null) {
CroppedFile? cropFile = await cropImage(pickedImage);
if (cropFile != null) {
croppedFile.value = cropFile;
}
}
}
Future<XFile?> pickedFileImage(ImageSource source) async {
try {
final picker = ImagePicker();
final pickedFile = await picker.pickImage(source: source);
if (pickedFile != null) {
return pickedFile;
} else {
return null;
}
} catch (e) {
print("Terjadi kesalahan saat memilih gambar : $e");
return null;
}
}
Future<CroppedFile?> cropImage(XFile image) async {
CroppedFile? croppedFile = await ImageCropper().cropImage(
sourcePath: image.path,
uiSettings: [
AndroidUiSettings(
toolbarTitle: 'Sesuaikan Gambar',
toolbarColor: Colors.blueAccent,
toolbarWidgetColor: Colors.white,
cropFrameColor: Colors.greenAccent,
hideBottomControls: false,
activeControlsWidgetColor: Colors.blue,
initAspectRatio: CropAspectRatioPreset.original,
lockAspectRatio: false),
IOSUiSettings(
minimumAspectRatio: 1.0,
),
],
);
return croppedFile;
}
Future<void> insertKeluhan() async {
try {
isLoading(true);
var request = http.MultipartRequest(
'POST',
Uri.parse("${apiService}insertkeluhan"),
);
request.fields['judul'] = controllerJudul.text;
request.fields['isi'] = controllerIsi.text;
request.fields['tanggal'] = inputDate.value;
request.fields['lokasi'] = controllerLokasi.text;
request.fields['kategori'] = selectedCategory.value;
request.fields['id_akun'] =
sharedPrefsController.user.value!.idUser.toString();
if (croppedFile.value != null) {
request.files.add(
await http.MultipartFile.fromPath(
'file_pendukung',
croppedFile.value!.path,
),
);
}
var response = await request.send();
var responseBody = await response.stream.bytesToString();
var jsonResponse = jsonDecode(responseBody);
print("Kode berapa : ${response.statusCode}");
if (response.statusCode == 200) {
Get.back();
} else if (jsonResponse['data']['message']['file_pendukung'][0] ==
'The file pendukung failed to upload.') {
Get.snackbar("Gagal Mengirim", "Ukuran Gambar Terlalu Besar");
} else {
Get.snackbar(
"Error", jsonResponse['message'] ?? "Gagal mengirim keluhan");
}
} catch (e) {
Get.snackbar("Error",
"Terjadi kesalahan: harap ulangi kirim atau buka tutup aplikasi");
log("Terjadi Kesalahan: $e");
} finally {
isLoading(false);
}
}
}