diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml
index 22b09b84..3b12ba4c 100644
--- a/android/app/src/main/AndroidManifest.xml
+++ b/android/app/src/main/AndroidManifest.xml
@@ -34,6 +34,7 @@
android:value="2" />
+
diff --git a/assets/images/home/process-upload.zip b/assets/images/home/process-upload.zip
new file mode 100644
index 00000000..06a3396f
Binary files /dev/null and b/assets/images/home/process-upload.zip differ
diff --git a/assets/images/home/upload-files.zip b/assets/images/home/upload-files.zip
new file mode 100644
index 00000000..5e604c69
Binary files /dev/null and b/assets/images/home/upload-files.zip differ
diff --git a/lib/app/common/constant.dart b/lib/app/common/constant.dart
index 20ea6064..790a5209 100644
--- a/lib/app/common/constant.dart
+++ b/lib/app/common/constant.dart
@@ -17,7 +17,7 @@
// 'https://9bf0-2001-448a-4049-68c4-c80c-e641-b21d-cb5c.ap.ngrok.io/api/v1/';
const baseUrl =
- 'https://number-41-bagooska-the-terribly-tired-tapir-3.fleetimee.repl.co/api/v1/';
+ 'https://number-41-bagooska-the-terribly-tired-tapir.fleetimee.repl.co/api/v1/';
// List debitur field string
const field =
@@ -25,4 +25,4 @@ const field =
// Insight debitur query string
const joinTable =
- 'join=inputNeraca&join=inputRugiLaba&join=inputKeuangan&join=analisaKeuangan&join=analisaKarakter&join=analisaBisnis&join=analisaJenisUsaha&join=agunan&join=agunan.form_tanah&join=agunan.form_kendaraan&join=agunan.form_los&join=agunan.form_peralatan&join=agunan.form_cash&join=agunan.form_lainnya&join=agunan.form_tanah_bangunan&join=syaratLain&join=analisaAgunan&join=ijinLegitimasi&join=asuransi';
+ 'join=inputNeraca&join=inputRugiLaba&join=inputKeuangan&join=analisaKeuangan&join=analisaKarakter&join=analisaBisnis&join=analisaJenisUsaha&join=agunan&join=agunan.form_tanah&join=agunan.form_kendaraan&join=agunan.form_los&join=agunan.form_peralatan&join=agunan.form_cash&join=agunan.form_lainnya&join=agunan.form_tanah_bangunan&join=syaratLain&join=analisaAgunan&join=ijinLegitimasi&join=asuransi&join=upload';
diff --git a/lib/app/data/provider/media/save_mediaprovider.dart b/lib/app/data/provider/media/save_mediaprovider.dart
new file mode 100644
index 00000000..993e014d
--- /dev/null
+++ b/lib/app/data/provider/media/save_mediaprovider.dart
@@ -0,0 +1,74 @@
+// 🎯 Dart imports:
+
+// 🐦 Flutter imports:
+
+// 📦 Package imports:
+import 'dart:convert';
+
+import 'package:akm/app/common/constant.dart';
+import 'package:flutter/cupertino.dart';
+import 'package:http/http.dart' as http;
+
+// 🌎 Project imports:
+import 'package:akm/app/models/debitur_model/insight_debitur.model.dart';
+
+class MediaProvider {
+ final httpClient = http.Client();
+
+ Future> fetchMedia(int id) async {
+ try {
+ final response = await httpClient.get(
+ Uri.parse('${baseUrl}debiturs/$id/uploads/'),
+ headers: {
+ 'Content-Type': 'application/json',
+ 'Accept': 'application/json'
+ },
+ );
+ debugPrint(response.body);
+
+ if (response.statusCode == 200) {
+ var data = jsonDecode(response.body);
+ debugPrint(data.toString());
+ return (data as List).map((e) => Upload.fromJson(e)).toList();
+ } else {
+ throw Exception('Failed to load data');
+ }
+ } catch (e) {
+ return Future.error(e);
+ }
+ }
+
+ Future saveMedia(int id, body) async {
+ try {
+ final response = http.MultipartRequest(
+ 'POST',
+ Uri.parse('${baseUrl}debiturs/$id/uploads/'),
+ )
+ ..headers.addAll(
+ {
+ 'Content-Type': 'application/json',
+ 'Accept': 'application/json',
+ },
+ )
+ ..files.add(await http.MultipartFile.fromPath('file', body['file']));
+
+ response.fields.addAll(
+ Map.from(body),
+ );
+
+ var res = await response.send();
+
+ final resBody = await res.stream.bytesToString();
+
+ debugPrint(resBody);
+
+ if (res.statusCode == 201) {
+ return Upload.fromJson(jsonDecode(resBody));
+ } else {
+ throw Exception('Failed to load data');
+ }
+ } catch (e) {
+ return Future.error(e);
+ }
+ }
+}
diff --git a/lib/app/models/debitur_model/insight_debitur.model.dart b/lib/app/models/debitur_model/insight_debitur.model.dart
index e218973c..3d4ecaeb 100644
--- a/lib/app/models/debitur_model/insight_debitur.model.dart
+++ b/lib/app/models/debitur_model/insight_debitur.model.dart
@@ -58,6 +58,7 @@ class DebiturInsight {
this.syaratLain,
this.asuransi,
this.analisaAgunan,
+ this.upload,
});
int? id;
@@ -109,6 +110,7 @@ class DebiturInsight {
List? agunan;
List? syaratLain;
AnalisaAgunan? analisaAgunan;
+ List? upload;
factory DebiturInsight.fromJson(Map json) => DebiturInsight(
id: json["id"],
@@ -188,6 +190,9 @@ class DebiturInsight {
analisaAgunan: json["analisaAgunan"] == null
? null
: AnalisaAgunan.fromJson(json["analisaAgunan"]),
+ upload: json["upload"] == null
+ ? null
+ : List.from(json["upload"].map((x) => Upload.fromJson(x))),
);
Map toJson() => {
@@ -249,6 +254,51 @@ class DebiturInsight {
? null
: List.from(syaratLain!.map((x) => x.toJson())),
"analisaAgunan": analisaAgunan == null ? null : analisaAgunan?.toJson(),
+ "upload": upload == null
+ ? null
+ : List.from(upload!.map((x) => x.toJson())),
+ };
+}
+
+class Upload {
+ Upload({
+ this.id,
+ this.keterangan,
+ this.file,
+ this.createdDate,
+ this.updatedDate,
+ this.debiturId,
+ });
+
+ int? id;
+ String? keterangan;
+ String? file;
+ DateTime? createdDate;
+ DateTime? updatedDate;
+ int? debiturId;
+
+ factory Upload.fromJson(Map json) => Upload(
+ id: json["id"] ?? null,
+ keterangan: json["keterangan"] ?? null,
+ file: json["file"] ?? null,
+ createdDate: json["createdDate"] == null
+ ? null
+ : DateTime.parse(json["createdDate"]),
+ updatedDate: json["updatedDate"] == null
+ ? null
+ : DateTime.parse(json["updatedDate"]),
+ debiturId: json["debiturId"] ?? null,
+ );
+
+ Map toJson() => {
+ "id": id ?? null,
+ "keterangan": keterangan ?? null,
+ "file": file ?? null,
+ "createdDate":
+ createdDate == null ? null : createdDate?.toIso8601String(),
+ "updatedDate":
+ updatedDate == null ? null : updatedDate?.toIso8601String(),
+ "debiturId": debiturId ?? null,
};
}
diff --git a/lib/app/modules/asuransi/views/asuransi_view.dart b/lib/app/modules/asuransi/views/asuransi_view.dart
index 1e5c482a..5647ee90 100644
--- a/lib/app/modules/asuransi/views/asuransi_view.dart
+++ b/lib/app/modules/asuransi/views/asuransi_view.dart
@@ -155,7 +155,6 @@ class AsuransiView extends GetView {
keyboardType: TextInputType.number,
validator: FormBuilderValidators.compose([
FormBuilderValidators.required(),
- FormBuilderValidators.numeric(),
]),
autovalidateMode: AutovalidateMode.onUserInteraction,
decoration: const InputDecoration(
diff --git a/lib/app/modules/gallery_image/bindings/gallery_image_binding.dart b/lib/app/modules/gallery_image/bindings/gallery_image_binding.dart
new file mode 100644
index 00000000..32849bc2
--- /dev/null
+++ b/lib/app/modules/gallery_image/bindings/gallery_image_binding.dart
@@ -0,0 +1,12 @@
+import 'package:get/get.dart';
+
+import '../controllers/gallery_image_controller.dart';
+
+class GalleryImageBinding extends Bindings {
+ @override
+ void dependencies() {
+ Get.lazyPut(
+ () => GalleryImageController(),
+ );
+ }
+}
diff --git a/lib/app/modules/gallery_image/controllers/gallery_image_controller.dart b/lib/app/modules/gallery_image/controllers/gallery_image_controller.dart
new file mode 100644
index 00000000..39f9642d
--- /dev/null
+++ b/lib/app/modules/gallery_image/controllers/gallery_image_controller.dart
@@ -0,0 +1,78 @@
+import 'dart:io';
+
+import 'package:akm/app/data/provider/media/save_mediaprovider.dart';
+import 'package:akm/app/models/debitur_model/insight_debitur.model.dart';
+import 'package:dio/dio.dart';
+import 'package:flutter/material.dart';
+import 'package:gallery_saver/gallery_saver.dart';
+import 'package:get/get.dart';
+import 'package:path_provider/path_provider.dart';
+import 'package:share_plus/share_plus.dart';
+
+class GalleryImageController extends GetxController {
+ @override
+ void onInit() {
+ getImages(debiturId.id);
+ super.onInit();
+ }
+
+ var imageList = List.empty(growable: true).obs;
+
+ final isImageLoading = false.obs;
+
+ final isImageListView = false.obs;
+
+ final debiturId = Get.arguments;
+
+ void getImages(int id) {
+ try {
+ isImageLoading(true);
+ MediaProvider().fetchMedia(id).then((resp) {
+ isImageLoading(false);
+ imageList.addAll(resp);
+ }, onError: (e) {
+ isImageLoading(false);
+ Get.snackbar('Error', e.toString());
+ });
+ } catch (e) {
+ isImageLoading(false);
+ Get.snackbar('Error', e.toString());
+ }
+ }
+
+ void shareNetworkImage(String url, String filename) async {
+ Directory tempDir = await getTemporaryDirectory();
+
+ final path = tempDir.path;
+
+ await Dio().download(url, '$path/$filename.jpg');
+
+ Share.shareFiles(['$path/$filename.jpg']);
+ }
+
+ void downloadNetworkImage(
+ String url, String filename, String albumname) async {
+ Directory tempDir = await getTemporaryDirectory();
+
+ final path = tempDir.path;
+
+ await Dio().download(
+ url,
+ '$path/$filename.jpg',
+ );
+
+ GallerySaver.saveImage('$path/$filename.jpg', albumName: albumname);
+
+ Get.snackbar(
+ 'Success',
+ 'Image saved',
+ snackPosition: SnackPosition.BOTTOM,
+ colorText: Colors.white,
+ backgroundColor: Colors.green,
+ icon: const Icon(
+ Icons.check_circle,
+ color: Colors.white,
+ ),
+ );
+ }
+}
diff --git a/lib/app/modules/gallery_image/views/gallery_image_view.dart b/lib/app/modules/gallery_image/views/gallery_image_view.dart
new file mode 100644
index 00000000..ac0b45cd
--- /dev/null
+++ b/lib/app/modules/gallery_image/views/gallery_image_view.dart
@@ -0,0 +1,273 @@
+import 'package:akm/app/routes/app_pages.dart';
+import 'package:fancy_shimmer_image/fancy_shimmer_image.dart';
+import 'package:flutter/material.dart';
+
+import 'package:get/get.dart';
+import 'package:getwidget/getwidget.dart';
+import 'package:intl/intl.dart';
+import 'package:modal_bottom_sheet/modal_bottom_sheet.dart';
+import 'package:photo_view/photo_view.dart';
+import 'package:photo_view/photo_view_gallery.dart';
+import 'package:flutter_staggered_grid_view/flutter_staggered_grid_view.dart';
+
+import '../controllers/gallery_image_controller.dart';
+
+class GalleryImageView extends GetView {
+ GalleryImageView({Key? key}) : super(key: key);
+
+ final data = Get.arguments;
+
+ @override
+ Widget build(BuildContext context) {
+ return Scaffold(
+ appBar: AppBar(
+ title: Text('Gallery: ${data.peminjam1}'),
+ centerTitle: true,
+ actions: [
+ Obx(() => PopupMenuButton(
+ icon: controller.isImageListView.value
+ ? const Icon(
+ // gridview icon
+ Icons.list,
+ )
+ : const Icon(
+ // listview icon
+ Icons.grid_view,
+ ),
+ itemBuilder: (_) {
+ return [
+ PopupMenuItem(
+ child: TextButton(
+ onPressed: () {
+ Get.back();
+ controller.isImageListView.toggle();
+ // Get.toNamed(Routes.GALLERY_IMAGE, arguments: data);
+ },
+ child: controller.isImageListView.value
+ ? const Text('Grid view')
+ : const Text('List view'),
+ ),
+ ),
+ ];
+ },
+ ))
+ ],
+ ),
+ body: Obx(() {
+ if (controller.isImageLoading.value) {
+ return const Center(
+ child: CircularProgressIndicator(),
+ );
+ } else {
+ return controller.isImageListView.value
+ ? ListView.builder(
+ itemCount: controller.imageList.length,
+ itemBuilder: (context, index) {
+ return GestureDetector(
+ onTap: () {
+ // showMaterialModalBottomSheet(
+ // context: context,
+ // builder: (context) => PhotoView(
+ // imageProvider: NetworkImage(
+ // controller.imageList[index].file!,
+ // ),
+ // ),
+ // );
+ },
+ child: GFListTile(
+ avatar: GFAvatar(
+ backgroundImage: NetworkImage(
+ controller.imageList[index].file!,
+ ),
+ shape: GFAvatarShape.square,
+ backgroundColor: Colors.transparent,
+ ),
+ titleText: controller.imageList[index].keterangan,
+ subTitleText: DateFormat('dd MMMM yyyy')
+ .format(controller.imageList[index].createdDate!),
+ icon: Row(
+ children: [
+ GFButton(
+ onPressed: () {
+ controller.shareNetworkImage(
+ controller.imageList[index].file!,
+ controller.imageList[index].keterangan!,
+ );
+ },
+ text: 'Share',
+ color: GFColors.INFO,
+ type: GFButtonType.solid,
+ size: GFSize.LARGE,
+ shape: GFButtonShape.pills,
+ ),
+ const SizedBox(
+ width: 5,
+ ),
+ GFButton(
+ onPressed: () async {
+ try {
+ controller.downloadNetworkImage(
+ controller.imageList[index].file!,
+ controller.imageList[index].keterangan!,
+ 'AKM-${data.peminjam1}',
+ );
+ } on Exception catch (error) {
+ Get.snackbar('Error', error.toString());
+ }
+ },
+ text: 'Download',
+ color: GFColors.SUCCESS,
+ type: GFButtonType.solid,
+ size: GFSize.LARGE,
+ shape: GFButtonShape.pills,
+ ),
+ ],
+ ),
+ ),
+ );
+ },
+ )
+ : GridView.custom(
+ gridDelegate: SliverQuiltedGridDelegate(
+ crossAxisCount: 4,
+ mainAxisSpacing: 4,
+ crossAxisSpacing: 4,
+ repeatPattern: QuiltedGridRepeatPattern.inverted,
+ pattern: [
+ const QuiltedGridTile(2, 2),
+ const QuiltedGridTile(1, 1),
+ const QuiltedGridTile(1, 1),
+ const QuiltedGridTile(1, 2),
+ ],
+ ),
+ childrenDelegate: SliverChildBuilderDelegate(
+ (context, index) {
+ return GestureDetector(
+ onTap: () {
+ showMaterialModalBottomSheet(
+ backgroundColor: Colors.transparent,
+ context: context,
+ builder: (context) => PhotoViewGallery.builder(
+ backgroundDecoration: const BoxDecoration(
+ color: Colors.black,
+ ),
+ allowImplicitScrolling: true,
+ enableRotation: true,
+ loadingBuilder: (context, event) => const Center(
+ child: CircularProgressIndicator(
+ color: Colors.red,
+ ),
+ ),
+ pageController: PageController(
+ initialPage: index,
+ ),
+ scrollPhysics: const BouncingScrollPhysics(),
+ itemCount: controller.imageList.length,
+ onPageChanged: (index) {
+ controller.imageList[index].id;
+ },
+ builder: (context, index) {
+ return PhotoViewGalleryPageOptions(
+ imageProvider: NetworkImage(
+ controller.imageList[index].file!),
+ heroAttributes: PhotoViewHeroAttributes(
+ tag: controller.imageList[index].id
+ .toString(),
+ ),
+ );
+ },
+ // loadingBuilder: (context, event) => Container(
+ // color: Colors.grey[200],
+ // child: Center(
+ // child: SizedBox(
+ // width: 20.0,
+ // height: 20.0,
+ // child: CircularProgressIndicator(
+ // value: event == null
+ // ? 0
+ // : event.cumulativeBytesLoaded /
+ // event.expectedTotalBytes!,
+ // ),
+ // ),
+ // ),
+ // ),
+ ),
+ );
+ },
+ child: FancyShimmerImage(
+ boxFit: BoxFit.cover,
+ imageUrl: controller.imageList[index].file!,
+ shimmerBaseColor: Colors.grey[300]!,
+ shimmerHighlightColor: Colors.grey[100]!,
+ ),
+ );
+ },
+ childCount: controller.imageList.length,
+ ),
+ );
+ }
+ }),
+ floatingActionButton: FloatingActionButton(
+ onPressed: () {
+ Get.toNamed(Routes.MEDIA, arguments: data);
+ },
+ child: const Icon(Icons.add),
+ ),
+ );
+ }
+}
+
+// GridView.builder(
+// itemCount: controller.imageList.length,
+// gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount(
+// crossAxisCount: 2,
+// ),
+// itemBuilder: (context, index) {
+// return GestureDetector(
+// onTap: () {
+// showMaterialModalBottomSheet(
+// context: context,
+// builder: (context) => PhotoViewGallery.builder(
+// pageController: PageController(
+// initialPage: index,
+// ),
+// scrollPhysics: const BouncingScrollPhysics(),
+// itemCount: controller.imageList.length,
+// onPageChanged: (index) {
+// controller.imageList[index].id;
+// },
+// builder: (context, index) {
+// return PhotoViewGalleryPageOptions(
+// imageProvider: NetworkImage(
+// controller.imageList[index].file!),
+// heroAttributes: PhotoViewHeroAttributes(
+// tag:
+// controller.imageList[index].id.toString(),
+// ),
+// );
+// },
+// loadingBuilder: (context, event) => Center(
+// child: SizedBox(
+// width: 20.0,
+// height: 20.0,
+// child: CircularProgressIndicator(
+// value: event == null
+// ? 0
+// : event.cumulativeBytesLoaded /
+// event.expectedTotalBytes!,
+// ),
+// ),
+// ),
+// ),
+// );
+// },
+// child: Container(
+// margin: const EdgeInsets.all(5),
+// child: FancyShimmerImage(
+// boxFit: BoxFit.cover,
+// imageUrl: controller.imageList[index].file!,
+// ),
+// ),
+// );
+// },
+// );
\ No newline at end of file
diff --git a/lib/app/modules/ijin_legitimasi/views/ijin_legitimasi_view.dart b/lib/app/modules/ijin_legitimasi/views/ijin_legitimasi_view.dart
index ec093ab8..4fdef77b 100644
--- a/lib/app/modules/ijin_legitimasi/views/ijin_legitimasi_view.dart
+++ b/lib/app/modules/ijin_legitimasi/views/ijin_legitimasi_view.dart
@@ -75,18 +75,19 @@ class IjinLegitimasiView extends GetView {
// inherits the delay & duration from move,
),
FormBuilderTextField(
- name: 'jenisIjinLegitimasi',
- validator: FormBuilderValidators.required(),
- autovalidateMode: AutovalidateMode.onUserInteraction,
- decoration: const InputDecoration(
- prefixIcon: Icon(
- FontAwesomeIcons.solidFileLines,
- ),
- labelText: 'Jenis Ijin',
- border: OutlineInputBorder(),
- hintText: 'Surat Keterangan Usaha',
+ name: 'jenisIjinLegitimasi',
+ validator: FormBuilderValidators.required(),
+ autovalidateMode: AutovalidateMode.onUserInteraction,
+ decoration: const InputDecoration(
+ prefixIcon: Icon(
+ FontAwesomeIcons.solidFileLines,
),
- controller: controller.jenisIjinLegitimasi),
+ labelText: 'Jenis Ijin',
+ border: OutlineInputBorder(),
+ hintText: 'Surat Keterangan Usaha',
+ ),
+ controller: controller.jenisIjinLegitimasi,
+ ),
const SizedBox(
height: 20.0,
),
diff --git a/lib/app/modules/insight_debitur/views/insight_debitur_view.dart b/lib/app/modules/insight_debitur/views/insight_debitur_view.dart
index 4363b474..3da46ca7 100644
--- a/lib/app/modules/insight_debitur/views/insight_debitur_view.dart
+++ b/lib/app/modules/insight_debitur/views/insight_debitur_view.dart
@@ -59,7 +59,9 @@ class InsightDebiturView extends GetView {
body: CustomScrollView(
slivers: [
SliverAppBar(
- iconTheme: const IconThemeData(color: primaryColor),
+ iconTheme: const IconThemeData(
+ color: primaryColor,
+ ),
backgroundColor: Colors.transparent,
bottom: PreferredSize(
preferredSize: const Size.fromHeight(0),
@@ -206,6 +208,17 @@ class InsightDebiturView extends GetView {
},
icon: const Icon(FontAwesomeIcons.pencil),
),
+ IconButton(
+ onPressed: () {
+ Get.toNamed(Routes.GALLERY_IMAGE,
+ arguments: controller.insightDebitur.value);
+ },
+ icon: const Icon(
+ FontAwesomeIcons.photoFilm,
+ ),
+ enableFeedback: true,
+ color: primaryColor,
+ ),
IconButton(
color: primaryColor,
enableFeedback: true,
diff --git a/lib/app/modules/media/bindings/media_binding.dart b/lib/app/modules/media/bindings/media_binding.dart
new file mode 100644
index 00000000..46df7bf7
--- /dev/null
+++ b/lib/app/modules/media/bindings/media_binding.dart
@@ -0,0 +1,12 @@
+import 'package:get/get.dart';
+
+import '../controllers/media_controller.dart';
+
+class MediaBinding extends Bindings {
+ @override
+ void dependencies() {
+ Get.lazyPut(
+ () => MediaController(),
+ );
+ }
+}
diff --git a/lib/app/modules/media/controllers/media_controller.dart b/lib/app/modules/media/controllers/media_controller.dart
new file mode 100644
index 00000000..23f9edf7
--- /dev/null
+++ b/lib/app/modules/media/controllers/media_controller.dart
@@ -0,0 +1,73 @@
+import 'package:akm/app/data/provider/media/save_mediaprovider.dart';
+import 'package:akm/app/modules/gallery_image/controllers/gallery_image_controller.dart';
+import 'package:akm/app/modules/insight_debitur/controllers/insight_debitur_controller.dart';
+import 'package:akm/app/widget/upload_screen.dart';
+import 'package:awesome_dialog/awesome_dialog.dart';
+import 'package:flutter/material.dart';
+import 'package:flutter_form_builder/flutter_form_builder.dart';
+import 'package:get/get.dart';
+
+class MediaController extends GetxController {
+ var keterangan = TextEditingController();
+
+ final debiturController = Get.put(InsightDebiturController());
+ final galleryController = Get.put(GalleryImageController());
+
+ final formKey = GlobalKey();
+
+ final isMediaProcessing = false.obs;
+
+ void saveMedia(id) {
+ final body = {
+ 'keterangan': keterangan.text,
+ 'file': formKey.currentState?.fields['file']?.value[0].path,
+ };
+
+ try {
+ isMediaProcessing(true);
+ Get.dialog(
+ const UploadScreen(),
+ barrierDismissible: false,
+ );
+ MediaProvider().saveMedia(id, body).then((resp) {
+ isMediaProcessing(false);
+ clearForm();
+ galleryController.imageList.clear();
+ galleryController.getImages(id);
+ Get.back();
+ debiturController.fetchOneDebitur(id);
+ Get.snackbar(
+ 'Success',
+ 'File berhasil disimpan',
+ backgroundColor: Colors.green,
+ colorText: Colors.white,
+ );
+ }, onError: (e) {
+ isMediaProcessing(false);
+ AwesomeDialog(
+ context: Get.context!,
+ dialogType: DialogType.error,
+ animType: AnimType.bottomSlide,
+ title: 'Error',
+ desc: e.toString(),
+ btnOkOnPress: () {},
+ ).show();
+ });
+ } catch (e) {
+ isMediaProcessing(false);
+ AwesomeDialog(
+ context: Get.context!,
+ dialogType: DialogType.error,
+ animType: AnimType.bottomSlide,
+ title: 'Error',
+ desc: e.toString(),
+ btnOkOnPress: () {},
+ ).show();
+ }
+ }
+
+ void clearForm() {
+ formKey.currentState?.fields['file']?.reset();
+ keterangan.clear();
+ }
+}
diff --git a/lib/app/modules/media/views/media_view.dart b/lib/app/modules/media/views/media_view.dart
new file mode 100644
index 00000000..2359437c
--- /dev/null
+++ b/lib/app/modules/media/views/media_view.dart
@@ -0,0 +1,167 @@
+import 'package:akm/app/common/style.dart';
+import 'package:flutter/material.dart';
+import 'package:flutter_animate/flutter_animate.dart';
+import 'package:flutter_form_builder/flutter_form_builder.dart';
+import 'package:font_awesome_flutter/font_awesome_flutter.dart';
+import 'package:form_builder_image_picker/form_builder_image_picker.dart';
+import 'package:form_builder_validators/form_builder_validators.dart';
+
+import 'package:get/get.dart';
+import 'package:getwidget/getwidget.dart';
+import 'package:lottie/lottie.dart';
+
+import '../controllers/media_controller.dart';
+
+class MediaView extends GetView {
+ MediaView({Key? key}) : super(key: key);
+
+ final data = Get.arguments;
+
+ @override
+ Widget build(BuildContext context) {
+ return Scaffold(
+ appBar: AppBar(
+ title: const Text('Upload Gambar'),
+ centerTitle: true,
+ ),
+ body: FormBuilder(
+ key: controller.formKey,
+ child: Padding(
+ padding: const EdgeInsets.all(16.0),
+ child: Column(
+ crossAxisAlignment: CrossAxisAlignment.start,
+ mainAxisAlignment: MainAxisAlignment.spaceBetween,
+ children: [
+ Column(
+ crossAxisAlignment: CrossAxisAlignment.start,
+ children: [
+ Animate(
+ child: const GFCard(
+ boxFit: BoxFit.cover,
+ titlePosition: GFPosition.start,
+ showOverlayImage: true,
+ imageOverlay: AssetImage(
+ 'assets/images/home/bi_fast.png',
+ ),
+ title: GFListTile(
+ title: Text(
+ '',
+ style: TextStyle(
+ color: Colors.white,
+ fontSize: 47,
+ fontWeight: FontWeight.bold,
+ ),
+ ),
+ ),
+ content: Text(
+ '',
+ style: TextStyle(
+ color: Colors.white,
+ fontSize: 20,
+ fontWeight: FontWeight.bold),
+ ),
+ )
+ .animate()
+ .fadeIn() // uses `Animate.defaultDuration`
+ .scale() // inherits duration from fadeIn
+ .move(
+ delay: 300.ms,
+ duration:
+ 600.ms) // runs after the above w/new duration
+ // inherits the delay & duration from move,
+ ),
+ FormBuilderTextField(
+ name: 'keterangan',
+ validator: FormBuilderValidators.required(),
+ decoration: const InputDecoration(
+ prefixIcon: Icon(
+ FontAwesomeIcons.solidFileLines,
+ ),
+ labelText: 'Keterangan',
+ border: OutlineInputBorder(),
+ hintText: 'Gambar / Dokumen',
+ ),
+ controller: controller.keterangan,
+ ),
+ const SizedBox(
+ height: 20,
+ ),
+ FormBuilderImagePicker(
+ name: 'file',
+ bottomSheetPadding: const EdgeInsets.all(16),
+ fit: BoxFit.cover,
+ cameraLabel: const Text('Ambil Foto'),
+ previewAutoSizeWidth: true,
+ galleryLabel: const Text('Pilih dari Galeri'),
+ loadingWidget: ((context) => const Center(
+ child: CircularProgressIndicator(),
+ )),
+ placeholderWidget: Center(
+ child: Column(
+ crossAxisAlignment: CrossAxisAlignment.start,
+ children: [
+ Center(
+ child: Lottie.asset(
+ 'assets/images/home/upload-files.zip',
+ frameRate: FrameRate.max,
+ height: 112,
+ repeat: true,
+ errorBuilder: (context, error, stackTrace) {
+ return const Text(
+ 'Gagal memuat animasi',
+ style: TextStyle(
+ color: Colors.red,
+ ),
+ );
+ },
+ ),
+ ),
+ const Center(
+ child: Text(
+ 'Klik untuk memilih gambar / dokumen ',
+ style: TextStyle(
+ color: Colors.grey,
+ ),
+ ),
+ ),
+ ],
+ ),
+ ),
+ imageQuality: 50,
+ showDecoration: true,
+ maxImages: 1,
+ validator: FormBuilderValidators.required(),
+ autovalidateMode: AutovalidateMode.onUserInteraction,
+ decoration: const InputDecoration(
+ border: OutlineInputBorder(),
+ hintText: 'Gambar / Dokumen',
+ ),
+ )
+ ],
+ ),
+ Obx(
+ () => GFButton(
+ color: primaryColor,
+ size: GFSize.LARGE,
+ fullWidthButton: true,
+ onPressed: () {
+ if (controller.formKey.currentState?.saveAndValidate() ??
+ false) {
+ controller.saveMedia(data.id);
+ } else {
+ debugPrint(
+ controller.formKey.currentState?.value.toString());
+ debugPrint('validation failed');
+ }
+ },
+ text:
+ controller.isMediaProcessing.value ? 'Loading' : 'Upload',
+ ),
+ )
+ ],
+ ),
+ ),
+ ),
+ );
+ }
+}
diff --git a/lib/app/routes/app_pages.dart b/lib/app/routes/app_pages.dart
index cf38eb24..9d7e5524 100644
--- a/lib/app/routes/app_pages.dart
+++ b/lib/app/routes/app_pages.dart
@@ -1,9 +1,5 @@
-// 📦 Package imports:
import 'package:get/get.dart';
-// 🌎 Project imports:
-import 'package:akm/app/modules/asuransi/views/edit_asuransi_view.dart';
-import 'package:akm/app/modules/asuransi/views/lihat_asuransi_view.dart';
import '../modules/agunan_analisis/bindings/agunan_analisis_binding.dart';
import '../modules/agunan_analisis/views/agunan_analisis_view.dart';
import '../modules/agunan_analisis/views/lihat_agunan_analisis_view_view.dart';
@@ -15,6 +11,8 @@ import '../modules/agunan_pilih/bindings/agunan_pilih_binding.dart';
import '../modules/agunan_pilih/views/agunan_pilih_view.dart';
import '../modules/asuransi/bindings/asuransi_binding.dart';
import '../modules/asuransi/views/asuransi_view.dart';
+import '../modules/asuransi/views/edit_asuransi_view.dart';
+import '../modules/asuransi/views/lihat_asuransi_view.dart';
import '../modules/bisnis_analisis/bindings/bisnis_analisis_binding.dart';
import '../modules/bisnis_analisis/views/bisnis_analisis_view.dart';
import '../modules/bisnis_analisis/views/edit_bisnis_analisis_view.dart';
@@ -24,6 +22,8 @@ import '../modules/debitur_deploy/views/debitur_deploy_view.dart';
import '../modules/debitur_real/bindings/debitur_real_binding.dart';
import '../modules/debitur_real/views/debitur_edit_view.dart';
import '../modules/debitur_real/views/debitur_onboarding_view.dart';
+import '../modules/gallery_image/bindings/gallery_image_binding.dart';
+import '../modules/gallery_image/views/gallery_image_view.dart';
import '../modules/home/bindings/home_binding.dart';
import '../modules/home/views/home_view.dart';
import '../modules/ijin_legitimasi/bindings/ijin_legitimasi_binding.dart';
@@ -78,6 +78,8 @@ import '../modules/list_debitur/bindings/list_debitur_binding.dart';
import '../modules/list_debitur/views/list_debitur_view.dart';
import '../modules/list_syarat_lainnya/bindings/list_syarat_lainnya_binding.dart';
import '../modules/list_syarat_lainnya/views/list_syarat_lainnya_view.dart';
+import '../modules/media/bindings/media_binding.dart';
+import '../modules/media/views/media_view.dart';
import '../modules/porsekot_table/bindings/porsekot_table_binding.dart';
import '../modules/porsekot_table/views/porsekot_table_view.dart';
import '../modules/rugi_laba/bindings/rugi_laba_binding.dart';
@@ -95,6 +97,10 @@ import '../modules/usaha_analisis/views/edit_usaha_analisis_view.dart';
import '../modules/usaha_analisis/views/lihat_usaha_analisis_view.dart';
import '../modules/usaha_analisis/views/usaha_analisis_view.dart';
+// 📦 Package imports:
+
+// 🌎 Project imports:
+
// ignore_for_file: constant_identifier_names
part 'app_routes.dart';
@@ -442,5 +448,15 @@ class AppPages {
page: () => EditAsuransiView(),
binding: AsuransiBinding(),
),
+ GetPage(
+ name: _Paths.MEDIA,
+ page: () => MediaView(),
+ binding: MediaBinding(),
+ ),
+ GetPage(
+ name: _Paths.GALLERY_IMAGE,
+ page: () => GalleryImageView(),
+ binding: GalleryImageBinding(),
+ ),
];
}
diff --git a/lib/app/routes/app_routes.dart b/lib/app/routes/app_routes.dart
index 954cdf59..75bd50da 100644
--- a/lib/app/routes/app_routes.dart
+++ b/lib/app/routes/app_routes.dart
@@ -77,6 +77,8 @@ abstract class Routes {
static const ASURANSI = _Paths.ASURANSI;
static const LIHAT_ASURANSI = _Paths.LIHAT_ASURANSI;
static const EDIT_ASURANSI = _Paths.EDIT_ASURANSI;
+ static const MEDIA = _Paths.MEDIA;
+ static const GALLERY_IMAGE = _Paths.GALLERY_IMAGE;
}
abstract class _Paths {
@@ -152,4 +154,6 @@ abstract class _Paths {
static const ASURANSI = '/asuransi';
static const LIHAT_ASURANSI = '/lihat-asurans';
static const EDIT_ASURANSI = '/edit-asuransi';
+ static const MEDIA = '/media';
+ static const GALLERY_IMAGE = '/gallery-image';
}
diff --git a/lib/app/widget/upload_screen.dart b/lib/app/widget/upload_screen.dart
new file mode 100644
index 00000000..fb3f5875
--- /dev/null
+++ b/lib/app/widget/upload_screen.dart
@@ -0,0 +1,65 @@
+import 'package:flutter/material.dart';
+import 'package:lottie/lottie.dart';
+import 'package:scaffold_gradient_background/scaffold_gradient_background.dart';
+
+class UploadScreen extends StatelessWidget {
+ const UploadScreen({super.key});
+
+ @override
+ Widget build(BuildContext context) {
+ return ScaffoldGradientBackground(
+ gradient: LinearGradient(
+ begin: Alignment.topLeft,
+ end: Alignment.bottomRight,
+ colors: [
+ Colors.blue,
+ Colors.blue.shade900,
+ ],
+ ),
+ body: Align(
+ alignment: Alignment.center,
+ child: Container(
+ padding: const EdgeInsets.all(32),
+ child: Column(
+ crossAxisAlignment: CrossAxisAlignment.start,
+ mainAxisAlignment: MainAxisAlignment.center,
+ children: [
+ const Center(
+ child: Text(
+ 'Sedang Mengupload',
+ textAlign: TextAlign.center,
+ style: TextStyle(
+ color: Colors.white,
+ fontSize: 35,
+ fontWeight: FontWeight.bold,
+ ),
+ ),
+ ),
+ Center(
+ child: Lottie.asset(
+ 'assets/images/home/process-upload.zip',
+ frameRate: FrameRate.max,
+ fit: BoxFit.cover,
+ repeat: true,
+ errorBuilder: (context, error, stackTrace) {
+ return const Text(
+ 'Gagal memuat animasi',
+ style: TextStyle(
+ color: Colors.red,
+ ),
+ );
+ },
+ ),
+ ),
+ const Center(
+ child: CircularProgressIndicator(
+ color: Colors.white,
+ ),
+ ),
+ ],
+ ),
+ ),
+ ),
+ );
+ }
+}
diff --git a/macos/Flutter/GeneratedPluginRegistrant.swift b/macos/Flutter/GeneratedPluginRegistrant.swift
index 320ab1cf..b40527f5 100644
--- a/macos/Flutter/GeneratedPluginRegistrant.swift
+++ b/macos/Flutter/GeneratedPluginRegistrant.swift
@@ -9,6 +9,8 @@ import device_info_plus
import geolocator_apple
import path_provider_macos
import printing
+import share_plus
+import sqflite
import url_launcher_macos
func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
@@ -16,5 +18,7 @@ func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
GeolocatorPlugin.register(with: registry.registrar(forPlugin: "GeolocatorPlugin"))
PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin"))
PrintingPlugin.register(with: registry.registrar(forPlugin: "PrintingPlugin"))
+ SharePlusMacosPlugin.register(with: registry.registrar(forPlugin: "SharePlusMacosPlugin"))
+ SqflitePlugin.register(with: registry.registrar(forPlugin: "SqflitePlugin"))
UrlLauncherPlugin.register(with: registry.registrar(forPlugin: "UrlLauncherPlugin"))
}
diff --git a/pubspec.lock b/pubspec.lock
index cd79784d..f3495053 100644
--- a/pubspec.lock
+++ b/pubspec.lock
@@ -85,6 +85,27 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "1.1.0"
+ cached_network_image:
+ dependency: transitive
+ description:
+ name: cached_network_image
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "3.2.3"
+ cached_network_image_platform_interface:
+ dependency: transitive
+ description:
+ name: cached_network_image_platform_interface
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "2.0.0"
+ cached_network_image_web:
+ dependency: transitive
+ description:
+ name: cached_network_image_web
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "1.0.2"
change_app_package_name:
dependency: "direct dev"
description:
@@ -134,6 +155,13 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "1.16.0"
+ community_material_icon:
+ dependency: transitive
+ description:
+ name: community_material_icon
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "5.9.55"
convert:
dependency: transitive
description:
@@ -147,7 +175,7 @@ packages:
name: cross_file
url: "https://pub.dartlang.org"
source: hosted
- version: "0.3.3+1"
+ version: "0.3.3+2"
crypto:
dependency: transitive
description:
@@ -227,6 +255,13 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "7.0.0"
+ dio:
+ dependency: "direct main"
+ description:
+ name: dio
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "4.0.6"
double_back_to_close_app:
dependency: "direct main"
description:
@@ -262,6 +297,13 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "0.1.11"
+ fancy_shimmer_image:
+ dependency: "direct main"
+ description:
+ name: fancy_shimmer_image
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "2.0.2"
ffi:
dependency: transitive
description:
@@ -276,6 +318,13 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "6.1.2"
+ file_picker:
+ dependency: transitive
+ description:
+ name: file_picker
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "5.2.2"
finance:
dependency: "direct main"
description:
@@ -297,6 +346,20 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.1"
+ flutter_blurhash:
+ dependency: transitive
+ description:
+ name: flutter_blurhash
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "0.7.0"
+ flutter_cache_manager:
+ dependency: transitive
+ description:
+ name: flutter_cache_manager
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "3.3.0"
flutter_chips_input:
dependency: transitive
description:
@@ -325,6 +388,15 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.0"
+ flutter_easyloading:
+ dependency: "direct main"
+ description:
+ path: "."
+ ref: develop
+ resolved-ref: "0d811bf4f2a8359e9988033339c2ef48883e4df9"
+ url: "https://github.com/fleetimee/flutter_easyloading"
+ source: git
+ version: "3.0.4"
flutter_echarts:
dependency: "direct main"
description:
@@ -428,6 +500,20 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.0"
+ flutter_spinkit:
+ dependency: transitive
+ description:
+ name: flutter_spinkit
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "5.1.0"
+ flutter_staggered_grid_view:
+ dependency: "direct main"
+ description:
+ name: flutter_staggered_grid_view
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "0.6.2"
flutter_styled_toast:
dependency: "direct main"
description:
@@ -503,6 +589,15 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "8.3.0"
+ form_builder_file_picker:
+ dependency: "direct main"
+ description:
+ path: "."
+ ref: main
+ resolved-ref: e3144ef0732d430a75ec75873c285619089c211f
+ url: "https://github.com/flutter-form-builder-ecosystem/form_builder_file_picker"
+ source: git
+ version: "2.3.0"
form_builder_image_picker:
dependency: "direct main"
description:
@@ -517,6 +612,13 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "8.4.0"
+ gallery_saver:
+ dependency: "direct main"
+ description:
+ name: gallery_saver
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "2.3.2"
geocoding:
dependency: "direct main"
description:
@@ -636,6 +738,13 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "3.2.2"
+ image_downloader:
+ dependency: "direct main"
+ description:
+ name: image_downloader
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "0.31.0"
image_picker:
dependency: "direct main"
description:
@@ -783,6 +892,13 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.0"
+ mime:
+ dependency: transitive
+ description:
+ name: mime
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "1.0.3"
modal_bottom_sheet:
dependency: "direct main"
description:
@@ -818,6 +934,13 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.0"
+ octo_image:
+ dependency: transitive
+ description:
+ name: octo_image
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "1.0.2"
open_filex:
dependency: "direct main"
description:
@@ -861,7 +984,7 @@ packages:
source: hosted
version: "1.0.1"
path_provider:
- dependency: transitive
+ dependency: "direct main"
description:
name: path_provider
url: "https://pub.dartlang.org"
@@ -916,6 +1039,48 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "3.8.4"
+ pedantic:
+ dependency: transitive
+ description:
+ name: pedantic
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "1.11.1"
+ permission_handler:
+ dependency: transitive
+ description:
+ name: permission_handler
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "10.2.0"
+ permission_handler_android:
+ dependency: transitive
+ description:
+ name: permission_handler_android
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "10.2.0"
+ permission_handler_apple:
+ dependency: transitive
+ description:
+ name: permission_handler_apple
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "9.0.7"
+ permission_handler_platform_interface:
+ dependency: transitive
+ description:
+ name: permission_handler_platform_interface
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "3.9.0"
+ permission_handler_windows:
+ dependency: transitive
+ description:
+ name: permission_handler_windows
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "0.1.2"
petitparser:
dependency: transitive
description:
@@ -923,6 +1088,13 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "5.0.0"
+ photo_view:
+ dependency: "direct main"
+ description:
+ name: photo_view
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "0.14.0"
platform:
dependency: transitive
description:
@@ -1030,6 +1202,13 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "0.9.1"
+ rxdart:
+ dependency: transitive
+ description:
+ name: rxdart
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "0.27.7"
scaffold_gradient_background:
dependency: "direct main"
description:
@@ -1037,6 +1216,20 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "1.0.3+1"
+ share_plus:
+ dependency: "direct main"
+ description:
+ name: share_plus
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "6.3.0"
+ share_plus_platform_interface:
+ dependency: transitive
+ description:
+ name: share_plus_platform_interface
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "3.2.0"
shimmer:
dependency: "direct main"
description:
@@ -1070,6 +1263,20 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "1.8.2"
+ sqflite:
+ dependency: transitive
+ description:
+ name: sqflite
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "2.2.0+3"
+ sqflite_common:
+ dependency: transitive
+ description:
+ name: sqflite_common
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "2.4.0+2"
stack_trace:
dependency: transitive
description:
@@ -1084,6 +1291,13 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "1.1.0"
+ synchronized:
+ dependency: transitive
+ description:
+ name: synchronized
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "3.0.0+3"
terbilang_id:
dependency: "direct main"
description:
@@ -1174,7 +1388,7 @@ packages:
name: url_launcher_platform_interface
url: "https://pub.dartlang.org"
source: hosted
- version: "2.1.0"
+ version: "2.1.1"
url_launcher_web:
dependency: transitive
description:
@@ -1189,6 +1403,13 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "3.0.1"
+ uuid:
+ dependency: transitive
+ description:
+ name: uuid
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "3.0.7"
vector_math:
dependency: "direct main"
description:
@@ -1244,7 +1465,7 @@ packages:
name: win32
url: "https://pub.dartlang.org"
source: hosted
- version: "2.7.0"
+ version: "3.1.2"
wkt_parser:
dependency: transitive
description:
diff --git a/pubspec.yaml b/pubspec.yaml
index b8811019..6431a0e4 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -1,5 +1,5 @@
name: akm
-version: 1.0.6+14
+version: 1.0.7+15
publish_to: none
description: Mobile app untuk Analisis Kredit Mikro built with Flutter and NodeJS.
environment:
@@ -16,10 +16,12 @@ dependencies:
ref: master
data_table_2: ^2.3.8
device_info_plus: ^8.0.0
+ dio: ^4.0.6
double_back_to_close_app: ^2.1.0
empty_widget: ^0.0.5
extended_masked_text: ^2.3.1
faker_dart: ^0.1.11
+ fancy_shimmer_image: ^2.0.2
finance:
git:
url: https://github.com/yuvaraja2303/finance/
@@ -28,6 +30,10 @@ dependencies:
sdk: flutter
flutter_animate: ^2.0.1
flutter_custom_clippers: ^2.0.0
+ flutter_easyloading:
+ git:
+ url: https://github.com/fleetimee/flutter_easyloading
+ ref: develop
flutter_echarts: ^2.4.0
flutter_form_builder: ^7.7.0
flutter_localizations:
@@ -37,19 +43,26 @@ dependencies:
flutter_markdown: ^0.6.13
flutter_native_splash: ^2.2.15
flutter_slidable: ^2.0.0
+ flutter_staggered_grid_view: ^0.6.2
flutter_styled_toast: ^2.1.3
flutter_svg: ^1.1.6
flutter_tex_js: ^1.2.17
font_awesome_flutter: ^10.2.1
form_builder_extra_fields: ^8.3.0
+ form_builder_file_picker:
+ git:
+ url: https://github.com/flutter-form-builder-ecosystem/form_builder_file_picker
+ ref: main
form_builder_image_picker: ^3.1.0
form_builder_validators: ^8.4.0
+ gallery_saver: ^2.3.2
geocoding: ^2.0.5
geolocator: ^9.0.2
get: 4.6.5
getwidget: ^3.0.1
google_fonts: ^3.0.1
http: ^0.13.5
+ image_downloader: 0.31.0
image_picker: ^0.8.6
intl: ^0.17.0
latlong2: ^0.8.1
@@ -61,13 +74,16 @@ dependencies:
numerus: ^2.0.0
open_filex: ^4.3.1
open_street_map_search_and_pick: ^0.0.15
+ path_provider: ^2.0.11
pdf: ^3.8.4
+ photo_view: ^0.14.0
printing: ^5.9.3
responsive_framework:
git:
url: https://github.com/Codelessly/ResponsiveFramework
ref: master
scaffold_gradient_background: ^1.0.3+1
+ share_plus: ^6.3.0
shimmer: ^2.0.0
terbilang_id: ^0.1.0
url_launcher: ^6.1.7
diff --git a/thunder-tests/thunderCollection.json b/thunder-tests/thunderCollection.json
index 954ad8bc..23d56cdd 100644
--- a/thunder-tests/thunderCollection.json
+++ b/thunder-tests/thunderCollection.json
@@ -1,82 +1,4 @@
[
- {
- "_id": "55df9d89-9cac-4748-9c41-d53dff5232d8",
- "colName": "Accesscode Talker",
- "created": "2022-07-01T21:32:19.213Z",
- "sortNum": 10000,
- "folders": [
- {
- "_id": "856c36ff-0fa5-49eb-b2b5-b199bfefc8fa",
- "name": "Debitur",
- "containerId": "",
- "created": "2022-07-06T02:33:40.463Z",
- "sortNum": 10000
- },
- {
- "_id": "11269e40-da53-4a29-8635-bdae288ca8e5",
- "name": "Penghasilan Tetap",
- "containerId": "",
- "created": "2022-07-06T02:33:58.928Z",
- "sortNum": 20000
- },
- {
- "_id": "2c98df92-734e-49b1-afdd-d4f583ee77a2",
- "name": "Penghasilan Tidak Tetap",
- "containerId": "",
- "created": "2022-07-06T04:08:40.212Z",
- "sortNum": 30000
- },
- {
- "_id": "afeb3855-8ba9-4e18-8445-d35fe3fb1b8d",
- "name": "Users",
- "containerId": "",
- "created": "2022-07-11T01:02:59.920Z",
- "sortNum": 40000
- },
- {
- "_id": "37cc2a2e-484a-42af-8e69-ce87ba83bffc",
- "name": "Role",
- "containerId": "",
- "created": "2022-07-11T01:03:35.951Z",
- "sortNum": 50000
- },
- {
- "_id": "a37e001a-b116-4dda-8452-246da85dd8e2",
- "name": "Pro Pengajuan",
- "containerId": "",
- "created": "2022-07-11T03:12:35.785Z",
- "sortNum": 60000
- },
- {
- "_id": "0e776d57-21a5-43fe-b762-89c20d81d1ef",
- "name": "File Upload",
- "containerId": "",
- "created": "2022-07-13T02:39:09.533Z",
- "sortNum": 70000
- },
- {
- "_id": "4109a690-be92-431c-b24a-4d6748a6c18c",
- "name": "Agunan",
- "containerId": "",
- "created": "2022-07-13T07:11:11.865Z",
- "sortNum": 80000
- },
- {
- "_id": "0c58901b-fee7-4c4e-8907-9415f57bd1dc",
- "name": "Business Analytics",
- "containerId": "",
- "created": "2022-07-13T07:11:32.363Z",
- "sortNum": 90000
- },
- {
- "_id": "5b184829-c3d6-499a-b09a-774c34893892",
- "name": "Character Analysis",
- "containerId": "",
- "created": "2022-07-13T15:02:02.707Z",
- "sortNum": 100000
- }
- ]
- },
{
"_id": "3e42347a-acbf-4266-ae30-f61da3c0cc82",
"colName": "Neo Claudius",
@@ -236,6 +158,13 @@
"containerId": "",
"created": "2022-11-09T01:34:35.377Z",
"sortNum": 200000
+ },
+ {
+ "_id": "3b567af2-0207-4ab8-ad8a-d6f6169ebd11",
+ "name": "Upload Image",
+ "containerId": "",
+ "created": "2022-11-28T04:38:45.294Z",
+ "sortNum": 210000
}
]
}
diff --git a/thunder-tests/thunderEnvironment.json b/thunder-tests/thunderEnvironment.json
index e5870389..502fa896 100644
--- a/thunder-tests/thunderEnvironment.json
+++ b/thunder-tests/thunderEnvironment.json
@@ -2,7 +2,7 @@
{
"_id": "664f5f60-ada2-4f7b-9346-3664891144d4",
"name": "neo-claudius",
- "default": true,
+ "default": false,
"sortNum": 10000,
"created": "2022-07-05T23:42:20.152Z",
"modified": "2022-11-13T21:48:56.624Z",
@@ -16,7 +16,7 @@
{
"_id": "484e6cb8-b6c0-48a9-b8f7-edaa58016485",
"name": "A",
- "default": false,
+ "default": true,
"sortNum": 20000,
"created": "2022-09-20T05:25:05.997Z",
"modified": "2022-11-11T03:26:23.446Z",
diff --git a/thunder-tests/thunderclient.json b/thunder-tests/thunderclient.json
index 22757bc2..980517e8 100644
--- a/thunder-tests/thunderclient.json
+++ b/thunder-tests/thunderclient.json
@@ -1,600 +1,14 @@
[
- {
- "_id": "6ad95a8e-22b2-4b66-b5e5-362286edfc40",
- "colId": "55df9d89-9cac-4748-9c41-d53dff5232d8",
- "containerId": "856c36ff-0fa5-49eb-b2b5-b199bfefc8fa",
- "name": "Get all debitur",
- "url": "http://localhost:3000/debiturs/",
- "method": "GET",
- "sortNum": 10000,
- "created": "2022-07-01T21:33:08.123Z",
- "modified": "2022-08-24T04:19:41.862Z",
- "headers": [],
- "params": [],
- "tests": []
- },
- {
- "_id": "41791ff4-03bd-4dd1-8e3f-8e6911a8b1fc",
- "colId": "55df9d89-9cac-4748-9c41-d53dff5232d8",
- "containerId": "856c36ff-0fa5-49eb-b2b5-b199bfefc8fa",
- "name": "Get debitur by id",
- "url": "http://localhost:3000/debiturs/1",
- "method": "GET",
- "sortNum": 30000,
- "created": "2022-07-02T12:33:20.525Z",
- "modified": "2022-07-06T04:25:04.692Z",
- "headers": [],
- "params": [],
- "tests": []
- },
- {
- "_id": "fc459d0e-98b4-4cbd-88c8-435449b29002",
- "colId": "55df9d89-9cac-4748-9c41-d53dff5232d8",
- "containerId": "856c36ff-0fa5-49eb-b2b5-b199bfefc8fa",
- "name": "Delete debitur",
- "url": "http://localhost:3000/debiturs/3",
- "method": "DELETE",
- "sortNum": 40000,
- "created": "2022-07-02T12:40:04.374Z",
- "modified": "2022-07-14T02:19:26.373Z",
- "headers": [],
- "params": [],
- "tests": []
- },
- {
- "_id": "156119f0-d287-4494-aeec-27cc40bdca34",
- "colId": "55df9d89-9cac-4748-9c41-d53dff5232d8",
- "containerId": "11269e40-da53-4a29-8635-bdae288ca8e5",
- "name": "Get fixed income",
- "url": "http://localhost:3000/fixeds",
- "method": "GET",
- "sortNum": 10000,
- "created": "2022-07-05T02:08:52.999Z",
- "modified": "2022-07-11T04:58:15.711Z",
- "headers": [],
- "params": [
- {
- "name": "limit",
- "value": "2",
- "isDisabled": true,
- "isPath": false
- },
- {
- "name": "fields",
- "value": "jenis_pengajuan,jenis_penggunaan",
- "isDisabled": true,
- "isPath": false
- }
- ],
- "tests": []
- },
- {
- "_id": "1e99e827-8277-4bfa-8ecf-51ab01c0933d",
- "colId": "55df9d89-9cac-4748-9c41-d53dff5232d8",
- "containerId": "11269e40-da53-4a29-8635-bdae288ca8e5",
- "name": "Get fixed income by id",
- "url": "http://localhost:3000/fixeds/2",
- "method": "GET",
- "sortNum": 40000,
- "created": "2022-07-05T02:10:11.631Z",
- "modified": "2022-07-06T02:34:04.451Z",
- "headers": [],
- "params": [],
- "tests": []
- },
- {
- "_id": "ced545f2-4482-4da3-8289-1cbf8a8375dc",
- "colId": "55df9d89-9cac-4748-9c41-d53dff5232d8",
- "containerId": "11269e40-da53-4a29-8635-bdae288ca8e5",
- "name": "Delete fixed income",
- "url": "http://localhost:3000/fixeds/27",
- "method": "DELETE",
- "sortNum": 50000,
- "created": "2022-07-05T02:19:55.484Z",
- "modified": "2022-07-14T02:18:21.656Z",
- "headers": [],
- "params": [],
- "tests": []
- },
- {
- "_id": "f3e8f1e5-9ca8-4ea3-a078-30ffef116b0f",
- "colId": "55df9d89-9cac-4748-9c41-d53dff5232d8",
- "containerId": "11269e40-da53-4a29-8635-bdae288ca8e5",
- "name": "Update fixed income",
- "url": "http://localhost:3000/fixeds",
- "method": "POST",
- "sortNum": 30000,
- "created": "2022-07-05T06:52:25.886Z",
- "modified": "2022-08-24T23:54:35.308Z",
- "headers": [],
- "params": [],
- "body": {
- "type": "json",
- "raw": "{\n \"jenis_pengajuan\": \"BARU\",\n \"plafon_fasilitas\": \"1000000\",\n \"jenis_penggunaan\": \"INVESTASI\",\n \"tujuan_penggunaan\": \"Membeli hewan qurban\",\n \"jangka_waktu\": \"5 Bulan\",\n \"penghasilan_pemohon\": \"250000\",\n \"potongan_gaji\": \"10000\",\n \"sisa_penghasilan\": \"230000\",\n \"nama_pejabat_penanggung_jawab\": \"Evil La Twin\",\n \"jabatan_pejabat_penanggung_jawab\": \"Platinum\",\n \"nama_pejabat_pemotong_gaji\": \"Eldlich\",\n \"jabatan_pejabat_pemotong_gaji\": \"Gold\",\n \"no_rekening\": \"552454212\",\n \"tanggal_mulai_kredit\": \"2022-06-11\",\n \"jangka_waktu_kredit\": \"1 Tahun\",\n \"plafon_kredit\": \"10000000\",\n \"debitur\": \"76\",\n \"createdBy\": 3\n}",
- "form": []
- },
- "tests": []
- },
- {
- "_id": "63660606-5a7c-4052-8a15-889ded7f2dd7",
- "colId": "55df9d89-9cac-4748-9c41-d53dff5232d8",
- "containerId": "856c36ff-0fa5-49eb-b2b5-b199bfefc8fa",
- "name": "Edit debitur",
- "url": "http://localhost:3000/debiturs/",
- "method": "POST",
- "sortNum": 25000,
- "created": "2022-07-06T04:25:16.463Z",
- "modified": "2022-07-19T07:38:19.016Z",
- "headers": [],
- "params": [],
- "body": {
- "type": "json",
- "raw": "{\n \"nik\": \"15421\",\n \"nama_debitur\": \"Novian Andika\",\n \"alamat\": \"Jln Affandi No 20\",\n \"tempat_lahir\": \"Yogyakarta\",\n \"tanggal_lahir\": \"1994-11-09\",\n \"pekerjaan\": \"Customer Service\",\n \"agama\": \"Islam\",\n \"gender\": \"Perempuan\",\n \"no_telp\": \"084545245454\",\n \"no_seluler\": \"0828783232\",\n \"instansi\": \"Swasta\",\n \"email\": \"soniaekap2@gmail.com\",\n \"nama_ibu\": \"Dunno\",\n \"relationship\": \"Menikah\",\n \"nama_pasangan\": \"Novian Andika\",\n \"pekerjaan_pasangan\": \"Software Developer\",\n \"tgl_lahir_pasangan\": \"1997-09-04\",\n \"tempat_lahir_pasangan\": \"Jakarta\",\n \"nik_pasangan\": 54545454,\n \"total_income\": \"9999999999\",\n \"bidang_usaha\": \"Jasa Pengiriman\",\n \"jumlah_tanggungan\": \"0\",\n \"provinsi\": \"Daerah Istimewa Yogyakarta\",\n \"kabupaten\": \"Sleman\",\n \"kecamatan\": \"Depok\",\n \"kelurahan\": \"Condongcatur\",\n \"rt\": \"01\",\n \"rw\": \"05\",\n \"kode_pos\": \"14045\",\n \"createdBy\": 3\n}",
- "form": []
- },
- "tests": []
- },
- {
- "_id": "d7d446fa-8354-48f0-9ab8-7d24188fda86",
- "colId": "55df9d89-9cac-4748-9c41-d53dff5232d8",
- "containerId": "856c36ff-0fa5-49eb-b2b5-b199bfefc8fa",
- "name": "Filtering",
- "url": "http://localhost:3000/debiturs/?s={\"no_ktp1\": \"12345678\"}",
- "method": "GET",
- "sortNum": 15000,
- "created": "2022-07-06T04:26:15.140Z",
- "modified": "2022-08-21T06:54:37.368Z",
- "headers": [],
- "params": [
- {
- "name": "s",
- "value": "{\"no_ktp1\": \"12345678\"}",
- "isPath": false
- },
- {
- "name": "filter",
- "value": "nik||$eq||500000",
- "isDisabled": true,
- "isPath": false
- },
- {
- "name": "limit",
- "value": "1",
- "isDisabled": true,
- "isPath": false
- },
- {
- "name": "fields",
- "value": "id,nama_debitur",
- "isDisabled": true,
- "isPath": false
- }
- ],
- "tests": []
- },
- {
- "_id": "01242775-ea13-4a12-b5a5-5bf34a6fabdb",
- "colId": "55df9d89-9cac-4748-9c41-d53dff5232d8",
- "containerId": "2c98df92-734e-49b1-afdd-d4f583ee77a2",
- "name": "Get non-fixed income",
- "url": "http://localhost:3000/non-fixeds",
- "method": "GET",
- "sortNum": 60000,
- "created": "2022-07-06T04:46:52.344Z",
- "modified": "2022-07-06T13:40:27.085Z",
- "headers": [],
- "params": [],
- "tests": []
- },
- {
- "_id": "11a9d56d-2e2c-49f1-ac91-46ff091e8f55",
- "colId": "55df9d89-9cac-4748-9c41-d53dff5232d8",
- "containerId": "2c98df92-734e-49b1-afdd-d4f583ee77a2",
- "name": "Create non-fixed income",
- "url": "http://localhost:3000/non-fixeds",
- "method": "POST",
- "sortNum": 70000,
- "created": "2022-07-06T04:47:20.033Z",
- "modified": "2022-07-14T16:17:51.952Z",
- "headers": [],
- "params": [],
- "body": {
- "type": "json",
- "raw": "{\n \"jenis_pengajuan\": \"ADENDUM\",\n \"plafon_fasilitas\": 2500,\n \"jenis_penggunaan\": \"KONSUMSI\",\n \"tujuan_penggunaan\": \"Bermain Slot\",\n \"jangka_waktu\": \"6 Bulan\",\n \"no_rekening\": 8545454545,\n \"plafon_kredit\": 2001000,\n \"tanggal_mulai_kredit\": \"2022-05-21\",\n \"jangka_waktu_kredit\": \"8 Bulan\",\n \"debitur\": 5,\n \"createdBy\": 3\n}",
- "form": []
- },
- "tests": []
- },
- {
- "_id": "960054fb-126a-43f8-a495-6ab23a01c2fe",
- "colId": "55df9d89-9cac-4748-9c41-d53dff5232d8",
- "containerId": "2c98df92-734e-49b1-afdd-d4f583ee77a2",
- "name": "Get non-fixed income by id",
- "url": "http://localhost:3000/non-fixeds/2",
- "method": "GET",
- "sortNum": 77500,
- "created": "2022-07-06T04:57:01.911Z",
- "modified": "2022-07-06T05:09:57.682Z",
- "headers": [],
- "params": [],
- "tests": []
- },
- {
- "_id": "60561953-9af4-4944-84f7-f7a0615318a7",
- "colId": "55df9d89-9cac-4748-9c41-d53dff5232d8",
- "containerId": "2c98df92-734e-49b1-afdd-d4f583ee77a2",
- "name": "Delete non-fixed income",
- "url": "localhost:3000/non-fixeds/11",
- "method": "DELETE",
- "sortNum": 80000,
- "created": "2022-07-06T04:58:17.074Z",
- "modified": "2022-07-11T04:58:31.435Z",
- "headers": [],
- "params": [],
- "tests": []
- },
- {
- "_id": "af892903-b7e2-481b-9f32-3392b15844e1",
- "colId": "55df9d89-9cac-4748-9c41-d53dff5232d8",
- "containerId": "2c98df92-734e-49b1-afdd-d4f583ee77a2",
- "name": "Edit non-fixed income",
- "url": "http://localhost:3000/non-fixeds/17",
- "method": "PUT",
- "sortNum": 75000,
- "created": "2022-07-06T05:09:32.030Z",
- "modified": "2022-07-11T06:20:31.002Z",
- "headers": [],
- "params": [],
- "body": {
- "type": "json",
- "raw": "{\n \"jenis_pengajuan\": \"ADENDUM\",\n \"plafon_fasilitas\": 2500,\n \"jenis_penggunaan\": \"KONSUMSI\",\n \"tujuan_penggunaan\": \"Bermain Slot\",\n \"jangka_waktu\": \"6 Bulan\",\n \"no_rekening\": 21313131313,\n \"plafon_kredit\": 2000000,\n \"tanggal_mulai_kredit\": \"2022-05-21\",\n \"jangka_waktu_kredit\": \"8 Bulan\",\n \"debitur\": 1,\n \"createdBy\": 1,\n \"submission\": [{\n \"id\": 1\n }]\n}",
- "form": []
- },
- "tests": []
- },
- {
- "_id": "548969f7-aff0-4e10-8e46-de44855ff4bc",
- "colId": "55df9d89-9cac-4748-9c41-d53dff5232d8",
- "containerId": "37cc2a2e-484a-42af-8e69-ce87ba83bffc",
- "name": "Create roles",
- "url": "http://localhost:3000/roles/",
- "method": "POST",
- "sortNum": 10000,
- "created": "2022-07-08T06:54:23.768Z",
- "modified": "2022-09-06T15:08:06.971Z",
- "headers": [],
- "params": [],
- "body": {
- "type": "json",
- "raw": "{\n \"name\": \"User\"\n \n}",
- "form": []
- },
- "tests": []
- },
- {
- "_id": "bf3aaf6f-c6fa-47d4-aa87-6a02db4568c1",
- "colId": "55df9d89-9cac-4748-9c41-d53dff5232d8",
- "containerId": "afeb3855-8ba9-4e18-8445-d35fe3fb1b8d",
- "name": "Get users",
- "url": "{{baseUrl}}api/v1/users",
- "method": "GET",
- "sortNum": 110000,
- "created": "2022-07-11T01:03:10.735Z",
- "modified": "2022-09-29T02:49:04.509Z",
- "headers": [],
- "params": [],
- "tests": []
- },
- {
- "_id": "654b5e70-7ea5-4fcd-816c-61cc80a21981",
- "colId": "55df9d89-9cac-4748-9c41-d53dff5232d8",
- "containerId": "afeb3855-8ba9-4e18-8445-d35fe3fb1b8d",
- "name": "Create user",
- "url": "http://localhost:3000/users",
- "method": "POST",
- "sortNum": 120000,
- "created": "2022-07-11T01:28:32.372Z",
- "modified": "2022-09-06T15:04:44.315Z",
- "headers": [],
- "params": [],
- "body": {
- "type": "json",
- "raw": "{\n \"username\": \"asu\",\n \"password\": \"123\",\n \"roles\": [\n {\n \"name\": \"Admin\"\n }\n ]\n}",
- "form": []
- },
- "tests": []
- },
- {
- "_id": "9c9adf22-b62b-46fc-b17b-8fd54d2db4f1",
- "colId": "55df9d89-9cac-4748-9c41-d53dff5232d8",
- "containerId": "a37e001a-b116-4dda-8452-246da85dd8e2",
- "name": "Get ProPengajuan",
- "url": "localhost:3000/submissions",
- "method": "GET",
- "sortNum": 130000,
- "created": "2022-07-11T03:12:44.732Z",
- "modified": "2022-07-13T15:37:58.497Z",
- "headers": [],
- "params": [],
- "tests": []
- },
- {
- "_id": "84f0fcbb-6e7a-4e31-a36c-e8a9426241b4",
- "colId": "55df9d89-9cac-4748-9c41-d53dff5232d8",
- "containerId": "a37e001a-b116-4dda-8452-246da85dd8e2",
- "name": "Edit ProPengajuan",
- "url": "localhost:3000/submissions/1",
- "method": "PUT",
- "sortNum": 132500,
- "created": "2022-07-11T03:21:26.759Z",
- "modified": "2022-07-13T13:15:57.680Z",
- "headers": [],
- "params": [],
- "body": {
- "type": "json",
- "raw": "{\n \"createdBy\": 1,\n \"fixed\": [{\n \"id\": 27,\n \"is_approved\": false\n }]\n}",
- "form": []
- },
- "tests": []
- },
- {
- "_id": "47866816-d485-4edf-a5e3-c2b6ab94ab51",
- "colId": "55df9d89-9cac-4748-9c41-d53dff5232d8",
- "containerId": "a37e001a-b116-4dda-8452-246da85dd8e2",
- "name": "Delete ProPengajuan",
- "url": "localhost:3000/submissions/1",
- "method": "DELETE",
- "sortNum": 150000,
- "created": "2022-07-11T04:57:32.902Z",
- "modified": "2022-07-14T02:17:49.253Z",
- "headers": [],
- "params": [],
- "tests": []
- },
- {
- "_id": "db867624-c99f-4d60-add1-a3e851cd8945",
- "colId": "55df9d89-9cac-4748-9c41-d53dff5232d8",
- "containerId": "0e776d57-21a5-43fe-b762-89c20d81d1ef",
- "name": "Upload file",
- "url": "localhost:3000/uploads/",
- "method": "POST",
- "sortNum": 10000,
- "created": "2022-07-12T02:10:15.768Z",
- "modified": "2022-09-11T10:37:29.235Z",
- "headers": [],
- "params": [],
- "body": {
- "type": "formdata",
- "raw": "",
- "form": [
- {
- "name": "submission",
- "value": "9",
- "isDisabled": true
- },
- {
- "name": "createdBy",
- "value": "1",
- "isDisabled": true
- },
- {
- "name": "test",
- "value": "1"
- }
- ],
- "files": [
- {
- "name": "files",
- "value": "D:\\Download\\Pengumuman Jasa Lainnya Perorangan.pdf",
- "isDisabled": true
- }
- ]
- },
- "tests": []
- },
- {
- "_id": "08a8c536-9e6b-4aac-a1a0-d9ccedf21df0",
- "colId": "55df9d89-9cac-4748-9c41-d53dff5232d8",
- "containerId": "0e776d57-21a5-43fe-b762-89c20d81d1ef",
- "name": "List of uploaded files",
- "url": "localhost:3000/uploads/",
- "method": "GET",
- "sortNum": 5000,
- "created": "2022-07-13T02:39:23.039Z",
- "modified": "2022-07-13T02:39:36.459Z",
- "headers": [],
- "params": [],
- "tests": []
- },
- {
- "_id": "056404e2-35b4-4da7-8f4d-7927292fbc24",
- "colId": "55df9d89-9cac-4748-9c41-d53dff5232d8",
- "containerId": "0e776d57-21a5-43fe-b762-89c20d81d1ef",
- "name": "Delete file",
- "url": "localhost:3000/uploads/11",
- "method": "DELETE",
- "sortNum": 180000,
- "created": "2022-07-13T02:40:03.818Z",
- "modified": "2022-07-13T02:40:26.283Z",
- "headers": [],
- "params": [],
- "tests": []
- },
- {
- "_id": "4663bd02-79c5-4afb-8d92-36c33036ef80",
- "colId": "55df9d89-9cac-4748-9c41-d53dff5232d8",
- "containerId": "0c58901b-fee7-4c4e-8907-9415f57bd1dc",
- "name": "Get business analysis",
- "url": "localhost:3000/business_analysis/",
- "method": "GET",
- "sortNum": 190000,
- "created": "2022-07-13T07:11:54.075Z",
- "modified": "2022-07-13T14:23:10.900Z",
- "headers": [],
- "params": [],
- "tests": []
- },
- {
- "_id": "d3647b4c-9208-4387-8b57-bddc40898c51",
- "colId": "55df9d89-9cac-4748-9c41-d53dff5232d8",
- "containerId": "a37e001a-b116-4dda-8452-246da85dd8e2",
- "name": "Create ProPengajuan",
- "url": "localhost:3000/submissions/",
- "method": "POST",
- "sortNum": 131250,
- "created": "2022-07-13T13:15:53.014Z",
- "modified": "2022-08-24T23:55:23.590Z",
- "headers": [],
- "params": [],
- "body": {
- "type": "json",
- "raw": "{\n \"createdBy\": 3,\n \"fixed\": [{\n \"id\": 36,\n \"is_approved\": true\n }]\n}",
- "form": []
- },
- "tests": []
- },
- {
- "_id": "5499835a-f4d6-41e8-9a5b-dabedba7f37d",
- "colId": "55df9d89-9cac-4748-9c41-d53dff5232d8",
- "containerId": "4109a690-be92-431c-b24a-4d6748a6c18c",
- "name": "Get Collateral",
- "url": "localhost:3000/collaterals",
- "method": "GET",
- "sortNum": 200000,
- "created": "2022-07-13T13:24:19.678Z",
- "modified": "2022-07-13T13:24:32.967Z",
- "headers": [],
- "params": [],
- "tests": []
- },
- {
- "_id": "b2d89564-0b69-4373-a887-22d67f0106ed",
- "colId": "55df9d89-9cac-4748-9c41-d53dff5232d8",
- "containerId": "4109a690-be92-431c-b24a-4d6748a6c18c",
- "name": "Create Collateral",
- "url": "localhost:3000/collaterals",
- "method": "POST",
- "sortNum": 210000,
- "created": "2022-07-13T13:24:45.272Z",
- "modified": "2022-07-13T13:43:08.857Z",
- "headers": [],
- "params": [],
- "body": {
- "type": "json",
- "raw": "{\n \"barang_agunan\": \"Mobil\",\n \"asuransi\": \"takimata iriure erat nulla est lobortis volutpat kasd\",\n \"nilai_agunan\": 100000,\n \"bukti_agunan\": \"Lorem ipsum\",\n \"ijin_milik\": \"magna hendrerit labore velit placerat\",\n \"deskripsi_agunan\": \"Consetetur ut sed ut feugait dolor labore eirmod est magna sadipscing elitr labore ipsum labore sanctus nonumy velit magna takimata invidunt magna hendrerit labore velit placerat no dolore dolores diam et sadipscing commodo voluptua consequat gubergren voluptua takimata elitr amet et amet no voluptua in stet doming nulla et sanctus\",\n \"createdBy\": 1,\n \"submission\": 1\n}",
- "form": []
- },
- "tests": []
- },
- {
- "_id": "54568c69-081c-4e0d-8cd5-1906350e2eb6",
- "colId": "55df9d89-9cac-4748-9c41-d53dff5232d8",
- "containerId": "37cc2a2e-484a-42af-8e69-ce87ba83bffc",
- "name": "Get role",
- "url": "{{baseUrl}}api/v1/roles",
- "method": "GET",
- "sortNum": 5000,
- "created": "2022-07-13T14:18:25.189Z",
- "modified": "2022-09-29T02:50:48.439Z",
- "headers": [],
- "params": [],
- "tests": []
- },
- {
- "_id": "54735a63-317a-4f32-9904-deb3bc7b6ac0",
- "colId": "55df9d89-9cac-4748-9c41-d53dff5232d8",
- "containerId": "0c58901b-fee7-4c4e-8907-9415f57bd1dc",
- "name": "Create business analysis",
- "url": "localhost:3000/business_analysis/",
- "method": "POST",
- "sortNum": 230000,
- "created": "2022-07-13T14:23:43.132Z",
- "modified": "2022-07-13T14:28:59.118Z",
- "headers": [],
- "params": [],
- "body": {
- "type": "json",
- "raw": "{\n \"omset_penjualan\": \"erat nulla est lobortis volutpat kasd\",\n \"harga_bersaing\": \"lorem lorem delenit ut dolore et\",\n \"persaingan\": \"sed at et elitr at sadipscing\",\n \"lokasi\": \"strategis\",\n \"kualitas\": \"bagus\",\n \"deskripsi_bisnis\": \"Kasd accusam sea accusam iriure enim est elitr et sed sadipscing veniam nonumy lorem nonumy illum gubergren quod vel sea aliquam consetetur imperdiet aliquip et tempor tempor ut diam ipsum rebum sadipscing et stet option iriure voluptua sed sed consetetur nonumy sit consetetur takimata rebum amet clita ex et consetetur\",\n \"createdBy\": 1,\n \"submission\": 1\n}",
- "form": []
- },
- "tests": []
- },
- {
- "_id": "b24f94a4-fc72-4d27-b72c-db84a0f7af53",
- "colId": "55df9d89-9cac-4748-9c41-d53dff5232d8",
- "containerId": "5b184829-c3d6-499a-b09a-774c34893892",
- "name": "Get character analysis",
- "url": "localhost:3000/character_analysis",
- "method": "GET",
- "sortNum": 240000,
- "created": "2022-07-13T15:02:17.299Z",
- "modified": "2022-07-13T15:03:39.686Z",
- "headers": [],
- "params": [],
- "tests": []
- },
- {
- "_id": "e41dde0b-60c9-48e7-80e2-d1a58b88bdbd",
- "colId": "55df9d89-9cac-4748-9c41-d53dff5232d8",
- "containerId": "5b184829-c3d6-499a-b09a-774c34893892",
- "name": "Create character analysis",
- "url": "localhost:3000/character_analysis",
- "method": "POST",
- "sortNum": 250000,
- "created": "2022-07-13T15:03:51.708Z",
- "modified": "2022-07-14T01:04:48.794Z",
- "headers": [],
- "params": [],
- "body": {
- "type": "json",
- "raw": "{\n \"ulet_dalam_bisnis\": 75,\n \"flexible_kaku\": 80,\n \"kreatif_inovatif\": 87,\n \"jujur_dlm_bisnis\": 95,\n \"deskripsi_karakter\": \"Consequat erat rebum odio est sit dolor sea amet sed eirmod ipsum eu eirmod dolor no et ut invidunt nostrud est stet euismod clita voluptua tempor ipsum rebum et sit consetetur tempor tation kasd dolore erat diam labore sed eirmod feugiat et vero adipiscing diam consequat sanctus ut enim voluptua\",\n \"createdBy\": 1,\n \"submission\": 1\n}",
- "form": []
- },
- "tests": []
- },
- {
- "_id": "50f04b4e-a3d7-46f6-a4af-89a0e86ecbc0",
- "colId": "55df9d89-9cac-4748-9c41-d53dff5232d8",
- "containerId": "a37e001a-b116-4dda-8452-246da85dd8e2",
- "name": "Patch one or many items",
- "url": "localhost:3000/submissions/10",
- "method": "PATCH",
- "sortNum": 260000,
- "created": "2022-07-14T01:20:18.173Z",
- "modified": "2022-07-15T01:28:59.558Z",
- "headers": [],
- "params": [],
- "body": {
- "type": "json",
- "raw": "{\n \"character_analysis\": {\n \"ulet_dalam_bisnis\": 75,\n \"flexible_kaku\": 65,\n \"kreatif_inovatif\": 87,\n \"jujur_dlm_bisnis\": 95,\n \"deskripsi_karakter\": \"Consequat erat rebum odio est sit dolor sea amet sed eirmod ipsum eu eirmod dolor no et ut invidunt nostrud est stet euismod clita voluptua tempor ipsum rebum et sit consetetur tempor tation kasd dolore erat diam labore sed eirmod feugiat et vero adipiscing diam consequat sanctus ut enim voluptua\",\n \"createdById\": 3\n },\n \"collateral\": {\n \"barang_agunan\": \"Mobil\",\n \"asuransi\": \"takimata iriure erat nulla est lobortis volutpat kasd\",\n \"nilai_agunan\": 100000,\n \"bukti_agunan\": \"Lorem ipsum\",\n \"ijin_milik\": \"magna hendrerit labore velit placerat\",\n \"deskripsi_agunan\": \"Consetetur ut sed ut feugait dolor labore eirmod est magna sadipscing elitr labore ipsum labore sanctus nonumy velit magna takimata invidunt magna hendrerit labore velit placerat no dolore dolores diam et sadipscing commodo voluptua consequat gubergren voluptua takimata elitr amet et amet no voluptua in stet doming nulla et sanctus\",\n \"createdBy\": 3\n },\n \"business_analysis\": {\n \"omset_penjualan\": \"erat nulla est lobortis volutpat kasd\",\n \"harga_bersaing\": \"lorem lorem delenit ut dolore et\",\n \"persaingan\": \"sed at et elitr at sadipscing\",\n \"lokasi\": \"strategis\",\n \"kualitas\": \"bagus\",\n \"deskripsi_bisnis\": \"Kasd accusam sea accusam iriure enim est elitr et sed sadipscing veniam nonumy lorem nonumy illum gubergren quod vel sea aliquam consetetur imperdiet aliquip et tempor tempor ut diam ipsum rebum sadipscing et stet option iriure voluptua sed sed consetetur nonumy sit consetetur takimata rebum amet clita ex et consetetur\",\n \"createdBy\": 3\n }\n \n}",
- "form": []
- },
- "tests": []
- },
- {
- "_id": "6b2b27f6-c917-4379-9336-405ba243c773",
- "colId": "55df9d89-9cac-4748-9c41-d53dff5232d8",
- "containerId": "5b184829-c3d6-499a-b09a-774c34893892",
- "name": "Delete character analysis",
- "url": "localhost:3000/character_analysis/11",
- "method": "DELETE",
- "sortNum": 270000,
- "created": "2022-07-14T02:16:46.794Z",
- "modified": "2022-07-14T02:17:13.803Z",
- "headers": [],
- "params": [],
- "tests": []
- },
{
"_id": "5c653682-4cba-4d3a-ad5d-5ec209f6aa76",
"colId": "3e42347a-acbf-4266-ae30-f61da3c0cc82",
"containerId": "e9deb1b2-3088-4fc0-9c9f-4ae39119ec95",
"name": "Get Debitur By Id",
- "url": "{{baseUrl}}api/v1/debiturs/9?join=ijinLegitimasi&join=syaratLain&join=asuransi&join=inputNeraca&join=inputRugiLaba&join=inputKeuangan&join=analisaKeuangan&join=analisaKarakter&join=analisaBisnis&join=analisaJenisUsaha&join=agunan&join=agunan.form_tanah&join=agunan.form_kendaraan&join=agunan.form_los&join=agunan.form_peralatan&join=agunan.form_cash&join=agunan.form_lainnya&join=agunan.form_tanah_bangunan&join=analisaAgunan",
+ "url": "{{baseUrl}}api/v1/debiturs/5?join=ijinLegitimasi&join=syaratLain&join=asuransi&join=inputNeraca&join=inputRugiLaba&join=inputKeuangan&join=analisaKeuangan&join=analisaKarakter&join=analisaBisnis&join=analisaJenisUsaha&join=agunan&join=agunan.form_tanah&join=agunan.form_kendaraan&join=agunan.form_los&join=agunan.form_peralatan&join=agunan.form_cash&join=agunan.form_lainnya&join=agunan.form_tanah_bangunan&join=analisaAgunan&join=upload",
"method": "GET",
"sortNum": 280000,
"created": "2022-08-20T00:12:21.220Z",
- "modified": "2022-11-11T04:53:54.735Z",
+ "modified": "2022-11-28T14:51:32.701Z",
"headers": [],
"params": [
{
@@ -694,8 +108,7 @@
},
{
"name": "join",
- "value": "ijinLegitimasi",
- "isDisabled": true,
+ "value": "upload",
"isPath": false
}
],
@@ -753,44 +166,6 @@
"params": [],
"tests": []
},
- {
- "_id": "d283dc2e-b7d9-4f5a-9a61-e9fd0d8a4a33",
- "colId": "55df9d89-9cac-4748-9c41-d53dff5232d8",
- "containerId": "afeb3855-8ba9-4e18-8445-d35fe3fb1b8d",
- "name": "edit roles",
- "url": "localhost:3000/users/3",
- "method": "PATCH",
- "sortNum": 330000,
- "created": "2022-08-26T04:11:06.664Z",
- "modified": "2022-08-26T04:15:32.617Z",
- "headers": [],
- "params": [],
- "body": {
- "type": "json",
- "raw": "{\n \"roles\": [\n {\n \"id\": 13,\n \"name\": \"122\"\n }\n ]\n}",
- "form": []
- },
- "tests": []
- },
- {
- "_id": "0d6fa835-11f2-49af-8d80-5d7eabe06c0b",
- "colId": "55df9d89-9cac-4748-9c41-d53dff5232d8",
- "containerId": "afeb3855-8ba9-4e18-8445-d35fe3fb1b8d",
- "name": "edittt",
- "url": "http://localhost:3000/users/18",
- "method": "PUT",
- "sortNum": 340000,
- "created": "2022-08-26T04:20:14.040Z",
- "modified": "2022-09-06T15:08:16.971Z",
- "headers": [],
- "params": [],
- "body": {
- "type": "json",
- "raw": "{\n \"username\": \"fleetimeeeeee11\",\n \"password\": \"123\",\n \"roles\": [\n {\n \"id\": 18\n }\n ]\n}",
- "form": []
- },
- "tests": []
- },
{
"_id": "bbfc6e76-a84f-43a9-b5aa-219dc7cf9121",
"colId": "3e42347a-acbf-4266-ae30-f61da3c0cc82",
@@ -1804,5 +1179,63 @@
"headers": [],
"params": [],
"tests": []
+ },
+ {
+ "_id": "a84302fa-7db7-4277-af82-ac1092c99b64",
+ "colId": "3e42347a-acbf-4266-ae30-f61da3c0cc82",
+ "containerId": "3b567af2-0207-4ab8-ad8a-d6f6169ebd11",
+ "name": "Get",
+ "url": "{{baseUrl}}api/v1/debiturs/2/uploads/",
+ "method": "GET",
+ "sortNum": 880000,
+ "created": "2022-11-28T04:38:57.552Z",
+ "modified": "2022-11-29T01:27:52.826Z",
+ "headers": [],
+ "params": [],
+ "tests": []
+ },
+ {
+ "_id": "39151a13-b8a9-4a34-8f20-a17c5546fb7e",
+ "colId": "3e42347a-acbf-4266-ae30-f61da3c0cc82",
+ "containerId": "3b567af2-0207-4ab8-ad8a-d6f6169ebd11",
+ "name": "Post",
+ "url": "{{baseUrl}}api/v1/debiturs/5/uploads/",
+ "method": "POST",
+ "sortNum": 890000,
+ "created": "2022-11-28T04:42:22.215Z",
+ "modified": "2022-11-28T14:13:13.682Z",
+ "headers": [],
+ "params": [],
+ "body": {
+ "type": "formdata",
+ "raw": "",
+ "form": [
+ {
+ "name": "keterangan",
+ "value": "adada"
+ }
+ ],
+ "files": [
+ {
+ "name": "file",
+ "value": "c:\\Users\\Novian Andika\\Desktop\\278122273_5151241421581206_3504391876146381605_n.jpg"
+ }
+ ]
+ },
+ "tests": []
+ },
+ {
+ "_id": "f6559a9b-4679-432c-8be5-5cf255a4fdd8",
+ "colId": "3e42347a-acbf-4266-ae30-f61da3c0cc82",
+ "containerId": "3b567af2-0207-4ab8-ad8a-d6f6169ebd11",
+ "name": "Delete",
+ "url": "{{baseUrl}}api/v1/debiturs/2/uploads/18",
+ "method": "DELETE",
+ "sortNum": 900000,
+ "created": "2022-11-29T06:31:13.541Z",
+ "modified": "2022-11-29T06:31:23.074Z",
+ "headers": [],
+ "params": [],
+ "tests": []
}
]
\ No newline at end of file
diff --git a/windows/flutter/generated_plugin_registrant.cc b/windows/flutter/generated_plugin_registrant.cc
index 1c757696..fa212a0f 100644
--- a/windows/flutter/generated_plugin_registrant.cc
+++ b/windows/flutter/generated_plugin_registrant.cc
@@ -7,14 +7,20 @@
#include "generated_plugin_registrant.h"
#include
+#include
#include
+#include
#include
void RegisterPlugins(flutter::PluginRegistry* registry) {
GeolocatorWindowsRegisterWithRegistrar(
registry->GetRegistrarForPlugin("GeolocatorWindows"));
+ PermissionHandlerWindowsPluginRegisterWithRegistrar(
+ registry->GetRegistrarForPlugin("PermissionHandlerWindowsPlugin"));
PrintingPluginRegisterWithRegistrar(
registry->GetRegistrarForPlugin("PrintingPlugin"));
+ SharePlusWindowsPluginCApiRegisterWithRegistrar(
+ registry->GetRegistrarForPlugin("SharePlusWindowsPluginCApi"));
UrlLauncherWindowsRegisterWithRegistrar(
registry->GetRegistrarForPlugin("UrlLauncherWindows"));
}
diff --git a/windows/flutter/generated_plugins.cmake b/windows/flutter/generated_plugins.cmake
index de1c4c0f..a6e52f19 100644
--- a/windows/flutter/generated_plugins.cmake
+++ b/windows/flutter/generated_plugins.cmake
@@ -4,7 +4,9 @@
list(APPEND FLUTTER_PLUGIN_LIST
geolocator_windows
+ permission_handler_windows
printing
+ share_plus
url_launcher_windows
)