dienianindya 1 anno fa
parent
commit
701fe7168d
31 ha cambiato i file con 446 aggiunte e 405 eliminazioni
  1. 12
    2
      android/app/build.gradle
  2. 8
    9
      android/app/google-services.json
  3. 40
    0
      android/app/google-services_lama.json
  4. 2
    0
      android/app/src/main/AndroidManifest.xml
  5. 1
    1
      android/build.gradle
  6. BIN
      firebase-tools-instant-win.exe
  7. 21
    0
      flutterfire.bat
  8. BIN
      hris_keystore.jks
  9. 3
    5
      lib/Screens/Home/home_screen.dart
  10. 5
    14
      lib/Screens/Menu/Absensi/absensi_history_screen.dart
  11. 100
    33
      lib/Screens/Menu/Absensi/absensi_screen.dart
  12. 5
    5
      lib/Screens/Menu/AjukanCuti/ajukancuti_screen.dart
  13. 3
    3
      lib/Screens/Menu/AjukanCuti/history_cuti.dart
  14. 5
    3
      lib/Screens/Menu/Reimburse/RequestHttp/pengajuanReimburse_post.dart
  15. 5
    4
      lib/Screens/Menu/Reimburse/history_reimburse.dart
  16. 28
    38
      lib/Screens/Menu/Reimburse/reimburse_screen.dart
  17. 22
    18
      lib/Screens/Menu/SlipGaji/slipgaji_screen.dart
  18. 4
    91
      lib/Screens/Menu/SuratTugas/history_st.dart
  19. 3
    29
      lib/Screens/Menu/SuratTugas/pengajuan_extendTanggalKembali.dart
  20. 3
    29
      lib/Screens/Menu/SuratTugas/pengajuan_st.dart
  21. 3
    32
      lib/Screens/Menu/SuratTugas/pengajuan_uangMukaTambahan.dart
  22. 3
    3
      lib/Screens/Settings/settings_screen.dart
  23. 1
    1
      lib/main.dart
  24. 4
    0
      linux/flutter/generated_plugin_registrant.cc
  25. 1
    0
      linux/flutter/generated_plugins.cmake
  26. 2
    0
      macos/Flutter/GeneratedPluginRegistrant.swift
  27. 146
    74
      pubspec.lock
  28. 12
    11
      pubspec.yaml
  29. BIN
      ttwenty.jks
  30. 3
    0
      windows/flutter/generated_plugin_registrant.cc
  31. 1
    0
      windows/flutter/generated_plugins.cmake

+ 12
- 2
android/app/build.gradle Vedi File

@@ -39,7 +39,7 @@ android {
39 39
 
40 40
     defaultConfig {
41 41
         // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
42
-        applicationId "com.example.hris_selfservice_mobile"
42
+        applicationId "com.urp.hris"
43 43
         // You can update the following values to match your application needs.
44 44
         // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-build-configuration.
45 45
         //minSdkVersion flutter.minSdkVersion
@@ -51,11 +51,21 @@ android {
51 51
         multiDexEnabled true
52 52
     }
53 53
 
54
+    signingConfigs {
55
+        release {
56
+            storeFile file('D:/employee_self_service/ttwenty.jks')
57
+            storePassword '123123'
58
+            keyAlias 'ttwenty'
59
+            keyPassword '123123'
60
+        }
61
+    }
62
+
54 63
     buildTypes {
55 64
         release {
56 65
             // TODO: Add your own signing config for the release build.
57 66
             // Signing with the debug keys for now, so `flutter run --release` works.
58
-            signingConfig signingConfigs.debug
67
+            //signingConfig signingConfigs.debug
68
+            signingConfig signingConfigs.release
59 69
         }
60 70
     }
61 71
 }

+ 8
- 9
android/app/google-services.json Vedi File

@@ -1,34 +1,33 @@
1 1
 {
2 2
   "project_info": {
3
-    "project_number": "372840384875",
4
-    "firebase_url": "https://gsi---employee-self-service-default-rtdb.asia-southeast1.firebasedatabase.app",
5
-    "project_id": "gsi---employee-self-service",
6
-    "storage_bucket": "gsi---employee-self-service.appspot.com"
3
+    "project_number": "476641837995",
4
+    "project_id": "employee-self-service-8280b",
5
+    "storage_bucket": "employee-self-service-8280b.appspot.com"
7 6
   },
8 7
   "client": [
9 8
     {
10 9
       "client_info": {
11
-        "mobilesdk_app_id": "1:372840384875:android:cbf80d0700f53d3ffd642e",
10
+        "mobilesdk_app_id": "1:476641837995:android:667f14658e56d0350e08ee",
12 11
         "android_client_info": {
13
-          "package_name": "com.example.hris_selfservice_mobile"
12
+          "package_name": "com.urp.hris"
14 13
         }
15 14
       },
16 15
       "oauth_client": [
17 16
         {
18
-          "client_id": "372840384875-6pj63n6au94f00vr8lirqgvo9i82lvh0.apps.googleusercontent.com",
17
+          "client_id": "476641837995-sggr0a4kamrivljkugc8392sobp4jq4d.apps.googleusercontent.com",
19 18
           "client_type": 3
20 19
         }
21 20
       ],
22 21
       "api_key": [
23 22
         {
24
-          "current_key": "AIzaSyDUzNWQ2cvWrL77QHekf_FASfMb5KTDnuY"
23
+          "current_key": "AIzaSyDKZ2NozLQUpWeH2Cv17kuJz1f_MsG-p1Y"
25 24
         }
26 25
       ],
27 26
       "services": {
28 27
         "appinvite_service": {
29 28
           "other_platform_oauth_client": [
30 29
             {
31
-              "client_id": "372840384875-6pj63n6au94f00vr8lirqgvo9i82lvh0.apps.googleusercontent.com",
30
+              "client_id": "476641837995-sggr0a4kamrivljkugc8392sobp4jq4d.apps.googleusercontent.com",
32 31
               "client_type": 3
33 32
             }
34 33
           ]

+ 40
- 0
android/app/google-services_lama.json Vedi File

@@ -0,0 +1,40 @@
1
+{
2
+  "project_info": {
3
+    "project_number": "372840384875",
4
+    "firebase_url": "https://gsi---employee-self-service-default-rtdb.asia-southeast1.firebasedatabase.app",
5
+    "project_id": "gsi---employee-self-service",
6
+    "storage_bucket": "gsi---employee-self-service.appspot.com"
7
+  },
8
+  "client": [
9
+    {
10
+      "client_info": {
11
+        "mobilesdk_app_id": "1:372840384875:android:cbf80d0700f53d3ffd642e",
12
+        "android_client_info": {
13
+          "package_name": "com.example.hris_selfservice_mobile"
14
+        }
15
+      },
16
+      "oauth_client": [
17
+        {
18
+          "client_id": "372840384875-6pj63n6au94f00vr8lirqgvo9i82lvh0.apps.googleusercontent.com",
19
+          "client_type": 3
20
+        }
21
+      ],
22
+      "api_key": [
23
+        {
24
+          "current_key": "AIzaSyDUzNWQ2cvWrL77QHekf_FASfMb5KTDnuY"
25
+        }
26
+      ],
27
+      "services": {
28
+        "appinvite_service": {
29
+          "other_platform_oauth_client": [
30
+            {
31
+              "client_id": "372840384875-6pj63n6au94f00vr8lirqgvo9i82lvh0.apps.googleusercontent.com",
32
+              "client_type": 3
33
+            }
34
+          ]
35
+        }
36
+      }
37
+    }
38
+  ],
39
+  "configuration_version": "1"
40
+}

+ 2
- 0
android/app/src/main/AndroidManifest.xml Vedi File

@@ -4,7 +4,9 @@
4 4
 
5 5
     <uses-permission android:name="android.permission.INTERNET" />
6 6
     <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
7
+    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
7 8
     <uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
9
+    <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
8 10
 
9 11
     <application
10 12
         android:icon="@mipmap/ic_launcher"

+ 1
- 1
android/build.gradle Vedi File

@@ -9,7 +9,7 @@ buildscript {
9 9
         classpath 'com.android.tools.build:gradle:7.1.3'
10 10
         classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
11 11
         classpath 'com.google.gms:google-services:4.3.15'
12
-        classpath 'com.google.firebase:firebase-crashlytics-gradle:2.9.5'
12
+        classpath 'com.google.firebase:firebase-crashlytics-gradle:2.9.9'
13 13
     }
14 14
 }
15 15
 

BIN
firebase-tools-instant-win.exe Vedi File


+ 21
- 0
flutterfire.bat Vedi File

@@ -0,0 +1,21 @@
1
+@echo off
2
+rem This file was created by pub v3.0.5.
3
+rem Package: flutterfire_cli
4
+rem Version: 0.2.7
5
+rem Executable: flutterfire
6
+rem Script: flutterfire
7
+if exist "C:\Users\Dieni Anindyasarathi.DIENIA-GSI\AppData\Local\Pub\Cache\global_packages\flutterfire_cli\bin\flutterfire.dart-3.0.5.snapshot"                                                                                                                                 (
8
+  call dart "C:\Users\Dieni Anindyasarathi.DIENIA-GSI\AppData\Local\Pub\Cache\global_packages\flutterfire_cli\bin\flutterfire.dart-3.0.5.snapshot"                                                                                                                                 %*
9
+  rem The VM exits with code 253 if the snapshot version is out-of-date.
10
+  rem If it is, we need to delete it and run "pub global" manually.
11
+  if not errorlevel 253 (
12
+    goto error
13
+  )
14
+  call dart pub global run flutterfire_cli:flutterfire %*
15
+) else (
16
+  call dart pub global run flutterfire_cli:flutterfire %*
17
+)
18
+goto eof
19
+:error
20
+exit /b %errorlevel%
21
+:eof

BIN
hris_keystore.jks Vedi File


+ 3
- 5
lib/Screens/Home/home_screen.dart Vedi File

@@ -121,7 +121,7 @@ class _HomeView extends State<HomeView> {
121 121
                   .image;
122 122
             });
123 123
           }
124
-          loading.hide();
124
+          await loading.hide();
125 125
         } else if (status == "failed") {
126 126
           String message = object['result']['message'].toString();
127 127
           Fluttertoast.showToast(
@@ -132,7 +132,7 @@ class _HomeView extends State<HomeView> {
132 132
               textColor: Colors.white,
133 133
               fontSize: 16.0);
134 134
         }
135
-        loading.hide();
135
+        await loading.hide();
136 136
       } else {
137 137
         Fluttertoast.showToast(
138 138
             msg: "Server Response Error",
@@ -141,7 +141,7 @@ class _HomeView extends State<HomeView> {
141 141
             timeInSecForIosWeb: 1,
142 142
             textColor: Colors.white,
143 143
             fontSize: 16.0);
144
-        loading.hide();
144
+        await loading.hide();
145 145
       }
146 146
     });
147 147
     return _imageToShow;
@@ -344,7 +344,6 @@ class _HomeScreenState extends State<HomeScreen> {
344 344
               textColor: Colors.white,
345 345
               fontSize: 16.0);
346 346
         }
347
-        //loading.hide();
348 347
       } else {
349 348
         Fluttertoast.showToast(
350 349
             msg: "Server Response Error",
@@ -353,7 +352,6 @@ class _HomeScreenState extends State<HomeScreen> {
353 352
             timeInSecForIosWeb: 1,
354 353
             textColor: Colors.white,
355 354
             fontSize: 16.0);
356
-        //loading.hide();
357 355
       }
358 356
     });
359 357
     return _imageToShow;

+ 5
- 14
lib/Screens/Menu/Absensi/absensi_history_screen.dart Vedi File

@@ -65,12 +65,6 @@ class _HistoryAbsensi extends State<HistoryAbsensi> {
65 65
     date_list_2 = [""];
66 66
     month_list_2 = [""];
67 67
 
68
-
69
-    Firebase.initializeApp();
70
-
71
-    //Enable Crashlytics
72
-    FirebaseCrashlytics.instance.setCrashlyticsCollectionEnabled(true);
73
-
74 68
     WidgetsBinding.instance.addPostFrameCallback((_) async {
75 69
       getHistoryData();
76 70
     });
@@ -95,17 +89,17 @@ class _HistoryAbsensi extends State<HistoryAbsensi> {
95 89
         messageTextStyle: TextStyle(
96 90
             color: Colors.black, fontSize: 15.0, fontWeight: FontWeight.w600));
97 91
 
98
-    loading.show();
92
+    await loading.show();
99 93
     HistoryAbsensi_Post.connectToAPI().then((valueResult) async {
100 94
       Map<String, dynamic> object = jsonDecode(valueResult);
101 95
       if (object.containsKey("result").toString() == "true") {
102 96
         String result = object['result'].toString();
103 97
         if (result.contains("failed")) {
104
-          loading.hide();
98
+          await loading.hide();
105 99
           alertDialogFailedRetrievedData(context);
106 100
         } else {
107 101
           List <dynamic> historyAbsensi = object['result'];
108
-          loading.hide();
102
+          await loading.hide();
109 103
           setState(() {
110 104
             for (int i = 0; i < historyAbsensi.length; i++){
111 105
               String id = historyAbsensi[i]['id'].toString();
@@ -231,9 +225,10 @@ class _HistoryAbsensi extends State<HistoryAbsensi> {
231 225
         }
232 226
       } else {
233 227
         alertDialogFailedRetrievedData(context);
228
+        await loading.hide();
234 229
       }
235 230
     });
236
-    loading.hide();
231
+    //await loading.hide();
237 232
   }
238 233
 
239 234
   @override
@@ -498,7 +493,3 @@ alertDialogFailedResponse(BuildContext context){
498 493
     },
499 494
   );
500 495
 }
501
-
502
-void sendLogMessage(String message) {
503
-  FirebaseCrashlytics.instance.log(message);
504
-}

+ 100
- 33
lib/Screens/Menu/Absensi/absensi_screen.dart Vedi File

@@ -1,6 +1,7 @@
1 1
 import 'dart:async';
2 2
 import 'dart:convert';
3 3
 
4
+import 'package:app_settings/app_settings.dart';
4 5
 import 'package:flutter/material.dart';
5 6
 import 'package:flutter_map/plugin_api.dart';
6 7
 import 'package:geolocator/geolocator.dart';
@@ -10,6 +11,7 @@ import 'package:employee_selfservice_mobile/Screens/Menu/Absensi/RequestHttp/che
10 11
 import 'package:employee_selfservice_mobile/Screens/Menu/Absensi/absensi_history_screen.dart';
11 12
 import 'package:intl/intl.dart';
12 13
 import 'package:latlong2/latlong.dart' as latlong;
14
+import 'package:location/location.dart' as loc;
13 15
 import 'dart:developer' as logDev;
14 16
 
15 17
 import 'package:progress_dialog_null_safe/progress_dialog_null_safe.dart';
@@ -50,6 +52,11 @@ class _AbsensiScreenState extends State<AbsensiScreen> {
50 52
   }
51 53
 
52 54
   determinePosition() async {
55
+    StreamSubscription<ServiceStatus> serviceStatusStream = Geolocator.getServiceStatusStream().listen(
56
+            (ServiceStatus status) {
57
+          print(status);
58
+        });
59
+
53 60
     ProgressDialog loading = ProgressDialog(context);
54 61
     loading = ProgressDialog(context,
55 62
         type: ProgressDialogType.normal, isDismissible: false, showLogs: true);
@@ -68,26 +75,27 @@ class _AbsensiScreenState extends State<AbsensiScreen> {
68 75
         messageTextStyle: TextStyle(
69 76
             color: Colors.black, fontSize: 15.0, fontWeight: FontWeight.w600));
70 77
 
71
-    bool serviceEnabled;
72
-    LocationPermission permission;
73
-
74 78
     loading.show();
75
-    serviceEnabled = await Geolocator.isLocationServiceEnabled();
79
+
80
+    bool serviceEnabled = await Geolocator.isLocationServiceEnabled();
81
+    logDev.log(serviceEnabled.toString(), name: "ON/OFF LOCATION SERVICE");
76 82
     if (!serviceEnabled) {
77
-      loading.hide();
83
+      //return Navigator.pushReplacement(context, MaterialPageRoute(builder: (context) => AbsensiScreen()));
84
+      //await loading.hide();
85
+      //alertDialogEnableLocaionServices(context);
78 86
       return Future.error('Location services are disabled.');
79 87
     }
80 88
 
81
-    permission = await Geolocator.checkPermission();
89
+    LocationPermission permission = await Geolocator.checkPermission();
82 90
 
83 91
     if (permission == LocationPermission.deniedForever) {
84
-      loading.hide();
92
+      await loading.hide();
85 93
       //return Future.error('Location permissions are permanently denied, we cannot request permissions.');
86 94
       return alertDialogPermissionDeniedForever(context);
87 95
     } else if (permission == LocationPermission.denied) {
88 96
       permission = await Geolocator.requestPermission();
89 97
       if (permission != LocationPermission.whileInUse && permission != LocationPermission.always) {
90
-        loading.hide();
98
+        await loading.hide();
91 99
         //return Future.error('Location permissions are denied (actual value: $permission).');
92 100
         return alertDialogPermissionDenied(context);
93 101
       }
@@ -96,7 +104,7 @@ class _AbsensiScreenState extends State<AbsensiScreen> {
96 104
     position = await Geolocator.getCurrentPosition(desiredAccuracy: LocationAccuracy.high);
97 105
     logDev.log(position.toString(), name: "Position GEOLOCATOR");
98 106
     if (position.isMocked) {
99
-      loading.hide();
107
+      await loading.hide();
100 108
       setState(() {
101 109
         alertDialogFakeGPSDetected(context);
102 110
       });
@@ -116,24 +124,24 @@ class _AbsensiScreenState extends State<AbsensiScreen> {
116 124
               visibleCheckIn = !visibleCheckIn;
117 125
               visibleCheckOut = visibleCheckOut;
118 126
             });
119
-            loading.hide();
127
+            await loading.hide();
120 128
           } else if (result.contains("checked_in")) {
121 129
             setState(() {
122 130
               visibleCheckIn = visibleCheckIn;
123 131
               visibleCheckOut = !visibleCheckOut;
124 132
             });
125
-            loading.hide();
133
+            await loading.hide();
126 134
           } else {
127 135
             setState(() {
128 136
               alertDialogFailedResponse(context);
129 137
             });
130
-            loading.hide();
138
+            await loading.hide();
131 139
           }
132 140
         } else {
133 141
           setState(() {
134 142
             alertDialogFailedResponse(context);
135 143
           });
136
-          loading.hide();
144
+          await loading.hide();
137 145
         }
138 146
       });
139 147
 
@@ -143,11 +151,11 @@ class _AbsensiScreenState extends State<AbsensiScreen> {
143 151
         if (object.containsKey("result").toString() == "true") {
144 152
           String result = object['result'].toString();
145 153
           if (result.contains("failed")) {
146
-            loading.hide();
154
+            await loading.hide();
147 155
             alertDialogFailedRetrievedData(context);
148 156
           } else {
149 157
             List <dynamic> historyAbsensi = object['result'];
150
-            loading.hide();
158
+            await loading.hide();
151 159
             setState(() {
152 160
               String check_in = historyAbsensi[0]['check_in'].toString();
153 161
               String check_out = historyAbsensi[0]['check_out'].toString();
@@ -185,7 +193,6 @@ class _AbsensiScreenState extends State<AbsensiScreen> {
185 193
         }
186 194
       });
187 195
 
188
-      //loading.hide();
189 196
     }
190 197
   }
191 198
 
@@ -214,31 +221,31 @@ class _AbsensiScreenState extends State<AbsensiScreen> {
214 221
     //loading.show();
215 222
     serviceEnabled = await Geolocator.isLocationServiceEnabled();
216 223
     if (!serviceEnabled) {
217
-      loading.hide();
224
+      await loading.hide();
218 225
       return Future.error('Location services are disabled.');
219 226
     }
220 227
 
221 228
     permission = await Geolocator.checkPermission();
222 229
 
223 230
     if (permission == LocationPermission.deniedForever) {
224
-      loading.hide();
231
+      await loading.hide();
225 232
       return alertDialogPermissionDeniedForever(context);
226 233
     } else if (permission == LocationPermission.denied) {
227 234
       permission = await Geolocator.requestPermission();
228 235
       if (permission != LocationPermission.whileInUse && permission != LocationPermission.always) {
229
-        loading.hide();
236
+        await loading.hide();
230 237
         return alertDialogPermissionDenied(context);
231 238
       }
232 239
     }
233 240
 
234 241
     position = await Geolocator.getCurrentPosition(desiredAccuracy: LocationAccuracy.high);
235 242
     if (position.isMocked) {
236
-      loading.hide();
243
+      await loading.hide();
237 244
       setState(() {
238 245
         alertDialogFakeGPSDetected(context);
239 246
       });
240 247
     } else {
241
-      loading.hide();
248
+      await loading.hide();
242 249
       setState((){
243 250
         point = latlong.LatLng(position.latitude, position.longitude);
244 251
         logDev.log(point.toString(), name: "UPDATE POINT GEOLOCATOR");
@@ -269,12 +276,12 @@ class _AbsensiScreenState extends State<AbsensiScreen> {
269 276
     loading.show();
270 277
     position = await Geolocator.getCurrentPosition(desiredAccuracy: LocationAccuracy.high);
271 278
     if (position.isMocked) {
272
-      loading.hide();
279
+      await loading.hide();
273 280
       setState(() {
274 281
         alertDialogFakeGPSDetected(context);
275 282
       });
276 283
     } else {
277
-      loading.hide();
284
+      await loading.hide();
278 285
       setState((){
279 286
         point = latlong.LatLng(position.latitude, position.longitude);
280 287
         _mapController.move(point, 18);
@@ -288,17 +295,17 @@ class _AbsensiScreenState extends State<AbsensiScreen> {
288 295
         String result = object['result'].toString();
289 296
         logDev.log(result, name: "Check In Result");
290 297
         if (result.contains("failed")) {
291
-          loading.hide();
298
+          await loading.hide();
292 299
           setState(() {
293 300
             alertDialogFailedRetrievedData(context);
294 301
           });
295 302
         } else if (result.contains("Anda sudah check in")) {
296
-          loading.hide();
303
+          await loading.hide();
297 304
           setState(() {
298 305
             alertDialogFailedCheckIn(context);
299 306
           });
300 307
         } else {
301
-          loading.hide();
308
+          await loading.hide();
302 309
           setState(() {
303 310
             alertDialogSuccessCheckIn(context);
304 311
           });
@@ -307,7 +314,7 @@ class _AbsensiScreenState extends State<AbsensiScreen> {
307 314
         setState(() {
308 315
           alertDialogFailedResponse(context);
309 316
         });
310
-        loading.hide();
317
+        await loading.hide();
311 318
       }
312 319
     });
313 320
   }
@@ -335,12 +342,12 @@ class _AbsensiScreenState extends State<AbsensiScreen> {
335 342
 
336 343
     position = await Geolocator.getCurrentPosition(desiredAccuracy: LocationAccuracy.high);
337 344
     if (position.isMocked) {
338
-      loading.hide();
345
+      await loading.hide();
339 346
       setState(() {
340 347
         alertDialogFakeGPSDetected(context);
341 348
       });
342 349
     } else {
343
-      loading.hide();
350
+      await loading.hide();
344 351
       setState((){
345 352
         point = latlong.LatLng(position.latitude, position.longitude);
346 353
         _mapController.move(point, 18);
@@ -354,17 +361,17 @@ class _AbsensiScreenState extends State<AbsensiScreen> {
354 361
         String result = object['result'].toString();
355 362
         logDev.log(result, name: "Check Out Result");
356 363
         if (result.contains("failed")) {
357
-          loading.hide();
364
+          await loading.hide();
358 365
           setState(() {
359 366
             alertDialogFailedRetrievedData(context);
360 367
           });
361 368
         } else if (result.contains("Anda belum check in")) {
362
-          loading.hide();
369
+          await loading.hide();
363 370
           setState(() {
364 371
             alertDialogFailedCheckOut(context);
365 372
           });
366 373
         } else {
367
-          loading.hide();
374
+          await loading.hide();
368 375
           setState(() {
369 376
             alertDialogSuccessCheckOut(context);
370 377
           });
@@ -373,7 +380,7 @@ class _AbsensiScreenState extends State<AbsensiScreen> {
373 380
         setState(() {
374 381
           alertDialogFailedResponse(context);
375 382
         });
376
-        loading.hide();
383
+        await loading.hide();
377 384
       }
378 385
     });
379 386
   }
@@ -917,3 +924,63 @@ alertDialogPermissionDeniedForever(BuildContext context) {
917 924
     },
918 925
   );
919 926
 }
927
+
928
+alertDialogEnableLocaionServices(BuildContext context) {
929
+  ProgressDialog loading = ProgressDialog(context);
930
+  loading = ProgressDialog(context,
931
+      type: ProgressDialogType.normal, isDismissible: false, showLogs: true);
932
+  loading.style(
933
+      message: 'Please Wait .....',
934
+      borderRadius: 3,
935
+      backgroundColor: Colors.white,
936
+      progressWidget: CircularProgressIndicator(),
937
+      elevation: 10.0,
938
+      padding: EdgeInsets.all(10),
939
+      insetAnimCurve: Curves.easeInOut,
940
+      progress: 0.0,
941
+      maxProgress: 100.0,
942
+      progressTextStyle: TextStyle(
943
+          color: Colors.black, fontSize: 10.0, fontWeight: FontWeight.w400),
944
+      messageTextStyle: TextStyle(
945
+          color: Colors.black, fontSize: 15.0, fontWeight: FontWeight.w600));
946
+
947
+  Widget okButton = TextButton(
948
+    child: Text("Open Settings"),
949
+    onPressed: () {
950
+      AppSettings.openLocationSettings();
951
+      Navigator.of(context, rootNavigator: true).pop();
952
+      loading.hide();
953
+     /* Navigator.pushReplacement(
954
+          context, MaterialPageRoute(builder: (context) => AbsensiScreen()));*/
955
+    },
956
+  );
957
+
958
+  Widget noButton = TextButton(
959
+    child: Text("No, thanks"),
960
+    onPressed: () {
961
+      Navigator.of(context, rootNavigator: true).pop();
962
+      Navigator.pop(context);
963
+      loading.hide();
964
+    },
965
+  );
966
+
967
+  // set up the AlertDialog
968
+  AlertDialog alert = AlertDialog(
969
+    title: Text("Employee Self Service"),
970
+    content:
971
+    Text("For a better experience, please turn on your device location"),
972
+    actions: [
973
+      noButton,
974
+      okButton,
975
+    ],
976
+  );
977
+
978
+  // show the dialog
979
+  showDialog(
980
+    context: context,
981
+    barrierDismissible: false,
982
+    builder: (BuildContext context) {
983
+      return alert;
984
+    },
985
+  );
986
+}

+ 5
- 5
lib/Screens/Menu/AjukanCuti/ajukancuti_screen.dart Vedi File

@@ -87,7 +87,7 @@ class _AjukanCutiScreenState extends State<AjukanCutiScreen> {
87 87
         String result = object['result'].toString();
88 88
         logDev.log(result, name: "Jenis Cuti Result");
89 89
         if (result.contains("Failed")) {
90
-          loading.hide();
90
+          await loading.hide();
91 91
           setState(() {
92 92
             cutiType = [""];
93 93
             alertDialogFailedRetrievedData(context);
@@ -104,7 +104,7 @@ class _AjukanCutiScreenState extends State<AjukanCutiScreen> {
104 104
               cutiType.add(text);
105 105
             }
106 106
           });
107
-          loading.hide();
107
+          await loading.hide();
108 108
         }
109 109
       } else {
110 110
         setState((){
@@ -118,7 +118,7 @@ class _AjukanCutiScreenState extends State<AjukanCutiScreen> {
118 118
               textColor: Colors.white,
119 119
               fontSize: 16.0);*/
120 120
         });
121
-        loading.hide();
121
+        await loading.hide();
122 122
       }
123 123
     });
124 124
     return cutiType;
@@ -559,7 +559,7 @@ class _AjukanCutiScreenState extends State<AjukanCutiScreen> {
559 559
                                               String to = object['result']['to'].toString();
560 560
                                               String deskripsi = object['result']['deskripsi'].toString();
561 561
                                               String attachment = object['result']['attachment'].toString();*/
562
-                                          loading.hide();
562
+                                          await loading.hide();
563 563
                                           deskripsiTeksController.clear();
564 564
                                           Widget okButton = TextButton(
565 565
                                             child: Text("OK"),
@@ -594,7 +594,7 @@ class _AjukanCutiScreenState extends State<AjukanCutiScreen> {
594 594
                                         } else if (object.containsKey("error").toString() == "true") {
595 595
                                           String errorMessage = object['error']['data']['message']
596 596
                                               .toString();
597
-                                          loading.hide();
597
+                                          await loading.hide();
598 598
                                           Widget okButton = TextButton(
599 599
                                             child: Text("OK"),
600 600
                                             onPressed: () {

+ 3
- 3
lib/Screens/Menu/AjukanCuti/history_cuti.dart Vedi File

@@ -79,7 +79,7 @@ class _HistoryCutiState extends State<HistoryCuti> {
79 79
       if (object.containsKey("result").toString() == "true") {
80 80
         String result = object['result'].toString();
81 81
         if (result.contains("Failed")) {
82
-          loading.hide();
82
+          await loading.hide();
83 83
           alertDialogFailedRetrievedData(context);
84 84
         } else {
85 85
           List <dynamic> historyCuti = object['result'];
@@ -140,7 +140,7 @@ class _HistoryCutiState extends State<HistoryCuti> {
140 140
 
141 141
             HistoryLength = historyCuti.length;
142 142
           });
143
-          loading.hide();
143
+          await loading.hide();
144 144
         }
145 145
       } else {
146 146
         Fluttertoast.showToast(
@@ -152,7 +152,7 @@ class _HistoryCutiState extends State<HistoryCuti> {
152 152
             fontSize: 16.0);
153 153
       }
154 154
     });
155
-    loading.hide();
155
+    await loading.hide();
156 156
   }
157 157
 
158 158
   @override

+ 5
- 3
lib/Screens/Menu/Reimburse/RequestHttp/pengajuanReimburse_post.dart Vedi File

@@ -1,5 +1,6 @@
1 1
 import 'dart:convert';
2 2
 import 'dart:core';
3
+import 'package:flutter/material.dart';
3 4
 import 'package:http/http.dart' as http;
4 5
 import 'package:employee_selfservice_mobile/constants.dart';
5 6
 import 'dart:developer' as developer;
@@ -18,7 +19,7 @@ class PengajuanReimburse_Post {
18 19
 
19 20
   PengajuanReimburse_Post({required this.session});
20 21
 
21
-  static Future<String> connectToAPI(String name, String product, String date, String total, String payment_mode, String description) async {
22
+  static Future<String> connectToAPI(String name, String product, String date, String total, String payment_mode, String description, List<String> file) async {
22 23
     String URL = baseURL + "/api/v1/pengajuan_reimburse";
23 24
 
24 25
     final SharedPreferences prefs = await SharedPreferences.getInstance();
@@ -33,7 +34,8 @@ class PengajuanReimburse_Post {
33 34
           "total" : total,
34 35
           "payment_mode" : payment_mode,
35 36
           "description" : description,
36
-          "session": session
37
+          "session": session,
38
+          "file" : file
37 39
         }
38 40
       ]
39 41
     }), headers: {
@@ -41,7 +43,7 @@ class PengajuanReimburse_Post {
41 43
       "Api-key": apiKey
42 44
     });
43 45
 
44
-    //developer.log(sendData.body, name: "Get Jenis Cuti Result");
46
+    developer.log(sendData.body, name: "Pengajuan REIMBURSE");
45 47
     return sendData.body;
46 48
   }
47 49
 }

+ 5
- 4
lib/Screens/Menu/Reimburse/history_reimburse.dart Vedi File

@@ -68,17 +68,17 @@ class _HistoryReimburse extends State<HistoryReimburse> {
68 68
         messageTextStyle: TextStyle(
69 69
             color: Colors.black, fontSize: 15.0, fontWeight: FontWeight.w600));
70 70
 
71
-    loading.show();
71
+    await loading.show();
72 72
     HistoryReimburse_Post.connectToAPI().then((valueResult) async {
73 73
       Map<String, dynamic> object = jsonDecode(valueResult);
74 74
       if (object.containsKey("result").toString() == "true") {
75 75
         String result = object['result'].toString();
76 76
         if (result.contains("failed")) {
77
-          loading.hide();
77
+          await loading.hide();
78 78
           alertDialogFailedRetrievedData(context);
79 79
         } else {
80 80
           List <dynamic> historyReimburse = object['result'];
81
-          loading.hide();
81
+          await loading.hide();
82 82
           setState(() {
83 83
             for (int i = 0; i < historyReimburse.length; i++){
84 84
               String date = historyReimburse[i]['date'].toString();
@@ -136,7 +136,7 @@ class _HistoryReimburse extends State<HistoryReimburse> {
136 136
             fontSize: 16.0);
137 137
       }
138 138
     });
139
-    loading.hide();
139
+    await loading.hide();
140 140
   }
141 141
 
142 142
   @override
@@ -289,6 +289,7 @@ alertDialogFailedRetrievedData(BuildContext context) {
289 289
   // show the dialog
290 290
   showDialog(
291 291
     context: context,
292
+    barrierDismissible: false,
292 293
     builder: (BuildContext context) {
293 294
       return alert;
294 295
     },

+ 28
- 38
lib/Screens/Menu/Reimburse/reimburse_screen.dart Vedi File

@@ -81,7 +81,7 @@ class _ReimburseScreen extends State<ReimburseScreen> {
81 81
         String result = object['result'].toString();
82 82
         logDev.log(result, name: "Jenis Cuti Result");
83 83
         if (result.contains("failed")) {
84
-          loading.hide();
84
+          await loading.hide();
85 85
           setState(() {
86 86
             alertDialogFailedRetrievedData(context);
87 87
           });
@@ -98,14 +98,14 @@ class _ReimburseScreen extends State<ReimburseScreen> {
98 98
             }
99 99
             logDev.log(idReimburseCategory.toString(), name: "ID Reimburse");
100 100
           });
101
-          loading.hide();
101
+          await loading.hide();
102 102
         }
103 103
       } else {
104
-        setState((){
105
-          loading.hide();
104
+        setState(() async {
105
+          await loading.hide();
106 106
           alertDialogFailedResponse(context);
107 107
         });
108
-        loading.hide();
108
+        await loading.hide();
109 109
       }
110 110
     });
111 111
     return reimburseCategory;
@@ -541,35 +541,20 @@ class _ReimburseScreen extends State<ReimburseScreen> {
541 541
                                               ),
542 542
                                             ),
543 543
                                           ),
544
-                                          Row(
545
-                                            children: [
546
-                                              Expanded(
547
-                                                flex: 3,
548
-                                                child: Text(
549
-                                                  '',
550
-                                                  style: GoogleFonts.inconsolata(
551
-                                                      fontSize: 17),
552
-                                                ),
553
-                                              ),
554
-                                              Expanded(
555
-                                                flex: 7,
556
-                                                child:  Container(
557
-                                                  alignment:
558
-                                                  Alignment.centerLeft,
559
-                                                  margin: EdgeInsets.only(
560
-                                                      left: 15,
561
-                                                      right: 15,
562
-                                                      bottom: 10),
563
-                                                  child: Text(_totalFile + _fileText,
564
-                                                    overflow:
565
-                                                    TextOverflow.ellipsis,
566
-                                                    /*maxLines: 7,*/
567
-                                                    style: TextStyle(
568
-                                                        color: Colors.black54),
569
-                                                  ),
570
-                                                ),
571
-                                              )
572
-                                            ],
544
+                                          Container(
545
+                                            alignment:
546
+                                            Alignment.centerLeft,
547
+                                            margin: EdgeInsets.only(
548
+                                                left: 15,
549
+                                                right: 15,
550
+                                                bottom: 10),
551
+                                            child: Text(_totalFile + _fileText,
552
+                                              overflow:
553
+                                              TextOverflow.ellipsis,
554
+                                              /*maxLines: 7,*/
555
+                                              style: TextStyle(
556
+                                                  color: Colors.black54),
557
+                                            ),
573 558
                                           ),
574 559
                                         ],
575 560
                                       ),
@@ -619,12 +604,13 @@ class _ReimburseScreen extends State<ReimburseScreen> {
619 604
                                           loading.show();
620 605
                                           PengajuanReimburse_Post.connectToAPI(namaProdukTeksController.text.toString(), idReimburse,
621 606
                                               formattedDateFrom, totalHargaTeksController.text.toString(), valuePayment,
622
-                                              deskripsiTeksController.text.toString()).then((valueResult) async {
607
+                                              deskripsiTeksController.text.toString(), fileAttach).then((valueResult) async {
608
+                                                logDev.log(fileAttach.toString(), name: "FILE ATTACH APA AJA");
623 609
                                             Map<String, dynamic> object = json.decode(valueResult);
624 610
                                             if (object.containsKey("result").toString() == "true") {
625 611
                                               String result = object['result'].toString();
626 612
                                               if (result.contains("status")) {
627
-                                                loading.hide();
613
+                                                await loading.hide();
628 614
                                                 Widget okButton = TextButton(
629 615
                                                   child: Text("OK"),
630 616
                                                   onPressed: () {
@@ -644,12 +630,13 @@ class _ReimburseScreen extends State<ReimburseScreen> {
644 630
                                                 // show the dialog
645 631
                                                 showDialog(
646 632
                                                   context: context,
633
+                                                  barrierDismissible: false,
647 634
                                                   builder: (BuildContext context) {
648 635
                                                     return alert;
649 636
                                                   },
650 637
                                                 );
651 638
                                               } else {
652
-                                                loading.hide();
639
+                                                await loading.hide();
653 640
                                                 formattedDateFrom = "";
654 641
                                                 visibleDateFrom = false;
655 642
                                                 visibleDateFrom = false;
@@ -675,13 +662,14 @@ class _ReimburseScreen extends State<ReimburseScreen> {
675 662
                                                 // show the dialog
676 663
                                                 showDialog(
677 664
                                                   context: context,
665
+                                                  barrierDismissible: false,
678 666
                                                   builder: (BuildContext context) {
679 667
                                                     return alert;
680 668
                                                   },
681 669
                                                 );
682 670
                                               }
683 671
                                             } else {
684
-                                              loading.hide();
672
+                                              await loading.hide();
685 673
                                               alertDialogFailedResponse(context);
686 674
                                             }
687 675
                                           });
@@ -831,6 +819,7 @@ alertDialogFailedRetrievedData(BuildContext context){
831 819
   // show the dialog
832 820
   showDialog(
833 821
     context: context,
822
+    barrierDismissible: false,
834 823
     builder: (BuildContext context) {
835 824
       return alert;
836 825
     },
@@ -869,6 +858,7 @@ alertDialogFailedResponse(BuildContext context){
869 858
   // show the dialog
870 859
   showDialog(
871 860
     context: context,
861
+    barrierDismissible: false,
872 862
     builder: (BuildContext context) {
873 863
       return alert;
874 864
     },

+ 22
- 18
lib/Screens/Menu/SlipGaji/slipgaji_screen.dart Vedi File

@@ -91,7 +91,7 @@ class _SlipGajiScreenState extends State<SlipGajiScreen> {
91 91
       if (object.containsKey("result").toString() == "true"){
92 92
         String result = object['result'].toString();
93 93
         if (result.contains("failed")) {
94
-          loading.hide();
94
+          await loading.hide();
95 95
           setState(() {
96 96
             alertDialogFailedRetrievedData(context);
97 97
           });
@@ -141,14 +141,15 @@ class _SlipGajiScreenState extends State<SlipGajiScreen> {
141 141
             HistoryLength = historySlipGaji.length;
142 142
 
143 143
           });
144
-          loading.hide();
144
+          await loading.hide();
145 145
         }
146 146
       } else {
147 147
         setState((){
148 148
           alertDialogFailedResponse(context);
149 149
         });
150
-        loading.hide();
150
+        await loading.hide();
151 151
       }
152
+      await loading.hide();
152 153
     });
153 154
     return HistoryLength;
154 155
   }
@@ -179,7 +180,7 @@ class _SlipGajiScreenState extends State<SlipGajiScreen> {
179 180
         if (object.containsKey("result").toString() == "true"){
180 181
           String result = object['result'].toString();
181 182
           if (result.contains("failed")) {
182
-            loading.hide();
183
+            await loading.hide();
183 184
             logDev.log("ERROR", name: "FAILED RESULT");
184 185
             setState(() {
185 186
               alertDialogFailedRetrievedData(context);
@@ -227,7 +228,7 @@ class _SlipGajiScreenState extends State<SlipGajiScreen> {
227 228
               category_List.removeAt(0);
228 229
               total_List.removeAt(0);
229 230
             });
230
-            loading.hide();
231
+            await loading.hide();
231 232
           }
232 233
         } else {
233 234
           setState((){
@@ -241,8 +242,9 @@ class _SlipGajiScreenState extends State<SlipGajiScreen> {
241 242
                 textColor: Colors.white,
242 243
                 fontSize: 16.0);*/
243 244
           });
244
-          loading.hide();
245
+          await loading.hide();
245 246
         }
247
+        await loading.hide();
246 248
       });
247 249
 
248 250
   }
@@ -370,15 +372,16 @@ class _SlipGajiScreenState extends State<SlipGajiScreen> {
370 372
                               child: Card(
371 373
                                 elevation: 5,
372 374
                                 child: Column(
373
-                                    children: [
374
-                                      Text(number_List[indexBatchID], style: GoogleFonts.rubikBubbles(fontSize: 16)),
375
-                                      Text(number_List[indexBatchID], style: GoogleFonts.rubikBubbles(fontSize: 16)),
376
-                                      Text(structure_List[indexBatchID], style: GoogleFonts.nunito(fontSize: 15)),
377
-                                      Text(period_List[indexBatchID], style: GoogleFonts.nunito(fontSize: 15)),
378
-                                      Text(name_List[indexBatchID], style: GoogleFonts.nunito(fontSize: 15)),
379
-                                      Text(position, style: GoogleFonts.nunito(fontSize: 15)),
380
-                                      Text("Payment : " /*+ payment_List[i]*/, style: GoogleFonts.yeonSung(fontSize: 14, fontStyle: FontStyle.italic))],
381
-                                  ),
375
+                                  children: [
376
+                                    Text(number_List[indexBatchID], style: GoogleFonts.rubikBubbles(fontSize: 16)),
377
+                                    Text(structure_List[indexBatchID], style: GoogleFonts.nunito(fontSize: 15)),
378
+                                    Text(period_List[indexBatchID], style: GoogleFonts.nunito(fontSize: 15)),
379
+                                    Text(name_List[indexBatchID], style: GoogleFonts.nunito(fontSize: 15)),
380
+                                    Text(position, style: GoogleFonts.nunito(fontSize: 15)),
381
+                                    Text("Payment : " /*+ payment_List[i]*/, style: GoogleFonts.yeonSung(fontSize: 14, fontStyle: FontStyle.italic)),
382
+                                    Text(number_List[indexBatchID], style: GoogleFonts.rubikBubbles(fontSize: 16)),
383
+                                  ],
384
+                                ),
382 385
                               ),
383 386
                             );
384 387
                           },
@@ -414,12 +417,12 @@ class _SlipGajiScreenState extends State<SlipGajiScreen> {
414 417
                               if (object.containsKey("result").toString() == "true"){
415 418
                                 String result = object['result'].toString();
416 419
                                 if (result.contains("failed")) {
417
-                                  loading.hide();
420
+                                  await loading.hide();
418 421
                                   setState(() {
419 422
                                     alertDialogFailedDownloadPayslip(context);
420 423
                                   });
421 424
                                 } else if (result.contains("url")){
422
-                                  loading.hide();
425
+                                  await loading.hide();
423 426
                                   setState(() {
424 427
                                     //_launchURL(Uri.parse(baseURL + object['result']['url'].toString()));
425 428
                                     Uri url = Uri.parse(Uri.encodeFull(baseURL + object['result']['url'.toString()]));
@@ -427,11 +430,12 @@ class _SlipGajiScreenState extends State<SlipGajiScreen> {
427 430
                                   });
428 431
                                 }
429 432
                               } else {
430
-                                loading.hide();
433
+                                await loading.hide();
431 434
                                 setState((){
432 435
                                   alertDialogFailedResponse(context);
433 436
                                 });
434 437
                               }
438
+                              await loading.hide();
435 439
                             });
436 440
                           },
437 441
                           style: ElevatedButton.styleFrom(),

+ 4
- 91
lib/Screens/Menu/SuratTugas/history_st.dart Vedi File

@@ -95,7 +95,7 @@ class _HistoryST extends State<HistoryST> {
95 95
       if (object.containsKey("result").toString() == "true") {
96 96
         String result = object['result'].toString();
97 97
         if (result.contains("failed")) {
98
-          loading.hide();
98
+          await loading.hide();
99 99
           alertDialogFailedRetrievedData(context);
100 100
         } else {
101 101
           List <dynamic> historyST = object['result'];
@@ -147,11 +147,11 @@ class _HistoryST extends State<HistoryST> {
147 147
                 if (object.containsKey("result").toString() == "true") {
148 148
                   String result = object['result'].toString();
149 149
                   if (result.contains("failed")) {
150
-                    loading.hide();
150
+                    await loading.hide();
151 151
                     alertDialogFailedRetrievedData(context);
152 152
                   } else {
153 153
                     List <dynamic> detailST = object['result'];
154
-                    loading.hide();
154
+                    await loading.hide();
155 155
                     setState(() {
156 156
                       for (int j = 0; j < HistoryLength; j++){
157 157
                         String tglST = detailST[j]['tgl_st'].toString();
@@ -217,97 +217,10 @@ class _HistoryST extends State<HistoryST> {
217 217
             textColor: Colors.white,
218 218
             fontSize: 16.0);
219 219
       }
220
-      loading.hide();
220
+      await loading.hide();
221 221
     });
222 222
   }
223 223
 
224
-  /*getDetailData() async {
225
-    ProgressDialog loading = ProgressDialog(context);
226
-    loading = ProgressDialog(context,
227
-        type: ProgressDialogType.normal, isDismissible: false, showLogs: true);
228
-    loading.style(
229
-        message: 'Please Wait .....',
230
-        borderRadius: 3,
231
-        backgroundColor: Colors.white,
232
-        progressWidget: CircularProgressIndicator(),
233
-        elevation: 10.0,
234
-        padding: EdgeInsets.all(10),
235
-        insetAnimCurve: Curves.easeInOut,
236
-        progress: 0.0,
237
-        maxProgress: 100.0,
238
-        progressTextStyle: TextStyle(
239
-            color: Colors.black, fontSize: 10.0, fontWeight: FontWeight.w400),
240
-        messageTextStyle: TextStyle(
241
-            color: Colors.black, fontSize: 15.0, fontWeight: FontWeight.w600));
242
-
243
-    logDev.log(HistoryLength.toString(), name: "Banyak History");
244
-    for (int i = 0; i < HistoryLength;i++){
245
-      DetailST_Post.connectToAPI(id_List[i]).then((valueResult) async {
246
-        Map<String, dynamic> object = jsonDecode(valueResult);
247
-        if (object.containsKey("result").toString() == "true") {
248
-          String result = object['result'].toString();
249
-          if (result.contains("failed")) {
250
-            loading.hide();
251
-            alertDialogFailedRetrievedData(context);
252
-          } else {
253
-            List <dynamic> detailST = object['result'];
254
-            loading.hide();
255
-            setState(() {
256
-              for (int j = 0; j < HistoryLength; j++){
257
-                String tglST = detailST[j]['tgl_st'].toString();
258
-                String uMuka = detailST[j]['umuka'].toString();
259
-                String tglBerangkat = detailST[j]['tgl_berangkat'].toString();
260
-                String tglKembali = detailST[j]['tgl_kembali'].toString();
261
-                String tujuan = detailST[j]['tujuan'].toString();
262
-
263
-                List<dynamic> ticketID = object['result']['ticket_ids'];
264
-                String ticketType = ticketID[j]['type'].toString();
265
-                String ticketFrom = ticketID[j]['from'].toString();
266
-                String ticketTo = ticketID[j]['to'].toString();
267
-                String ticketDate = ticketID[j]['tgl'].toString();
268
-                String ticketPrice = ticketID[j]['harga'].toString();
269
-
270
-                tglST_List.add(tglST);
271
-                uMuka_List.add(uMuka);
272
-                tglBerangkat_List.add(tglBerangkat);
273
-                tglKembali_List.add(tglKembali);
274
-                tujuan_List.add(tujuan);
275
-
276
-                ticketType_List.add(ticketType);
277
-                ticketFrom_List.add(ticketFrom);
278
-                ticketTo_List.add(ticketTo);
279
-                ticketDate_List.add(ticketDate);
280
-                ticketPrice_List.add(ticketPrice);
281
-
282
-                logDev.log(tglST_List.toString(), name:"semua list");
283
-              }
284
-            });
285
-          }
286
-        } else {
287
-          Fluttertoast.showToast(
288
-              msg: "Server Response Error",
289
-              toastLength: Toast.LENGTH_SHORT,
290
-              gravity: ToastGravity.CENTER,
291
-              timeInSecForIosWeb: 1,
292
-              textColor: Colors.white,
293
-              fontSize: 16.0);
294
-        }
295
-      });
296
-    }
297
-    tglST_List.removeAt(0);
298
-    uMuka_List.removeAt(0);
299
-    tglBerangkat_List.removeAt(0);
300
-    tglKembali_List.removeAt(0);
301
-    tujuan_List.removeAt(0);
302
-
303
-    ticketType_List.removeAt(0);
304
-    ticketFrom_List.removeAt(0);
305
-    ticketTo_List.removeAt(0);
306
-    ticketDate_List.removeAt(0);
307
-    ticketPrice_List.removeAt(0);
308
-    loading.hide();
309
-  }*/
310
-
311 224
   @override
312 225
   Widget build(BuildContext context) {
313 226
     var size = MediaQuery.of(context).size;

+ 3
- 29
lib/Screens/Menu/SuratTugas/pengajuan_extendTanggalKembali.dart Vedi File

@@ -62,31 +62,6 @@ class _PengajuanExtendTanggalKembali_Screen extends State<PengajuanExtendTanggal
62 62
     super.initState();
63 63
   }
64 64
 
65
-  /*loadingPage(){
66
-    ProgressDialog loading = ProgressDialog(context);
67
-    loading = ProgressDialog(context,
68
-        type: ProgressDialogType.normal, isDismissible: false, showLogs: true);
69
-    loading.style(
70
-        message: 'Please Wait .....',
71
-        borderRadius: 3,
72
-        backgroundColor: Colors.white,
73
-        progressWidget: CircularProgressIndicator(),
74
-        elevation: 10.0,
75
-        padding: EdgeInsets.all(10),
76
-        insetAnimCurve: Curves.easeInOut,
77
-        progress: 0.0,
78
-        maxProgress: 100.0,
79
-        progressTextStyle: TextStyle(
80
-            color: Colors.black, fontSize: 10.0, fontWeight: FontWeight.w400),
81
-        messageTextStyle: TextStyle(
82
-            color: Colors.black, fontSize: 15.0, fontWeight: FontWeight.w600));
83
-
84
-    loading.show();
85
-    WidgetsBinding.instance.addPostFrameCallback((_){
86
-      loading.hide();
87
-    });
88
-  }*/
89
-
90 65
   @override
91 66
   Widget build(BuildContext context) {
92 67
     return Scaffold(
@@ -887,8 +862,7 @@ class _PengajuanExtendTanggalKembali_Screen extends State<PengajuanExtendTanggal
887 862
                                                   if (object.containsKey("result").toString() == "true") {
888 863
                                                     String result = object['result'].toString();
889 864
                                                     if (result.contains("failed")){
890
-                                                      loading.hide();
891
-                                                      loading.hide();
865
+                                                      await loading.hide();
892 866
                                                       Widget okButton = TextButton(
893 867
                                                         child: Text("OK"),
894 868
                                                         onPressed: () {
@@ -913,7 +887,7 @@ class _PengajuanExtendTanggalKembali_Screen extends State<PengajuanExtendTanggal
913 887
                                                         },
914 888
                                                       );
915 889
                                                     } else {
916
-                                                      loading.hide();
890
+                                                      await loading.hide();
917 891
                                                       /*formattedDateFrom = "";
918 892
                                                   visibleDateFrom = false;
919 893
                                                   visibleDateFrom = false;
@@ -945,7 +919,7 @@ class _PengajuanExtendTanggalKembali_Screen extends State<PengajuanExtendTanggal
945 919
                                                       );
946 920
                                                     }
947 921
                                                   } else {
948
-                                                    loading.hide();
922
+                                                    await loading.hide();
949 923
                                                     alertDialogFailedResponse(context);
950 924
                                                   }
951 925
                                                 } );

+ 3
- 29
lib/Screens/Menu/SuratTugas/pengajuan_st.dart Vedi File

@@ -61,31 +61,6 @@ class _PengajuanST_Screen_State extends State<PengajuanST_Screen> {
61 61
     super.initState();
62 62
   }
63 63
 
64
-  /*loadingPage(){
65
-    ProgressDialog loading = ProgressDialog(context);
66
-    loading = ProgressDialog(context,
67
-        type: ProgressDialogType.normal, isDismissible: false, showLogs: true);
68
-    loading.style(
69
-        message: 'Please Wait .....',
70
-        borderRadius: 3,
71
-        backgroundColor: Colors.white,
72
-        progressWidget: CircularProgressIndicator(),
73
-        elevation: 10.0,
74
-        padding: EdgeInsets.all(10),
75
-        insetAnimCurve: Curves.easeInOut,
76
-        progress: 0.0,
77
-        maxProgress: 100.0,
78
-        progressTextStyle: TextStyle(
79
-            color: Colors.black, fontSize: 10.0, fontWeight: FontWeight.w400),
80
-        messageTextStyle: TextStyle(
81
-            color: Colors.black, fontSize: 15.0, fontWeight: FontWeight.w600));
82
-
83
-    loading.show();
84
-    WidgetsBinding.instance.addPostFrameCallback((_){
85
-      loading.hide();
86
-    });
87
-  }*/
88
-
89 64
   @override
90 65
   Widget build(BuildContext context) {
91 66
     var size = MediaQuery.of(context).size;
@@ -865,8 +840,7 @@ class _PengajuanST_Screen_State extends State<PengajuanST_Screen> {
865 840
                                           String result =
866 841
                                           object['result'].toString();
867 842
                                           if (result.contains("failed")) {
868
-                                            loading.hide();
869
-                                            loading.hide();
843
+                                            await loading.hide();
870 844
                                             Widget okButton = TextButton(
871 845
                                               child: Text("OK"),
872 846
                                               onPressed: () {
@@ -898,7 +872,7 @@ class _PengajuanST_Screen_State extends State<PengajuanST_Screen> {
898 872
                                               },
899 873
                                             );
900 874
                                           } else {
901
-                                            loading.hide();
875
+                                            await loading.hide();
902 876
                                             /*formattedDateFrom = "";
903 877
                                                   visibleDateFrom = false;
904 878
                                                   visibleDateFrom = false;
@@ -940,7 +914,7 @@ class _PengajuanST_Screen_State extends State<PengajuanST_Screen> {
940 914
                                             );
941 915
                                           }
942 916
                                         } else {
943
-                                          loading.hide();
917
+                                          await loading.hide();
944 918
                                           alertDialogFailedResponse(
945 919
                                               context);
946 920
                                         }

+ 3
- 32
lib/Screens/Menu/SuratTugas/pengajuan_uangMukaTambahan.dart Vedi File

@@ -1,6 +1,4 @@
1 1
 import 'dart:convert';
2
-import 'dart:io';
3
-import 'package:file_picker/file_picker.dart';
4 2
 import 'package:flutter/cupertino.dart';
5 3
 import 'package:flutter/material.dart';
6 4
 import 'package:fluttertoast/fluttertoast.dart';
@@ -20,7 +18,6 @@ TextEditingController ticketFromTeksController = TextEditingController();
20 18
 TextEditingController ticketToTeksController = TextEditingController();
21 19
 TextEditingController ticketPriceTeksController = TextEditingController();
22 20
 
23
-
24 21
 class PengajuanUangMukaTambahan_Screen extends StatefulWidget {
25 22
   const PengajuanUangMukaTambahan_Screen({Key? key}) : super(key: key);
26 23
 
@@ -62,31 +59,6 @@ class _PengajuanUangMukaTambahan_Screen extends State<PengajuanUangMukaTambahan_
62 59
     super.initState();
63 60
   }
64 61
 
65
-  /*loadingPage(){
66
-    ProgressDialog loading = ProgressDialog(context);
67
-    loading = ProgressDialog(context,
68
-        type: ProgressDialogType.normal, isDismissible: false, showLogs: true);
69
-    loading.style(
70
-        message: 'Please Wait .....',
71
-        borderRadius: 3,
72
-        backgroundColor: Colors.white,
73
-        progressWidget: CircularProgressIndicator(),
74
-        elevation: 10.0,
75
-        padding: EdgeInsets.all(10),
76
-        insetAnimCurve: Curves.easeInOut,
77
-        progress: 0.0,
78
-        maxProgress: 100.0,
79
-        progressTextStyle: TextStyle(
80
-            color: Colors.black, fontSize: 10.0, fontWeight: FontWeight.w400),
81
-        messageTextStyle: TextStyle(
82
-            color: Colors.black, fontSize: 15.0, fontWeight: FontWeight.w600));
83
-
84
-    loading.show();
85
-    WidgetsBinding.instance.addPostFrameCallback((_){
86
-      loading.hide();
87
-    });
88
-  }*/
89
-
90 62
   @override
91 63
   Widget build(BuildContext context) {
92 64
     return Scaffold(
@@ -887,8 +859,7 @@ class _PengajuanUangMukaTambahan_Screen extends State<PengajuanUangMukaTambahan_
887 859
                                                   if (object.containsKey("result").toString() == "true") {
888 860
                                                     String result = object['result'].toString();
889 861
                                                     if (result.contains("failed")){
890
-                                                      loading.hide();
891
-                                                      loading.hide();
862
+                                                      await loading.hide();
892 863
                                                       Widget okButton = TextButton(
893 864
                                                         child: Text("OK"),
894 865
                                                         onPressed: () {
@@ -913,7 +884,7 @@ class _PengajuanUangMukaTambahan_Screen extends State<PengajuanUangMukaTambahan_
913 884
                                                         },
914 885
                                                       );
915 886
                                                     } else {
916
-                                                      loading.hide();
887
+                                                      await loading.hide();
917 888
                                                       /*formattedDateFrom = "";
918 889
                                                   visibleDateFrom = false;
919 890
                                                   visibleDateFrom = false;
@@ -945,7 +916,7 @@ class _PengajuanUangMukaTambahan_Screen extends State<PengajuanUangMukaTambahan_
945 916
                                                       );
946 917
                                                     }
947 918
                                                   } else {
948
-                                                    loading.hide();
919
+                                                    await loading.hide();
949 920
                                                     alertDialogFailedResponse(context);
950 921
                                                   }
951 922
                                                 } );

+ 3
- 3
lib/Screens/Settings/settings_screen.dart Vedi File

@@ -124,7 +124,7 @@ class _SettingsScreenState extends State<SettingsScreen> {
124 124
               textColor: Colors.white,
125 125
               fontSize: 16.0);
126 126
         }
127
-        loading.hide();
127
+        await loading.hide();
128 128
       } else {
129 129
         Fluttertoast.showToast(
130 130
             msg: "Server Response Error",
@@ -133,10 +133,10 @@ class _SettingsScreenState extends State<SettingsScreen> {
133 133
             timeInSecForIosWeb: 1,
134 134
             textColor: Colors.white,
135 135
             fontSize: 16.0);
136
-        loading.hide();
136
+        await loading.hide();
137 137
       }
138 138
     });
139
-    loading.hide();
139
+    await loading.hide();
140 140
     return _imageToShow;
141 141
   }
142 142
 

+ 1
- 1
lib/main.dart Vedi File

@@ -110,7 +110,7 @@ class _MyAppState extends State<MyApp> {
110 110
 
111 111
     // 2. This method only call when App in forground it mean app must be opened
112 112
     FirebaseMessaging.onMessage.listen((RemoteMessage message) {
113
-      RemoteNotification? notification = message.notification;
113
+      RemoteNotification? notification = message.notification!;
114 114
       //AndroidNotification? android = message.notification?.android;
115 115
       if (notification != null) {
116 116
         flutterLocalNotificationsPlugin.show(

+ 4
- 0
linux/flutter/generated_plugin_registrant.cc Vedi File

@@ -6,9 +6,13 @@
6 6
 
7 7
 #include "generated_plugin_registrant.h"
8 8
 
9
+#include <file_selector_linux/file_selector_plugin.h>
9 10
 #include <url_launcher_linux/url_launcher_plugin.h>
10 11
 
11 12
 void fl_register_plugins(FlPluginRegistry* registry) {
13
+  g_autoptr(FlPluginRegistrar) file_selector_linux_registrar =
14
+      fl_plugin_registry_get_registrar_for_plugin(registry, "FileSelectorPlugin");
15
+  file_selector_plugin_register_with_registrar(file_selector_linux_registrar);
12 16
   g_autoptr(FlPluginRegistrar) url_launcher_linux_registrar =
13 17
       fl_plugin_registry_get_registrar_for_plugin(registry, "UrlLauncherPlugin");
14 18
   url_launcher_plugin_register_with_registrar(url_launcher_linux_registrar);

+ 1
- 0
linux/flutter/generated_plugins.cmake Vedi File

@@ -3,6 +3,7 @@
3 3
 #
4 4
 
5 5
 list(APPEND FLUTTER_PLUGIN_LIST
6
+  file_selector_linux
6 7
   url_launcher_linux
7 8
 )
8 9
 

+ 2
- 0
macos/Flutter/GeneratedPluginRegistrant.swift Vedi File

@@ -7,6 +7,7 @@ import Foundation
7 7
 
8 8
 import connectivity_plus
9 9
 import device_info_plus
10
+import file_selector_macos
10 11
 import firebase_core
11 12
 import firebase_crashlytics
12 13
 import firebase_messaging
@@ -21,6 +22,7 @@ import url_launcher_macos
21 22
 func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
22 23
   ConnectivityPlugin.register(with: registry.registrar(forPlugin: "ConnectivityPlugin"))
23 24
   DeviceInfoPlusMacosPlugin.register(with: registry.registrar(forPlugin: "DeviceInfoPlusMacosPlugin"))
25
+  FileSelectorPlugin.register(with: registry.registrar(forPlugin: "FileSelectorPlugin"))
24 26
   FLTFirebaseCorePlugin.register(with: registry.registrar(forPlugin: "FLTFirebaseCorePlugin"))
25 27
   FLTFirebaseCrashlyticsPlugin.register(with: registry.registrar(forPlugin: "FLTFirebaseCrashlyticsPlugin"))
26 28
   FLTFirebaseMessagingPlugin.register(with: registry.registrar(forPlugin: "FLTFirebaseMessagingPlugin"))

+ 146
- 74
pubspec.lock Vedi File

@@ -5,10 +5,10 @@ packages:
5 5
     dependency: transitive
6 6
     description:
7 7
       name: _flutterfire_internals
8
-      sha256: "9ebe81588e666f7e2b21309f2b5653bd9642d7f27fd0a6894278d2ff40cb9481"
8
+      sha256: a742f71d7f3484253a623b30e19256aa4668ecbb3de6ad1beb0bcf8d4777ecd8
9 9
       url: "https://pub.dev"
10 10
     source: hosted
11
-    version: "1.3.2"
11
+    version: "1.3.3"
12 12
   animated_splash_screen:
13 13
     dependency: "direct main"
14 14
     description:
@@ -33,6 +33,14 @@ packages:
33 33
       url: "https://pub.dev"
34 34
     source: hosted
35 35
     version: "2.0.7"
36
+  app_settings:
37
+    dependency: "direct main"
38
+    description:
39
+      name: app_settings
40
+      sha256: "66715a323ac36d6c8201035ba678777c0d2ea869e4d7064300d95af10c3bb8cb"
41
+      url: "https://pub.dev"
42
+    source: hosted
43
+    version: "4.2.0"
36 44
   archive:
37 45
     dependency: transitive
38 46
     description:
@@ -85,10 +93,10 @@ packages:
85 93
     dependency: transitive
86 94
     description:
87 95
       name: cli_util
88
-      sha256: "66f86e916d285c1a93d3b79587d94bd71984a66aac4ff74e524cfa7877f1395c"
96
+      sha256: b8db3080e59b2503ca9e7922c3df2072cf13992354d5e944074ffa836fba43b7
89 97
       url: "https://pub.dev"
90 98
     source: hosted
91
-    version: "0.3.5"
99
+    version: "0.4.0"
92 100
   clock:
93 101
     dependency: transitive
94 102
     description:
@@ -109,10 +117,10 @@ packages:
109 117
     dependency: "direct main"
110 118
     description:
111 119
       name: connectivity_plus
112
-      sha256: b74247fad72c171381dbe700ca17da24deac637ab6d43c343b42867acb95c991
120
+      sha256: "8599ae9edca5ff96163fca3e36f8e481ea917d1e71cdad912c084b5579913f34"
113 121
       url: "https://pub.dev"
114 122
     source: hosted
115
-    version: "3.0.6"
123
+    version: "4.0.1"
116 124
   connectivity_plus_platform_interface:
117 125
     dependency: transitive
118 126
     description:
@@ -173,10 +181,10 @@ packages:
173 181
     dependency: "direct main"
174 182
     description:
175 183
       name: device_info_plus
176
-      sha256: f52ab3b76b36ede4d135aab80194df8925b553686f0fa12226b4e2d658e45903
184
+      sha256: "2c35b6d1682b028e42d07b3aee4b98fa62996c10bc12cb651ec856a80d6a761b"
177 185
       url: "https://pub.dev"
178 186
     source: hosted
179
-    version: "8.2.2"
187
+    version: "9.0.2"
180 188
   device_info_plus_platform_interface:
181 189
     dependency: transitive
182 190
     description:
@@ -189,10 +197,10 @@ packages:
189 197
     dependency: "direct main"
190 198
     description:
191 199
       name: dio
192
-      sha256: b99b1d56dc0d5dece70957023af002dbd49614b4a1bf86d3a254af3fe781bdf2
200
+      sha256: a9d76e72985d7087eb7c5e7903224ae52b337131518d127c554b9405936752b8
193 201
       url: "https://pub.dev"
194 202
     source: hosted
195
-    version: "5.2.0+1"
203
+    version: "5.2.1+1"
196 204
   double_back_to_close:
197 205
     dependency: "direct main"
198 206
     description:
@@ -229,18 +237,50 @@ packages:
229 237
     dependency: "direct main"
230 238
     description:
231 239
       name: file_picker
232
-      sha256: "9d6e95ec73abbd31ec54d0e0df8a961017e165aba1395e462e5b31ea0c165daf"
240
+      sha256: b1729fc96627dd44012d0a901558177418818d6bd428df59dcfeb594e5f66432
233 241
       url: "https://pub.dev"
234 242
     source: hosted
235
-    version: "5.3.1"
243
+    version: "5.3.2"
244
+  file_selector_linux:
245
+    dependency: transitive
246
+    description:
247
+      name: file_selector_linux
248
+      sha256: d17c5e450192cdc40b718804dfb4eaf79a71bed60ee9530703900879ba50baa3
249
+      url: "https://pub.dev"
250
+    source: hosted
251
+    version: "0.9.1+3"
252
+  file_selector_macos:
253
+    dependency: transitive
254
+    description:
255
+      name: file_selector_macos
256
+      sha256: "6290eec24fc4cc62535fe609e0c6714d3c1306191dc8c3b0319eaecc09423a3a"
257
+      url: "https://pub.dev"
258
+    source: hosted
259
+    version: "0.9.2"
260
+  file_selector_platform_interface:
261
+    dependency: transitive
262
+    description:
263
+      name: file_selector_platform_interface
264
+      sha256: "2a7f4bbf7bd2f022ecea85bfb1754e87f7dd403a9abc17a84a4fa2ddfe2abc0a"
265
+      url: "https://pub.dev"
266
+    source: hosted
267
+    version: "2.5.1"
268
+  file_selector_windows:
269
+    dependency: transitive
270
+    description:
271
+      name: file_selector_windows
272
+      sha256: ef246380b66d1fb9089fc65622c387bf3780bca79f533424c31d07f12c2c7fd8
273
+      url: "https://pub.dev"
274
+    source: hosted
275
+    version: "0.9.2"
236 276
   firebase_core:
237 277
     dependency: "direct main"
238 278
     description:
239 279
       name: firebase_core
240
-      sha256: e9b36b391690cf329c6fb1de220045e97c13784c303820cd33962319580a56c6
280
+      sha256: a4a99204da264a0aa9d54a332ea0315ce7b0768075139c77abefe98093dd98be
241 281
       url: "https://pub.dev"
242 282
     source: hosted
243
-    version: "2.13.1"
283
+    version: "2.14.0"
244 284
   firebase_core_platform_interface:
245 285
     dependency: transitive
246 286
     description:
@@ -253,50 +293,50 @@ packages:
253 293
     dependency: transitive
254 294
     description:
255 295
       name: firebase_core_web
256
-      sha256: "8c0f4c87d20e2d001a5915df238c1f9c88704231f591324205f5a5d2a7740a45"
296
+      sha256: "0fd5c4b228de29b55fac38aed0d9e42514b3d3bd47675de52bf7f8fccaf922fa"
257 297
       url: "https://pub.dev"
258 298
     source: hosted
259
-    version: "2.5.0"
299
+    version: "2.6.0"
260 300
   firebase_crashlytics:
261 301
     dependency: "direct main"
262 302
     description:
263 303
       name: firebase_crashlytics
264
-      sha256: "603f23a74995c193cae89a784b8da529b1e6a91c03bc63f885f36456e9e867a0"
304
+      sha256: "398012cf7838f8a373a25da65dd62fc3a3f4abe4b5f886caa634952c3387dce3"
265 305
       url: "https://pub.dev"
266 306
     source: hosted
267
-    version: "3.3.2"
307
+    version: "3.3.3"
268 308
   firebase_crashlytics_platform_interface:
269 309
     dependency: transitive
270 310
     description:
271 311
       name: firebase_crashlytics_platform_interface
272
-      sha256: cefeeeb98abdb9d848581603bd1e33a2a8e6d3ed937586cb84437e606049071b
312
+      sha256: "39dfcc9a5ddfaa0588ad67f1016174dd9e19f6b31f592b8641bd559399567592"
273 313
       url: "https://pub.dev"
274 314
     source: hosted
275
-    version: "3.6.2"
315
+    version: "3.6.3"
276 316
   firebase_messaging:
277 317
     dependency: "direct main"
278 318
     description:
279 319
       name: firebase_messaging
280
-      sha256: a01d7b9eb43a4bad54a411edb2b4124089d88eab029191893e83c39e18ab19f7
320
+      sha256: "77d93f897c893fa7c8de433f6950123bd9c56f27fd7f88a032a53102ca23fcee"
281 321
       url: "https://pub.dev"
282 322
     source: hosted
283
-    version: "14.6.2"
323
+    version: "14.6.3"
284 324
   firebase_messaging_platform_interface:
285 325
     dependency: transitive
286 326
     description:
287 327
       name: firebase_messaging_platform_interface
288
-      sha256: c2fef3e30fbfa3a71d74477df102d1c2f5aad860bb68bb4086b0af3b12abedf3
328
+      sha256: e9e9dc48a3d8ffa67aaba3d6b1ebf74bc7d7d8c83d10b1458ff97878b9d8a2b0
289 329
       url: "https://pub.dev"
290 330
     source: hosted
291
-    version: "4.5.2"
331
+    version: "4.5.3"
292 332
   firebase_messaging_web:
293 333
     dependency: transitive
294 334
     description:
295 335
       name: firebase_messaging_web
296
-      sha256: "8d280f0110ca4946b9863e578b9879874066ac486ffa596a609aab329fb6fa7e"
336
+      sha256: "381f217e41e0e407baf8df21787b97e46fabfacefd6a953425be3a6cdf2269f4"
297 337
       url: "https://pub.dev"
298 338
     source: hosted
299
-    version: "3.5.2"
339
+    version: "3.5.3"
300 340
   flutter:
301 341
     dependency: "direct main"
302 342
     description: flutter
@@ -322,10 +362,10 @@ packages:
322 362
     dependency: "direct main"
323 363
     description:
324 364
       name: flutter_launcher_icons
325
-      sha256: ce0e501cfc258907842238e4ca605e74b7fd1cdf04b3b43e86c43f3e40a1592c
365
+      sha256: "526faf84284b86a4cb36d20a5e45147747b7563d921373d4ee0559c54fcdbcea"
326 366
       url: "https://pub.dev"
327 367
     source: hosted
328
-    version: "0.11.0"
368
+    version: "0.13.1"
329 369
   flutter_local_notifications:
330 370
     dependency: "direct main"
331 371
     description:
@@ -354,26 +394,26 @@ packages:
354 394
     dependency: "direct main"
355 395
     description:
356 396
       name: flutter_map
357
-      sha256: "59dfd14267b691bea55760786b47d3172d47cdcc0d79ff930746a5ad123491b8"
397
+      sha256: "52c65a977daae42f9aae6748418dd1535eaf27186e9bac9bf431843082bc75a3"
358 398
       url: "https://pub.dev"
359 399
     source: hosted
360
-    version: "3.1.0"
400
+    version: "4.0.0"
361 401
   flutter_map_marker_cluster:
362 402
     dependency: "direct main"
363 403
     description:
364 404
       name: flutter_map_marker_cluster
365
-      sha256: "63d8658a4d1357679f591308b9567d1d66cb23ba37a2b7792ff48ff009553283"
405
+      sha256: "362088b16311b6743a7930857129ec6c7c807ecca777fe1033c0ad6688339e36"
366 406
       url: "https://pub.dev"
367 407
     source: hosted
368
-    version: "1.1.0"
408
+    version: "1.1.1"
369 409
   flutter_map_marker_popup:
370 410
     dependency: transitive
371 411
     description:
372 412
       name: flutter_map_marker_popup
373
-      sha256: f5a40d006e07154a213345300217e8f995ddd3cd280dbe8dc8964f47e7d7fe7c
413
+      sha256: "7cf30fab25ffe1ba04a9e0fbe1227f44a83c73256d4d70be1c26cf141ce5c41d"
374 414
       url: "https://pub.dev"
375 415
     source: hosted
376
-    version: "4.0.3"
416
+    version: "4.1.0"
377 417
   flutter_plugin_android_lifecycle:
378 418
     dependency: transitive
379 419
     description:
@@ -410,10 +450,10 @@ packages:
410 450
     dependency: "direct main"
411 451
     description:
412 452
       name: flutter_svg
413
-      sha256: "6ff8c902c8056af9736de2689f63f81c42e2d642b9f4c79dbf8790ae48b63012"
453
+      sha256: "8c5d68a82add3ca76d792f058b186a0599414f279f00ece4830b9b231b570338"
414 454
       url: "https://pub.dev"
415 455
     source: hosted
416
-    version: "2.0.6"
456
+    version: "2.0.7"
417 457
   flutter_test:
418 458
     dependency: "direct dev"
419 459
     description: flutter
@@ -492,18 +532,18 @@ packages:
492 532
     dependency: transitive
493 533
     description:
494 534
       name: geolocator_android
495
-      sha256: "6cd3c622df085a79fd61f5c14fa024c3ba593aa6b1df2ee809ac59f45e6a9861"
535
+      sha256: "94c2cf51f4a8387335cc2d1a21cc50897bc93069e05fc09aee29bd353a14f6f5"
496 536
       url: "https://pub.dev"
497 537
     source: hosted
498
-    version: "4.1.8"
538
+    version: "4.1.9"
499 539
   geolocator_apple:
500 540
     dependency: transitive
501 541
     description:
502 542
       name: geolocator_apple
503
-      sha256: d29a4bdd48b1a575d9928d2e43c2abb2b0bedd5b34399ccfaf76d0067fc0d3b1
543
+      sha256: "36527c555f4c425f7d8fa8c7c07d67b78e3ff7590d40448051959e1860c1cfb4"
504 544
       url: "https://pub.dev"
505 545
     source: hosted
506
-    version: "2.2.6"
546
+    version: "2.2.7"
507 547
   geolocator_platform_interface:
508 548
     dependency: transitive
509 549
     description:
@@ -564,50 +604,50 @@ packages:
564 604
     dependency: transitive
565 605
     description:
566 606
       name: image
567
-      sha256: "8e9d133755c3e84c73288363e6343157c383a0c6c56fc51afcc5d4d7180306d6"
607
+      sha256: a72242c9a0ffb65d03de1b7113bc4e189686fc07c7147b8b41811d0dd0e0d9bf
568 608
       url: "https://pub.dev"
569 609
     source: hosted
570
-    version: "3.3.0"
610
+    version: "4.0.17"
571 611
   image_cropper:
572 612
     dependency: "direct main"
573 613
     description:
574 614
       name: image_cropper
575
-      sha256: "710ab4b7953e9ce1d27d833f741e5f8f3afb0b0ba3556dc0b844741b5f55c2b3"
615
+      sha256: "542c3453109d16bcc388e43ae2276044d2cd6a6d20c68bdcff2c94ab9363ea15"
576 616
       url: "https://pub.dev"
577 617
     source: hosted
578
-    version: "3.0.3"
618
+    version: "4.0.1"
579 619
   image_cropper_for_web:
580 620
     dependency: transitive
581 621
     description:
582 622
       name: image_cropper_for_web
583
-      sha256: "09e93a8ec0435adcaa23622ac090442872f18145d70b9ff605ffedcf97d56255"
623
+      sha256: "89c936aa772a35b69ca67b78049ae9fa163a4fb8da2f6dee3893db8883fb49d2"
584 624
       url: "https://pub.dev"
585 625
     source: hosted
586
-    version: "1.0.3"
626
+    version: "2.0.0"
587 627
   image_cropper_platform_interface:
588 628
     dependency: transitive
589 629
     description:
590 630
       name: image_cropper_platform_interface
591
-      sha256: "62349e3aab63873ea9b9ab9f69d036ab8a0d74b3004beec4303981386cb9273f"
631
+      sha256: b232175c132b2f7ede3e1f101652bcd635cb4079a77c6dded8e6d32e6578d685
592 632
       url: "https://pub.dev"
593 633
     source: hosted
594
-    version: "3.0.3"
634
+    version: "4.0.0"
595 635
   image_picker:
596 636
     dependency: "direct main"
597 637
     description:
598 638
       name: image_picker
599
-      sha256: "9978d3510af4e6a902e545ce19229b926e6de6a1828d6134d3aab2e129a4d270"
639
+      sha256: "6432178560d95303cc70d038363f892f5a05750dd27bc55220c7301af54d05e9"
600 640
       url: "https://pub.dev"
601 641
     source: hosted
602
-    version: "0.8.7+5"
642
+    version: "0.8.8"
603 643
   image_picker_android:
604 644
     dependency: transitive
605 645
     description:
606 646
       name: image_picker_android
607
-      sha256: "3083c3a3245adf9f3eb7bacf0eaa6a1f087dd538fab73a13a2f7907602601692"
647
+      sha256: "1ec6830289f5b6aeff3aa8239ea737c71950178dda389342dc2215adb06b4bd8"
608 648
       url: "https://pub.dev"
609 649
     source: hosted
610
-    version: "0.8.6+19"
650
+    version: "0.8.6+20"
611 651
   image_picker_for_web:
612 652
     dependency: transitive
613 653
     description:
@@ -624,14 +664,38 @@ packages:
624 664
       url: "https://pub.dev"
625 665
     source: hosted
626 666
     version: "0.8.7+4"
667
+  image_picker_linux:
668
+    dependency: transitive
669
+    description:
670
+      name: image_picker_linux
671
+      sha256: "1d8f9a97178d6b8a035f1d2765f17f8ca3d36a40d5594e742a481b1e002f20be"
672
+      url: "https://pub.dev"
673
+    source: hosted
674
+    version: "0.2.0"
675
+  image_picker_macos:
676
+    dependency: transitive
677
+    description:
678
+      name: image_picker_macos
679
+      sha256: ff094b36d6c06200808f733144a033e45b4e17d59524e1cf7d2af7e4cb94e1ab
680
+      url: "https://pub.dev"
681
+    source: hosted
682
+    version: "0.2.0"
627 683
   image_picker_platform_interface:
628 684
     dependency: transitive
629 685
     description:
630 686
       name: image_picker_platform_interface
631
-      sha256: "57e66df4d3850fae4c9e45b3ac4c53cda0e35fe8a833914d3502d2faa0b48597"
687
+      sha256: "7c7b96bb9413a9c28229e717e6fd1e3edd1cc5569c1778fcca060ecf729b65ee"
688
+      url: "https://pub.dev"
689
+    source: hosted
690
+    version: "2.8.0"
691
+  image_picker_windows:
692
+    dependency: transitive
693
+    description:
694
+      name: image_picker_windows
695
+      sha256: bf77b819eb62c487e6af53b9eb213adc12bd060ef7e43f3b1dd69c53cc24a61d
632 696
       url: "https://pub.dev"
633 697
     source: hosted
634
-    version: "2.6.4"
698
+    version: "0.2.0"
635 699
   internet_connection_checker:
636 700
     dependency: "direct main"
637 701
     description:
@@ -872,14 +936,6 @@ packages:
872 936
       url: "https://pub.dev"
873 937
     source: hosted
874 938
     version: "1.0.1"
875
-  positioned_tap_detector_2:
876
-    dependency: transitive
877
-    description:
878
-      name: positioned_tap_detector_2
879
-      sha256: "52e06863ad3e1f82b058fd05054fc8c9caeeb3b47d5cea7a24bd9320746059c1"
880
-      url: "https://pub.dev"
881
-    source: hosted
882
-    version: "1.0.4"
883 939
   process:
884 940
     dependency: transitive
885 941
     description:
@@ -916,10 +972,10 @@ packages:
916 972
     dependency: "direct main"
917 973
     description:
918 974
       name: shared_preferences
919
-      sha256: "16d3fb6b3692ad244a695c0183fca18cf81fd4b821664394a781de42386bf022"
975
+      sha256: "396f85b8afc6865182610c0a2fc470853d56499f75f7499e2a73a9f0539d23d0"
920 976
       url: "https://pub.dev"
921 977
     source: hosted
922
-    version: "2.1.1"
978
+    version: "2.1.2"
923 979
   shared_preferences_android:
924 980
     dependency: transitive
925 981
     description:
@@ -1049,10 +1105,10 @@ packages:
1049 1105
     dependency: "direct main"
1050 1106
     description:
1051 1107
       name: tuple
1052
-      sha256: "0ea99cd2f9352b2586583ab2ce6489d1f95a5f6de6fb9492faaf97ae2060f0aa"
1108
+      sha256: a97ce2013f240b2f3807bcbaf218765b6f301c3eff91092bcfa23a039e7dd151
1053 1109
       url: "https://pub.dev"
1054 1110
     source: hosted
1055
-    version: "2.0.1"
1111
+    version: "2.0.2"
1056 1112
   typed_data:
1057 1113
     dependency: transitive
1058 1114
     description:
@@ -1133,30 +1189,38 @@ packages:
1133 1189
       url: "https://pub.dev"
1134 1190
     source: hosted
1135 1191
     version: "3.0.6"
1192
+  uuid:
1193
+    dependency: transitive
1194
+    description:
1195
+      name: uuid
1196
+      sha256: "648e103079f7c64a36dc7d39369cabb358d377078a051d6ae2ad3aa539519313"
1197
+      url: "https://pub.dev"
1198
+    source: hosted
1199
+    version: "3.0.7"
1136 1200
   vector_graphics:
1137 1201
     dependency: transitive
1138 1202
     description:
1139 1203
       name: vector_graphics
1140
-      sha256: b96f10cbdfcbd03a65758633a43e7d04574438f059b1043104b5d61b23d38a4f
1204
+      sha256: "670f6e07aca990b4a2bcdc08a784193c4ccdd1932620244c3a86bb72a0eac67f"
1141 1205
       url: "https://pub.dev"
1142 1206
     source: hosted
1143
-    version: "1.1.6"
1207
+    version: "1.1.7"
1144 1208
   vector_graphics_codec:
1145 1209
     dependency: transitive
1146 1210
     description:
1147 1211
       name: vector_graphics_codec
1148
-      sha256: "57a8e6e24662a3bdfe3b3d61257db91768700c0b8f844e235877b56480f31c69"
1212
+      sha256: "7451721781d967db9933b63f5733b1c4533022c0ba373a01bdd79d1a5457f69f"
1149 1213
       url: "https://pub.dev"
1150 1214
     source: hosted
1151
-    version: "1.1.6"
1215
+    version: "1.1.7"
1152 1216
   vector_graphics_compiler:
1153 1217
     dependency: transitive
1154 1218
     description:
1155 1219
       name: vector_graphics_compiler
1156
-      sha256: "7430f5d834d0db4560d7b19863362cd892f1e52b43838553a3c5cdfc9ab28e5b"
1220
+      sha256: "80a13c613c8bde758b1464a1755a7b3a8f2b6cec61fbf0f5a53c94c30f03ba2e"
1157 1221
       url: "https://pub.dev"
1158 1222
     source: hosted
1159
-    version: "1.1.6"
1223
+    version: "1.1.7"
1160 1224
   vector_math:
1161 1225
     dependency: "direct main"
1162 1226
     description:
@@ -1177,10 +1241,18 @@ packages:
1177 1241
     dependency: transitive
1178 1242
     description:
1179 1243
       name: win32
1180
-      sha256: "5a751eddf9db89b3e5f9d50c20ab8612296e4e8db69009788d6c8b060a84191c"
1244
+      sha256: "7dacfda1edcca378031db9905ad7d7bd56b29fd1a90b0908b71a52a12c41e36b"
1245
+      url: "https://pub.dev"
1246
+    source: hosted
1247
+    version: "5.0.3"
1248
+  win32_registry:
1249
+    dependency: transitive
1250
+    description:
1251
+      name: win32_registry
1252
+      sha256: e4506d60b7244251bc59df15656a3093501c37fb5af02105a944d73eb95be4c9
1181 1253
       url: "https://pub.dev"
1182 1254
     source: hosted
1183
-    version: "4.1.4"
1255
+    version: "1.1.1"
1184 1256
   wkt_parser:
1185 1257
     dependency: transitive
1186 1258
     description:

+ 12
- 11
pubspec.yaml Vedi File

@@ -31,7 +31,7 @@ environment:
31 31
 dependencies:
32 32
   flutter:
33 33
     sdk: flutter
34
-  google_fonts: ^4.0.3
34
+  google_fonts: ^4.0.4
35 35
 
36 36
   # The following adds the Cupertino Icons font to your application.
37 37
   # Use with the CupertinoIcons class for iOS style icons.
@@ -43,26 +43,26 @@ dependencies:
43 43
   lottie: ^2.0.0
44 44
   fluttertoast: ^8.1.1
45 45
   #google_maps_flutter: ^2.2.1
46
-  http: ^0.13.5
46
+  http: ^0.13.6
47 47
   intl: ^0.18.0
48 48
   dio: ^5.0.0
49 49
   get_it: ^7.2.0
50 50
   shared_preferences: ^2.0.15
51 51
   # device_information: ^0.0.4
52 52
   device_imei: ^0.0.2
53
-  device_info_plus: ^8.0.0
53
+  device_info_plus: ^9.0.2
54 54
   flutter_udid: ^2.0.1
55 55
   image_picker: ^0.8.6
56
-  image_cropper: ^3.0.1
56
+  image_cropper: ^4.0.1
57 57
   #progress_dialog: ^1.2.4
58 58
   progress_dialog_null_safe: ^1.0.4
59 59
   #mapbox_gl: ^0.16.0
60
-  file_picker: ^5.2.4
60
+  file_picker: ^5.3.2
61 61
   #device_id: ^0.2.0
62
-  flutter_launcher_icons: ^0.11.0
62
+  flutter_launcher_icons: ^0.13.1
63 63
   location: ^4.4.0
64 64
   #latlong: ^0.6.1
65
-  flutter_map: ^3.1.0
65
+  flutter_map: ^4.0.0
66 66
   geolocator: ^9.0.2
67 67
   geocoding: ^2.1.0
68 68
   #geocoder: ^0.2.1
@@ -73,16 +73,16 @@ dependencies:
73 73
   flutter_image: ^4.1.4
74 74
   vector_math: ^2.1.2
75 75
   meta: ^1.8.0
76
-  collection: ^1.17.0
77
-  flutter_map_marker_cluster: ^1.0.1
76
+  collection: ^1.17.1
77
+  flutter_map_marker_cluster: ^1.1.1
78 78
   flutter_polyline_points: ^1.0.0
79 79
   provider: ^6.0.5
80
-  connectivity_plus: ^3.0.3
80
+  connectivity_plus: ^4.0.1
81 81
   internet_connection_checker: ^1.0.0+1
82 82
   #plain_notification_token: ^0.0.4
83 83
   focus_detector: ^2.0.1
84 84
   firebase_core: ^2.6.1
85
-  flutter_local_notifications: ^14.0.0
85
+  flutter_local_notifications: ^14.1.1
86 86
   firebase_messaging: ^14.4.1
87 87
   url_launcher: ^6.1.9
88 88
   flutter_sliding_up_panel: ^2.0.1
@@ -90,6 +90,7 @@ dependencies:
90 90
   flutter_animate: ^4.1.1+1
91 91
   animations: ^2.0.7
92 92
   firebase_crashlytics: ^3.3.2
93
+  app_settings: ^4.2.0
93 94
 
94 95
 dev_dependencies:
95 96
   flutter_test:

BIN
ttwenty.jks Vedi File


+ 3
- 0
windows/flutter/generated_plugin_registrant.cc Vedi File

@@ -7,6 +7,7 @@
7 7
 #include "generated_plugin_registrant.h"
8 8
 
9 9
 #include <connectivity_plus/connectivity_plus_windows_plugin.h>
10
+#include <file_selector_windows/file_selector_windows.h>
10 11
 #include <firebase_core/firebase_core_plugin_c_api.h>
11 12
 #include <geolocator_windows/geolocator_windows.h>
12 13
 #include <url_launcher_windows/url_launcher_windows.h>
@@ -14,6 +15,8 @@
14 15
 void RegisterPlugins(flutter::PluginRegistry* registry) {
15 16
   ConnectivityPlusWindowsPluginRegisterWithRegistrar(
16 17
       registry->GetRegistrarForPlugin("ConnectivityPlusWindowsPlugin"));
18
+  FileSelectorWindowsRegisterWithRegistrar(
19
+      registry->GetRegistrarForPlugin("FileSelectorWindows"));
17 20
   FirebaseCorePluginCApiRegisterWithRegistrar(
18 21
       registry->GetRegistrarForPlugin("FirebaseCorePluginCApi"));
19 22
   GeolocatorWindowsRegisterWithRegistrar(

+ 1
- 0
windows/flutter/generated_plugins.cmake Vedi File

@@ -4,6 +4,7 @@
4 4
 
5 5
 list(APPEND FLUTTER_PLUGIN_LIST
6 6
   connectivity_plus
7
+  file_selector_windows
7 8
   firebase_core
8 9
   geolocator_windows
9 10
   url_launcher_windows

Loading…
Annulla
Salva