dienianindya 1 year ago
parent
commit
d94c6c0f49
60 changed files with 916 additions and 510 deletions
  1. 6
    5
      android/app/build.gradle
  2. 29
    0
      android/app/google-services.json
  3. 1
    1
      android/app/src/debug/AndroidManifest.xml
  4. 3
    6
      android/app/src/main/AndroidManifest.xml
  5. 2
    2
      android/app/src/main/java/com/icp/canvassing/MainActivity.java
  6. BIN
      android/app/src/main/res/appstore.png
  7. BIN
      android/app/src/main/res/ic_launcher-web.png
  8. BIN
      android/app/src/main/res/mipmap-hdpi/ic_launcher.png
  9. BIN
      android/app/src/main/res/mipmap-mdpi/ic_launcher.png
  10. BIN
      android/app/src/main/res/mipmap-xhdpi/ic_launcher.png
  11. BIN
      android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
  12. BIN
      android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
  13. BIN
      android/app/src/main/res/playstore-icon.png
  14. BIN
      android/app/src/main/res/playstore.png
  15. 1
    1
      android/app/src/profile/AndroidManifest.xml
  16. 5
    0
      android/gradle.properties
  17. BIN
      assets/icons/menu/ic_about_10.png
  18. BIN
      assets/icons/menu/ic_about_4.png
  19. BIN
      assets/icons/menu/ic_about_5.png
  20. BIN
      assets/icons/menu/ic_about_6.png
  21. BIN
      assets/icons/menu/ic_about_7.png
  22. BIN
      assets/icons/menu/ic_about_8.png
  23. BIN
      assets/icons/menu/ic_about_9.png
  24. BIN
      assets/icons/menu/ic_absensi_2.png
  25. BIN
      assets/icons/menu/ic_absensi_3.png
  26. BIN
      assets/icons/menu/ic_cuti_3.png
  27. BIN
      assets/icons/menu/ic_cuti_4.png
  28. BIN
      assets/icons/menu/ic_eventcalendar.png
  29. BIN
      assets/icons/menu/ic_eventcalendar_2.png
  30. BIN
      assets/icons/menu/ic_idp_1.png
  31. BIN
      assets/icons/menu/ic_idp_2.png
  32. BIN
      assets/icons/menu/ic_idp_3.png
  33. BIN
      assets/icons/menu/ic_idp_4.png
  34. BIN
      assets/icons/menu/ic_ipp.png
  35. BIN
      assets/icons/menu/ic_ipp_2.png
  36. BIN
      assets/icons/menu/ic_reimburse_2.png
  37. BIN
      assets/icons/menu/ic_reimburse_3.png
  38. BIN
      assets/icons/menu/ic_reimburse_4.png
  39. BIN
      assets/icons/menu/ic_slipgaji_3.png
  40. BIN
      assets/icons/menu/ic_slipgaji_4.png
  41. BIN
      assets/icons/menu/ic_surattugas_3.png
  42. 3
    3
      ios/Runner.xcodeproj/project.pbxproj
  43. 2
    2
      ios/Runner/Info.plist
  44. 3
    3
      ios/firebase_app_id_file.json
  45. 51
    207
      lib/Screens/Home/home_screen.dart
  46. 16
    77
      lib/Screens/Login/login_screen.dart
  47. 178
    0
      lib/Screens/Splash/background.dart
  48. 40
    0
      lib/Screens/Splash/loginstatus_post.dart
  49. 338
    0
      lib/Screens/Splash/splash_screen.dart
  50. 2
    1
      lib/constants.dart
  51. 81
    0
      lib/firebase_options.dart
  52. 4
    140
      lib/main.dart
  53. 3
    3
      macos/Runner.xcodeproj/project.pbxproj
  54. 4
    4
      macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
  55. 2
    2
      macos/Runner/Configs/AppInfo.xcconfig
  56. 34
    0
      macos/Runner/GoogleService-Info.plist
  57. 7
    0
      macos/firebase_app_id_file.json
  58. 76
    52
      pubspec.lock
  59. 2
    1
      pubspec.yaml
  60. 23
    0
      upload_certificate.pem

+ 6
- 5
android/app/build.gradle View File

1
 def localProperties = new Properties()
1
 def localProperties = new Properties()
2
 def localPropertiesFile = rootProject.file('local.properties')
2
 def localPropertiesFile = rootProject.file('local.properties')
3
 if (localPropertiesFile.exists()) {
3
 if (localPropertiesFile.exists()) {
4
-    localPropertiesFile.withReader('UTF-8') { reader ->
5
-        localProperties.load(reader)
4
+    localPropertiesFile.withReader('UTF-8') {
5
+        reader -> localProperties.load(reader)
6
     }
6
     }
7
 }
7
 }
8
 
8
 
9
 def flutterRoot = localProperties.getProperty('flutter.sdk')
9
 def flutterRoot = localProperties.getProperty('flutter.sdk')
10
 if (flutterRoot == null) {
10
 if (flutterRoot == null) {
11
-    throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.")
11
+    //throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.")
12
+    throw FileNotFoundException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.")
12
 }
13
 }
13
 
14
 
14
 def flutterVersionCode = localProperties.getProperty('flutter.versionCode')
15
 def flutterVersionCode = localProperties.getProperty('flutter.versionCode')
39
 
40
 
40
     defaultConfig {
41
     defaultConfig {
41
         // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
42
         // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
42
-        applicationId "com.urp.hris"
43
+        applicationId "com.icp.canvassing"
43
         // You can update the following values to match your application needs.
44
         // You can update the following values to match your application needs.
44
         // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-build-configuration.
45
         // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-build-configuration.
45
         //minSdkVersion flutter.minSdkVersion
46
         //minSdkVersion flutter.minSdkVersion
53
 
54
 
54
     signingConfigs {
55
     signingConfigs {
55
         release {
56
         release {
56
-            storeFile file('D:/Android Studio Projects/ess/ess_keystore.jks')
57
+            //storeFile file('D:/Android Studio Projects/ess/ess_keystore.jks')
57
             storePassword '123123'
58
             storePassword '123123'
58
             keyAlias 'ess_keystore'
59
             keyAlias 'ess_keystore'
59
             keyPassword '123123'
60
             keyPassword '123123'

+ 29
- 0
android/app/google-services.json View File

1
+{
2
+  "project_info": {
3
+    "project_number": "11716618948",
4
+    "project_id": "canvas-56baa",
5
+    "storage_bucket": "canvas-56baa.appspot.com"
6
+  },
7
+  "client": [
8
+    {
9
+      "client_info": {
10
+        "mobilesdk_app_id": "1:11716618948:android:e8a6512d2d905094937791",
11
+        "android_client_info": {
12
+          "package_name": "com.icp.canvassing"
13
+        }
14
+      },
15
+      "oauth_client": [],
16
+      "api_key": [
17
+        {
18
+          "current_key": "AIzaSyAsylxl5a2treqN-GI1lqcx6Ode6-hl8hk"
19
+        }
20
+      ],
21
+      "services": {
22
+        "appinvite_service": {
23
+          "other_platform_oauth_client": []
24
+        }
25
+      }
26
+    }
27
+  ],
28
+  "configuration_version": "1"
29
+}

+ 1
- 1
android/app/src/debug/AndroidManifest.xml View File

1
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
1
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
2
-    package="com.example.hris_selfservice_mobile">
2
+    package="com.icp.canvassing">
3
     <!-- The INTERNET permission is required for development. Specifically,
3
     <!-- The INTERNET permission is required for development. Specifically,
4
          the Flutter tool needs it to communicate with the running application
4
          the Flutter tool needs it to communicate with the running application
5
          to allow setting breakpoints, to provide hot reload, etc.
5
          to allow setting breakpoints, to provide hot reload, etc.

+ 3
- 6
android/app/src/main/AndroidManifest.xml View File

1
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
1
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
2
     xmlns:tools="http://schemas.android.com/tools"
2
     xmlns:tools="http://schemas.android.com/tools"
3
-    package="com.example.hris_selfservice_mobile">
3
+    package="com.icp.canvassing">
4
 
4
 
5
     <uses-permission android:name="android.permission.INTERNET" />
5
     <uses-permission android:name="android.permission.INTERNET" />
6
     <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
6
     <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
7
     <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
7
     <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
8
-   <!-- <uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />-->
9
     <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
8
     <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
10
 
9
 
11
     <application
10
     <application
12
         android:icon="@mipmap/ic_launcher"
11
         android:icon="@mipmap/ic_launcher"
13
-        android:label="Employee Self Service"
12
+        android:label="Canvasing App"
14
         android:usesCleartextTraffic="true"
13
         android:usesCleartextTraffic="true"
15
         tools:targetApi="m">
14
         tools:targetApi="m">
16
 
15
 
55
             android:name="com.google.firebase.messaging.default_notification_channel_id"
54
             android:name="com.google.firebase.messaging.default_notification_channel_id"
56
             android:value="high_importance_channel" />
55
             android:value="high_importance_channel" />
57
     </application>
56
     </application>
58
-</manifest>
59
-
60
-
57
+</manifest>

android/app/src/main/java/com/example/hris_selfservice_mobile/MainActivity.java → android/app/src/main/java/com/icp/canvassing/MainActivity.java View File

1
-package com.example.hris_selfservice_mobile;
1
+package com.icp.canvassing;
2
 
2
 
3
 import io.flutter.embedding.android.FlutterActivity;
3
 import io.flutter.embedding.android.FlutterActivity;
4
 
4
 
5
 public class MainActivity extends FlutterActivity {
5
 public class MainActivity extends FlutterActivity {
6
-}
6
+}

BIN
android/app/src/main/res/appstore.png View File


BIN
android/app/src/main/res/ic_launcher-web.png View File


BIN
android/app/src/main/res/mipmap-hdpi/ic_launcher.png View File


BIN
android/app/src/main/res/mipmap-mdpi/ic_launcher.png View File


BIN
android/app/src/main/res/mipmap-xhdpi/ic_launcher.png View File


BIN
android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png View File


BIN
android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png View File


BIN
android/app/src/main/res/playstore-icon.png View File


BIN
android/app/src/main/res/playstore.png View File


+ 1
- 1
android/app/src/profile/AndroidManifest.xml View File

1
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
1
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
2
-    package="com.example.hris_selfservice_mobile">
2
+    package="com.urp.hris">
3
     <!-- The INTERNET permission is required for development. Specifically,
3
     <!-- The INTERNET permission is required for development. Specifically,
4
          the Flutter tool needs it to communicate with the running application
4
          the Flutter tool needs it to communicate with the running application
5
          to allow setting breakpoints, to provide hot reload, etc.
5
          to allow setting breakpoints, to provide hot reload, etc.

+ 5
- 0
android/gradle.properties View File

2
 
2
 
3
 android.useAndroidX=true
3
 android.useAndroidX=true
4
 android.enableJetifier=true
4
 android.enableJetifier=true
5
+
6
+#MYAPP_RELEASE_STORE_FILE=D:\\Android Studio Projects\\ess\\ess_keystore.jks
7
+#MYAPP_RELEASE_KEY_ALIAS=ess_keystore
8
+#MYAPP_RELEASE_STORE_PASSWORD=123123
9
+#MYAPP_RELEASE_KEY_PASSWORD=123123

BIN
assets/icons/menu/ic_about_10.png View File


BIN
assets/icons/menu/ic_about_4.png View File


BIN
assets/icons/menu/ic_about_5.png View File


BIN
assets/icons/menu/ic_about_6.png View File


BIN
assets/icons/menu/ic_about_7.png View File


BIN
assets/icons/menu/ic_about_8.png View File


BIN
assets/icons/menu/ic_about_9.png View File


BIN
assets/icons/menu/ic_absensi_2.png View File


BIN
assets/icons/menu/ic_absensi_3.png View File


BIN
assets/icons/menu/ic_cuti_3.png View File


BIN
assets/icons/menu/ic_cuti_4.png View File


BIN
assets/icons/menu/ic_eventcalendar.png View File


BIN
assets/icons/menu/ic_eventcalendar_2.png View File


BIN
assets/icons/menu/ic_idp_1.png View File


BIN
assets/icons/menu/ic_idp_2.png View File


BIN
assets/icons/menu/ic_idp_3.png View File


BIN
assets/icons/menu/ic_idp_4.png View File


BIN
assets/icons/menu/ic_ipp.png View File


BIN
assets/icons/menu/ic_ipp_2.png View File


BIN
assets/icons/menu/ic_reimburse_2.png View File


BIN
assets/icons/menu/ic_reimburse_3.png View File


BIN
assets/icons/menu/ic_reimburse_4.png View File


BIN
assets/icons/menu/ic_slipgaji_3.png View File


BIN
assets/icons/menu/ic_slipgaji_4.png View File


BIN
assets/icons/menu/ic_surattugas_3.png View File


+ 3
- 3
ios/Runner.xcodeproj/project.pbxproj View File

294
 					"$(inherited)",
294
 					"$(inherited)",
295
 					"@executable_path/Frameworks",
295
 					"@executable_path/Frameworks",
296
 				);
296
 				);
297
-				PRODUCT_BUNDLE_IDENTIFIER = com.example.hrisSelfserviceMobile;
297
+				PRODUCT_BUNDLE_IDENTIFIER = com.urp.hris;
298
 				PRODUCT_NAME = "$(TARGET_NAME)";
298
 				PRODUCT_NAME = "$(TARGET_NAME)";
299
 				SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
299
 				SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
300
 				SWIFT_VERSION = 5.0;
300
 				SWIFT_VERSION = 5.0;
422
 					"$(inherited)",
422
 					"$(inherited)",
423
 					"@executable_path/Frameworks",
423
 					"@executable_path/Frameworks",
424
 				);
424
 				);
425
-				PRODUCT_BUNDLE_IDENTIFIER = com.example.hrisSelfserviceMobile;
425
+				PRODUCT_BUNDLE_IDENTIFIER = com.urp.hris;
426
 				PRODUCT_NAME = "$(TARGET_NAME)";
426
 				PRODUCT_NAME = "$(TARGET_NAME)";
427
 				SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
427
 				SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
428
 				SWIFT_OPTIMIZATION_LEVEL = "-Onone";
428
 				SWIFT_OPTIMIZATION_LEVEL = "-Onone";
444
 					"$(inherited)",
444
 					"$(inherited)",
445
 					"@executable_path/Frameworks",
445
 					"@executable_path/Frameworks",
446
 				);
446
 				);
447
-				PRODUCT_BUNDLE_IDENTIFIER = com.example.hrisSelfserviceMobile;
447
+				PRODUCT_BUNDLE_IDENTIFIER = com.urp.hris;
448
 				PRODUCT_NAME = "$(TARGET_NAME)";
448
 				PRODUCT_NAME = "$(TARGET_NAME)";
449
 				SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
449
 				SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
450
 				SWIFT_VERSION = 5.0;
450
 				SWIFT_VERSION = 5.0;

+ 2
- 2
ios/Runner/Info.plist View File

5
 	<key>CFBundleDevelopmentRegion</key>
5
 	<key>CFBundleDevelopmentRegion</key>
6
 	<string>$(DEVELOPMENT_LANGUAGE)</string>
6
 	<string>$(DEVELOPMENT_LANGUAGE)</string>
7
 	<key>CFBundleDisplayName</key>
7
 	<key>CFBundleDisplayName</key>
8
-	<string>hris_selfservice_mobile</string>
8
+	<string>employee self service</string>
9
 	<key>CFBundleExecutable</key>
9
 	<key>CFBundleExecutable</key>
10
 	<string>$(EXECUTABLE_NAME)</string>
10
 	<string>$(EXECUTABLE_NAME)</string>
11
 	<key>CFBundleIdentifier</key>
11
 	<key>CFBundleIdentifier</key>
13
 	<key>CFBundleInfoDictionaryVersion</key>
13
 	<key>CFBundleInfoDictionaryVersion</key>
14
 	<string>6.0</string>
14
 	<string>6.0</string>
15
 	<key>CFBundleName</key>
15
 	<key>CFBundleName</key>
16
-	<string>HRIS Self Service</string>
16
+	<string>Employee Self Service</string>
17
 	<key>CFBundlePackageType</key>
17
 	<key>CFBundlePackageType</key>
18
 	<string>APPL</string>
18
 	<string>APPL</string>
19
 	<key>CFBundleShortVersionString</key>
19
 	<key>CFBundleShortVersionString</key>

+ 3
- 3
ios/firebase_app_id_file.json View File

1
 {
1
 {
2
   "file_generated_by": "FlutterFire CLI",
2
   "file_generated_by": "FlutterFire CLI",
3
   "purpose": "FirebaseAppID & ProjectID for this Firebase app in this directory",
3
   "purpose": "FirebaseAppID & ProjectID for this Firebase app in this directory",
4
-  "GOOGLE_APP_ID": "1:372840384875:ios:729b20a1d7ac16b0fd642e",
5
-  "FIREBASE_PROJECT_ID": "gsi---employee-self-service",
6
-  "GCM_SENDER_ID": "372840384875"
4
+  "GOOGLE_APP_ID": "1:11716618948:ios:2cfdbccbd58e6267937791",
5
+  "FIREBASE_PROJECT_ID": "canvas-56baa",
6
+  "GCM_SENDER_ID": "11716618948"
7
 }
7
 }

+ 51
- 207
lib/Screens/Home/home_screen.dart View File

4
 
4
 
5
 import 'package:connectivity_plus/connectivity_plus.dart';
5
 import 'package:connectivity_plus/connectivity_plus.dart';
6
 import 'package:double_back_to_close/double_back_to_close.dart';
6
 import 'package:double_back_to_close/double_back_to_close.dart';
7
-import 'package:employee_selfservice_mobile/Screens/NotificationCenter/NotificationCenter.dart';
8
 import 'package:flutter/cupertino.dart';
7
 import 'package:flutter/cupertino.dart';
9
 import 'package:flutter/material.dart';
8
 import 'package:flutter/material.dart';
10
 import 'package:fluttertoast/fluttertoast.dart';
9
 import 'package:fluttertoast/fluttertoast.dart';
14
 import 'package:employee_selfservice_mobile/Screens/Menu/Absensi/absensi_screen.dart';
13
 import 'package:employee_selfservice_mobile/Screens/Menu/Absensi/absensi_screen.dart';
15
 import 'package:employee_selfservice_mobile/Screens/Menu/AjukanCuti/ajukancuti_screen.dart';
14
 import 'package:employee_selfservice_mobile/Screens/Menu/AjukanCuti/ajukancuti_screen.dart';
16
 import 'package:employee_selfservice_mobile/Screens/Menu/Reimburse/reimburse_screen.dart';
15
 import 'package:employee_selfservice_mobile/Screens/Menu/Reimburse/reimburse_screen.dart';
17
-import 'package:employee_selfservice_mobile/Screens/Menu/SlipGaji/slipgaji_screen.dart';
18
-import 'package:employee_selfservice_mobile/Screens/Menu/SuratTugas/surattugas_screen.dart';
19
 import 'package:employee_selfservice_mobile/Screens/Settings/settings_screen.dart';
16
 import 'package:employee_selfservice_mobile/Screens/Settings/settings_screen.dart';
20
 import 'package:lottie/lottie.dart';
17
 import 'package:lottie/lottie.dart';
21
 import 'package:progress_dialog_null_safe/progress_dialog_null_safe.dart';
18
 import 'package:progress_dialog_null_safe/progress_dialog_null_safe.dart';
51
   @override
48
   @override
52
   initState() {
49
   initState() {
53
     getConnectivity();
50
     getConnectivity();
54
-    getDetail();
55
-    _imageToShow = AssetImage('assets/images/ic_administrator.png');
51
+    /*getDetail();*/
52
+    _imageToShow = AssetImage('assets/images/ic_pp_2.png');
56
     WidgetsBinding.instance.addPostFrameCallback((_) {
53
     WidgetsBinding.instance.addPostFrameCallback((_) {
57
-      getProfileImage();
54
+      //getProfileImage();
55
+      _imageToShow = AssetImage('assets/icons/ic_pp_2.png');
58
     });
56
     });
59
     super.initState();
57
     super.initState();
60
   }
58
   }
77
   }
75
   }
78
 
76
 
79
   //Get Profile image
77
   //Get Profile image
80
-  getProfileImage() async {
78
+  /*getProfileImage() async {
81
     final SharedPreferences prefs = await SharedPreferences.getInstance();
79
     final SharedPreferences prefs = await SharedPreferences.getInstance();
82
     final session = prefs.getString('session');
80
     final session = prefs.getString('session');
83
 
81
 
144
       await loading.hide();
142
       await loading.hide();
145
     });
143
     });
146
     return _imageToShow;
144
     return _imageToShow;
147
-  }
145
+  }*/
148
 
146
 
149
   //GetDetail
147
   //GetDetail
150
   getDetail() async {
148
   getDetail() async {
275
 class _BottomNavBarState extends State<BottomNavBar> {
273
 class _BottomNavBarState extends State<BottomNavBar> {
276
   List<Widget> _widgetOptions = <Widget>[
274
   List<Widget> _widgetOptions = <Widget>[
277
     HomeScreen(),
275
     HomeScreen(),
278
-    NotificationCenter_Screen(),
279
     SettingsScreen(),
276
     SettingsScreen(),
280
   ];
277
   ];
281
 
278
 
320
 
317
 
321
 class _HomeScreenState extends State<HomeScreen> {
318
 class _HomeScreenState extends State<HomeScreen> {
322
   //Get Profile image
319
   //Get Profile image
323
-  getProfileImage() async {
320
+  /*getProfileImage() async {
324
     final SharedPreferences prefs = await SharedPreferences.getInstance();
321
     final SharedPreferences prefs = await SharedPreferences.getInstance();
325
     final session = prefs.getString('session');
322
     final session = prefs.getString('session');
326
 
323
 
363
       }
360
       }
364
     });
361
     });
365
     return _imageToShow;
362
     return _imageToShow;
366
-  }
363
+  }*/
367
 
364
 
368
   @override
365
   @override
369
   Widget build(BuildContext context) {
366
   Widget build(BuildContext context) {
382
         getProfileImage();
379
         getProfileImage();
383
       },*/
380
       },*/
384
       onFocusGained: () {
381
       onFocusGained: () {
385
-        getProfileImage();
382
+        _imageToShow = AssetImage('assets/icons/ic_pp_2.png');
386
       },
383
       },
387
 /*      onForegroundLost: (){
384
 /*      onForegroundLost: (){
388
         getProfileImage();
385
         getProfileImage();
411
                     padding: EdgeInsets.all(20),
408
                     padding: EdgeInsets.all(20),
412
                     child: Column(
409
                     child: Column(
413
                       children: <Widget>[
410
                       children: <Widget>[
414
-                        /* Align(
415
-                          alignment: Alignment.topRight,
416
-                          child: InkWell(
417
-                            child: Container(
418
-                                alignment: Alignment.center,
419
-                                height: 40,
420
-                                width: 40,
421
-                                child: Image.asset('assets/images/ic_settings.png')),
422
-                            onTap: () {
423
-                              Navigator.push(
424
-                                  context,
425
-                                  MaterialPageRoute(
426
-                                      builder: (context) => SettingsScreen()));
427
-                            },
428
-                          ),
429
-                        ),*/
430
                         Container(
411
                         Container(
431
                           child: Stack(
412
                           child: Stack(
432
                             alignment: Alignment.topLeft,
413
                             alignment: Alignment.topLeft,
433
                             children: [
414
                             children: [
434
                               Container(
415
                               Container(
435
                                 margin: EdgeInsets.only(
416
                                 margin: EdgeInsets.only(
436
-                                    top: (((size.width - 20) * 0.33) * 0.5) +
437
-                                        40),
417
+                                    top: (((size.width - 20) * 0.33) * 0.5) + 40),
438
                                 child: Card(
418
                                 child: Card(
439
                                   elevation: 15,
419
                                   elevation: 15,
440
                                   child: Container(
420
                                   child: Container(
446
                                           borderRadius:
426
                                           borderRadius:
447
                                           BorderRadius.all(
427
                                           BorderRadius.all(
448
                                               Radius.circular(10))),
428
                                               Radius.circular(10))),
449
-                                      child: Column(
450
-                                        mainAxisAlignment: MainAxisAlignment
451
-                                            .end,
452
-                                        crossAxisAlignment: CrossAxisAlignment
453
-                                            .center,
429
+                                      child: Column(mainAxisAlignment: MainAxisAlignment.end,
430
+                                        crossAxisAlignment: CrossAxisAlignment.center,
454
                                         children: <Widget>[
431
                                         children: <Widget>[
455
-                                          Text(name,
432
+                                          Text("Ginro",
456
                                             maxLines: 2,
433
                                             maxLines: 2,
457
                                             overflow: TextOverflow.ellipsis,
434
                                             overflow: TextOverflow.ellipsis,
458
                                             textAlign: TextAlign.center,
435
                                             textAlign: TextAlign.center,
461
                                                 color: Colors.black,
438
                                                 color: Colors.black,
462
                                                 fontWeight: FontWeight.bold),
439
                                                 fontWeight: FontWeight.bold),
463
                                           ),
440
                                           ),
464
-                                          Text(position,
441
+                                          Text("General Manager",
465
                                             textAlign: TextAlign.center,
442
                                             textAlign: TextAlign.center,
466
                                             style: GoogleFonts.inter(
443
                                             style: GoogleFonts.inter(
467
                                                 fontSize: size.width * 0.035,
444
                                                 fontSize: size.width * 0.035,
515
                                           Container(
492
                                           Container(
516
                                             width: size.width * 0.18,
493
                                             width: size.width * 0.18,
517
                                             child: Image.asset(
494
                                             child: Image.asset(
518
-                                                "assets/icons/menu/ic_absensi.png",
495
+                                                "assets/icons/menu/ic_absensi_3.png",
519
                                                 fit: BoxFit.contain)
496
                                                 fit: BoxFit.contain)
520
                                           ),
497
                                           ),
521
-                                          Text(
522
-                                            'Attendance',
523
-                                            textAlign: TextAlign.center,
524
-                                            style: GoogleFonts.acme(
525
-                                                fontSize: size.width * 0.045,
526
-                                                color: Colors.black),
527
-                                          ),
498
+                                          Container(
499
+                                            margin: EdgeInsets.only(top: 5),
500
+                                            child: Text(
501
+                                              'Canvasing',
502
+                                              textAlign: TextAlign.center,
503
+                                              style: GoogleFonts.acme(
504
+                                                  fontSize: size.width * 0.045,
505
+                                                  color: Colors.black),
506
+                                            ),
507
+                                          )
528
                                         ],
508
                                         ],
529
                                       ),
509
                                       ),
530
                                     )
510
                                     )
550
                                     Container(
530
                                     Container(
551
                                       width: size.width * 0.18,
531
                                       width: size.width * 0.18,
552
                                       child: Image.asset(
532
                                       child: Image.asset(
553
-                                        "assets/icons/menu/ic_slipgaji_2.png",
533
+                                        "assets/icons/menu/ic_cuti_4.png",
554
                                         fit: BoxFit.contain),
534
                                         fit: BoxFit.contain),
555
                                     ),
535
                                     ),
556
-                                    Text(
557
-                                      'Pay Slip',
558
-                                      textAlign: TextAlign.center,
559
-                                      style: GoogleFonts.acme(
560
-                                          fontSize: size.width * 0.045,
561
-                                          color: Colors.black),
562
-                                    ),
563
-                                  ],
564
-                                ),
565
-                              ),
566
-                              onTap: () {
567
-                                Navigator.push(
568
-                                    context,
569
-                                    MaterialPageRoute(
570
-                                        builder: (context) =>
571
-                                            SlipGajiScreen()));
572
-                              },
573
-                            ),
574
-                            InkWell(
575
-                              child: Container(
576
-                                width: size.width,
577
-                                height: size.height,
578
-                                decoration: BoxDecoration(
579
-                                    color: Color(0xFFD0D0D0),
580
-                                    borderRadius: BorderRadius.circular(5)),
581
-                                child: Column(
582
-                                  crossAxisAlignment: CrossAxisAlignment.center,
583
-                                  mainAxisAlignment: MainAxisAlignment.center,
584
-                                  children: <Widget>[
585
                                     Container(
536
                                     Container(
586
-                                      width: size.width * 0.18,
587
-                                      child: Image.asset(
588
-                                        "assets/icons/menu/ic_cuti_2.png",
589
-                                        fit: BoxFit.contain),
590
-                                    ),
591
-                                    Text(
592
-                                      'Leaves',
593
-                                      textAlign: TextAlign.center,
594
-                                      style: GoogleFonts.acme(
595
-                                          fontSize: size.width * 0.045,
596
-                                          color: Colors.black),
597
-                                    ),
537
+                                      margin: EdgeInsets.only(top: 5),
538
+                                      child: Text(
539
+                                        'Leaves',
540
+                                        textAlign: TextAlign.center,
541
+                                        style: GoogleFonts.acme(
542
+                                            fontSize: size.width * 0.045,
543
+                                            color: Colors.black),
544
+                                      ),
545
+                                    )
598
                                   ],
546
                                   ],
599
                                 ),
547
                                 ),
600
                               ),
548
                               ),
606
                                             AjukanCutiScreen()));
554
                                             AjukanCutiScreen()));
607
                               },
555
                               },
608
                             ),
556
                             ),
609
-                            /*InkWell(
557
+                            InkWell(
610
                               child: Container(
558
                               child: Container(
611
                                 width: size.width,
559
                                 width: size.width,
612
                                 height: size.height,
560
                                 height: size.height,
620
                                     Container(
568
                                     Container(
621
                                       width: size.width * 0.18,
569
                                       width: size.width * 0.18,
622
                                       child: Image.asset(
570
                                       child: Image.asset(
623
-                                        "assets/icons/menu/ic_surattugas_2.png",
571
+                                        "assets/icons/menu/ic_reimburse_4.png",
624
                                         fit: BoxFit.contain,
572
                                         fit: BoxFit.contain,
625
                                       ),
573
                                       ),
626
                                     ),
574
                                     ),
627
-                                    Text(
628
-                                      'Assignment Letter',
629
-                                      textAlign: TextAlign.center,
630
-                                      style: GoogleFonts.acme(
631
-                                          fontSize: size.width * 0.045,
632
-                                          color: Colors.black),
633
-                                    ),
634
-                                  ],
635
-                                ),
636
-                              ),
637
-                              onTap: () {
638
-                                Navigator.push(
639
-                                    context,
640
-                                    MaterialPageRoute(
641
-                                        builder: (context) =>
642
-                                            SuratTugas_Screen()));
643
-                              },
644
-                            ),*/
645
-                            InkWell(
646
-                              child: Container(
647
-                                width: size.width,
648
-                                height: size.height,
649
-                                decoration: BoxDecoration(
650
-                                    color: Color(0xFFD0D0D0),
651
-                                    borderRadius: BorderRadius.circular(5)),
652
-                                child: Column(
653
-                                  crossAxisAlignment: CrossAxisAlignment.center,
654
-                                  mainAxisAlignment: MainAxisAlignment.center,
655
-                                  children: <Widget>[
656
                                     Container(
575
                                     Container(
657
-                                      width: size.width * 0.18,
658
-                                      child: Image.asset(
659
-                                        "assets/icons/menu/ic_reimburse.png",
660
-                                        fit: BoxFit.contain,
576
+                                      margin: EdgeInsets.only(top: 5),
577
+                                      child: Text(
578
+                                        'Reimburse',
579
+                                        textAlign: TextAlign.center,
580
+                                        style: GoogleFonts.acme(
581
+                                            fontSize: size.width * 0.045,
582
+                                            color: Colors.black),
661
                                       ),
583
                                       ),
662
-                                    ),
663
-                                    Text(
664
-                                      'Reimburse',
665
-                                      textAlign: TextAlign.center,
666
-                                      style: GoogleFonts.acme(
667
-                                          fontSize: size.width * 0.045,
668
-                                          color: Colors.black),
669
-                                    ),
584
+                                    )
670
                                   ],
585
                                   ],
671
                                 ),
586
                                 ),
672
                               ),
587
                               ),
692
                                     Container(
607
                                     Container(
693
                                       width: size.width * 0.18,
608
                                       width: size.width * 0.18,
694
                                       child: Image.asset(
609
                                       child: Image.asset(
695
-                                        "assets/icons/menu/ic_about_3.png",
610
+                                        "assets/icons/menu/ic_about_9.png",
696
                                         fit: BoxFit.contain,
611
                                         fit: BoxFit.contain,
697
                                       ),
612
                                       ),
698
                                     ),
613
                                     ),
699
-                                    Text(
700
-                                      'About',
701
-                                      textAlign: TextAlign.center,
702
-                                      style: GoogleFonts.acme(
703
-                                          fontSize: size.width * 0.045,
704
-                                          color: Colors.black),
705
-                                    ),
706
-                                  ],
707
-                                ),
708
-                              ),
709
-                              onTap: () {
710
-                                Navigator.push(
711
-                                    context,
712
-                                    MaterialPageRoute(
713
-                                        builder: (context) => AboutScreen()));
714
-                              },
715
-                            ),
716
-                            /*InkWell(
717
-                              child: Container(
718
-                                decoration: BoxDecoration(
719
-                                    color: Color(0xFFD0D0D0),
720
-                                    borderRadius: BorderRadius.circular(5)),
721
-                                child: Column(
722
-                                  crossAxisAlignment: CrossAxisAlignment.center,
723
-                                  mainAxisAlignment: MainAxisAlignment.center,
724
-                                  children: <Widget>[
725
-                                    Container(
726
-                                      width: 70,
727
-                                      height: 70,
728
-                                      child: Image.asset(
729
-                                          "assets/icons/menu/ic_reimburse.png",
730
-                                          fit: BoxFit.fill,
731
-                                          alignment: Alignment.center),
732
-                                    ),
733
-                                    Container(
734
-                                      margin: EdgeInsets.only(top: 10),
735
-                                      padding: EdgeInsets.all(5),
736
-                                      child: Text(
737
-                                        'Reimburse',
738
-                                        textAlign: TextAlign.center,
739
-                                        style: GoogleFonts.acme(
740
-                                            fontSize: 18, color: Colors.black),
741
-                                      ),
742
-                                    ),
743
-                                  ],
744
-                                ),
745
-                              ),
746
-                              onTap: () {
747
-                                Navigator.push(
748
-                                    context,
749
-                                    MaterialPageRoute(
750
-                                        builder: (context) => ReimburseScreen()));
751
-                              },
752
-                            ),
753
-                            InkWell(
754
-                              child: Container(
755
-                                decoration: BoxDecoration(
756
-                                    color: Color(0xFFD0D0D0),
757
-                                    borderRadius: BorderRadius.circular(5)),
758
-                                child: Column(
759
-                                  crossAxisAlignment: CrossAxisAlignment.center,
760
-                                  mainAxisAlignment: MainAxisAlignment.center,
761
-                                  children: <Widget>[
762
-                                    Container(
763
-                                      width: 70,
764
-                                      height: 70,
765
-                                      child: Image.asset(
766
-                                          "assets/icons/menu/ic_about_3.png",
767
-                                          fit: BoxFit.fill,
768
-                                          alignment: Alignment.center),
769
-                                    ),
770
                                     Container(
614
                                     Container(
771
-                                      margin: EdgeInsets.only(top: 10),
772
-                                      padding: EdgeInsets.all(5),
615
+                                      margin: EdgeInsets.only(top: 5),
773
                                       child: Text(
616
                                       child: Text(
774
                                         'About',
617
                                         'About',
775
                                         textAlign: TextAlign.center,
618
                                         textAlign: TextAlign.center,
776
                                         style: GoogleFonts.acme(
619
                                         style: GoogleFonts.acme(
777
-                                            fontSize: 18, color: Colors.black),
620
+                                            fontSize: size.width * 0.045,
621
+                                            color: Colors.black),
778
                                       ),
622
                                       ),
779
-                                    ),
623
+                                    )
780
                                   ],
624
                                   ],
781
                                 ),
625
                                 ),
782
                               ),
626
                               ),
786
                                     MaterialPageRoute(
630
                                     MaterialPageRoute(
787
                                         builder: (context) => AboutScreen()));
631
                                         builder: (context) => AboutScreen()));
788
                               },
632
                               },
789
-                            ),*/
633
+                            ),
790
                           ],
634
                           ],
791
                         )
635
                         )
792
                       ],
636
                       ],

+ 16
- 77
lib/Screens/Login/login_screen.dart View File

3
 import 'package:firebase_messaging/firebase_messaging.dart';
3
 import 'package:firebase_messaging/firebase_messaging.dart';
4
 import 'package:flutter/material.dart';
4
 import 'package:flutter/material.dart';
5
 import 'package:flutter/services.dart';
5
 import 'package:flutter/services.dart';
6
-import 'package:flutter_udid/flutter_udid.dart';
7
 import 'package:fluttertoast/fluttertoast.dart';
6
 import 'package:fluttertoast/fluttertoast.dart';
8
 import 'package:google_fonts/google_fonts.dart';
7
 import 'package:google_fonts/google_fonts.dart';
9
 import 'package:employee_selfservice_mobile/Screens/ForgotPassword/forgotPassword_screen.dart';
8
 import 'package:employee_selfservice_mobile/Screens/ForgotPassword/forgotPassword_screen.dart';
10
 import 'package:employee_selfservice_mobile/Screens/Login/background.dart';
9
 import 'package:employee_selfservice_mobile/Screens/Login/background.dart';
11
-import 'package:employee_selfservice_mobile/Screens/Login/login_post.dart';
12
-import 'package:employee_selfservice_mobile/Screens/Splash/splash_screen.dart';
13
 import 'package:progress_dialog_null_safe/progress_dialog_null_safe.dart';
10
 import 'package:progress_dialog_null_safe/progress_dialog_null_safe.dart';
14
 import 'package:shared_preferences/shared_preferences.dart';
11
 import 'package:shared_preferences/shared_preferences.dart';
15
 import '../Home/home_screen.dart';
12
 import '../Home/home_screen.dart';
16
 import 'inputWidget.dart';
13
 import 'inputWidget.dart';
17
 import 'dart:developer' as logDev;
14
 import 'dart:developer' as logDev;
18
-//import 'package:plain_notification_token/plain_notification_token.dart';
15
+
16
+import 'login_post.dart';
17
+
19
 
18
 
20
 class LoginView extends StatefulWidget {
19
 class LoginView extends StatefulWidget {
21
   @override
20
   @override
44
 }
43
 }
45
 
44
 
46
 class _LoginScreenState extends State<LoginScreen> {
45
 class _LoginScreenState extends State<LoginScreen> {
47
-  late LoginPostResult loginPostResult;
46
+  //late LoginPostResult loginPostResult;
48
   String version = "1.0.0";
47
   String version = "1.0.0";
49
   String notif_token = "";
48
   String notif_token = "";
50
 
49
 
77
 
76
 
78
     return SingleChildScrollView(
77
     return SingleChildScrollView(
79
       reverse: true,
78
       reverse: true,
80
-        padding: EdgeInsets.only(bottom: MediaQuery.of(context).viewInsets.bottom),
81
-        child: Column(
79
+      padding: EdgeInsets.only(bottom: MediaQuery.of(context).viewInsets.bottom),
80
+      child: Column(
82
         children: <Widget>[
81
         children: <Widget>[
83
           Padding(
82
           Padding(
84
             padding:
83
             padding:
85
-                EdgeInsets.only(top: MediaQuery.of(context).size.height / 2.45),
84
+            EdgeInsets.only(top: MediaQuery.of(context).size.height / 2.45),
86
           ),
85
           ),
87
           Column(
86
           Column(
88
             children: <Widget>[
87
             children: <Widget>[
113
                     alignment: Alignment.bottomRight,
112
                     alignment: Alignment.bottomRight,
114
                     children: <Widget>[
113
                     children: <Widget>[
115
                       InputWidgetEmail(20.0, 20.0),
114
                       InputWidgetEmail(20.0, 20.0),
116
-                      Padding(
117
-                        padding: EdgeInsets.only(right: 50),
115
+                      Padding(padding: EdgeInsets.only(right: 50),
118
                       ),
116
                       ),
119
                     ],
117
                     ],
120
                   ),
118
                   ),
140
                           children: <Widget>[
138
                           children: <Widget>[
141
                             Expanded(
139
                             Expanded(
142
                                 child: Padding(
140
                                 child: Padding(
143
-                              padding: EdgeInsets.only(top: 0),
144
-                            )),
141
+                                  padding: EdgeInsets.only(top: 0),
142
+                                )),
145
                             InkWell(
143
                             InkWell(
146
                               child: Container(
144
                               child: Container(
147
                                 padding: EdgeInsets.all(10),
145
                                 padding: EdgeInsets.all(10),
159
                                 ),
157
                                 ),
160
                               ),
158
                               ),
161
                               onTap: () async {
159
                               onTap: () async {
162
-                                /*String imei;
163
-                                try {
164
-                                  imei = await FlutterUdid.udid;
165
-                                } on PlatformException {
166
-                                  imei = 'Failed to get UDID.';
167
-                                }
168
-                                logDev.log(imei, name: "IMEI");*/
169
                                 if (!validateForm(context)) {
160
                                 if (!validateForm(context)) {
170
                                   return;
161
                                   return;
171
                                 } else {
162
                                 } else {
172
-                                  await loading.show();
173
-
174
-                                  final notif_token = await FirebaseMessaging.instance.getToken();
175
-                                  logDev.log(notif_token.toString(), name: "NOTIFICATION TOKEN");
176
-
177
-                                  LoginPostResult.connectToAPI(
178
-                                          emailController.text.toString(),
179
-                                          passwordController.text.toString(),
180
-                                          notif_token!,
181
-                                          version,
182
-                                          platform(),)
183
-                                      .then((valueResult) async {
184
-                                    Map<String, dynamic> object = json.decode(valueResult);
185
-                                    if (object.containsKey("result").toString() == "true") {
186
-                                      String status = object['result']['status'].toString();
187
-                                      if (status == "success") {
188
-                                        Fluttertoast.showToast(
189
-                                            msg: "Login Success",
190
-                                            toastLength: Toast.LENGTH_SHORT,
191
-                                            gravity: ToastGravity.CENTER,
192
-                                            timeInSecForIosWeb: 1,
193
-                                            textColor: Colors.white,
194
-                                            fontSize: 16.0);
195
-
196
-                                        var prefs = await SharedPreferences.getInstance();
197
-                                        await prefs.setString('version', version);
198
-                                        await prefs.setString('device', object['result']['device'].toString());
199
-                                        await prefs.setString('session', object['result']['hash'].toString());
200
-                                        await prefs.setString('name', object['result']['name'].toString());
201
-                                        await prefs.setString('notif_token', notif_token);
202
-
203
-                                        emailController.clear();
204
-                                        passwordController.clear();
205
-
206
-                                        await loading.hide();
207
-                                        Navigator.pushReplacement(context, MaterialPageRoute(builder: (context) => HomeView()));
208
-                                      } else if (status == "failed") {
209
-                                        String message = object['result']['message'].toString();
210
-                                        Fluttertoast.showToast(
211
-                                            msg: message,
212
-                                            toastLength: Toast.LENGTH_SHORT,
213
-                                            gravity: ToastGravity.CENTER,
214
-                                            timeInSecForIosWeb: 1,
215
-                                            textColor: Colors.white,
216
-                                            fontSize: 16.0);
217
-                                        await loading.hide();
218
-                                      }
219
-                                    } else {
220
-                                      await loading.hide();
221
-                                      alertDialogFailedResponse(context);
222
-                                    }
223
-                                  });
163
+                                  Navigator.pushReplacement(context, MaterialPageRoute(builder: (context) => HomeView()));
224
                                 }
164
                                 }
225
                               },
165
                               },
226
                             )
166
                             )
227
                           ],
167
                           ],
228
                         ),
168
                         ),
229
                       ),
169
                       ),
230
-                      /*Padding(
170
+                      Padding(
231
                           padding: EdgeInsets.only(bottom: MediaQuery.of(context).viewInsets.bottom)
171
                           padding: EdgeInsets.only(bottom: MediaQuery.of(context).viewInsets.bottom)
232
-                      )*/
172
+                      )
233
                     ],
173
                     ],
234
                   ),
174
                   ),
235
                 ],
175
                 ],
239
               ),
179
               ),
240
               InkWell(
180
               InkWell(
241
                   child:
181
                   child:
242
-                      roundedRectButton("Forgot Password?", Gradients1, false),
182
+                  roundedRectButton("Forgot Password?", Gradients1, false),
243
                   onTap: () {
183
                   onTap: () {
244
                     Navigator.push(
184
                     Navigator.push(
245
                         context,
185
                         context,
254
   }
194
   }
255
 }
195
 }
256
 
196
 
257
-Widget roundedRectButton(
258
-    String title, List<Color> gradient, bool isEndIconVisible) {
197
+Widget roundedRectButton(String title, List<Color> gradient, bool isEndIconVisible) {
259
   return Builder(builder: (BuildContext mContext) {
198
   return Builder(builder: (BuildContext mContext) {
260
     return Align(
199
     return Align(
261
       alignment: Alignment.centerLeft,
200
       alignment: Alignment.centerLeft,
352
     onPressed: () {
291
     onPressed: () {
353
       Navigator.of(context, rootNavigator: true).pop();
292
       Navigator.of(context, rootNavigator: true).pop();
354
       Navigator.pushReplacement(context, MaterialPageRoute(
293
       Navigator.pushReplacement(context, MaterialPageRoute(
355
-          builder: (context) => SplashScreen()));
294
+          builder: (context) => LoginScreen()));
356
     },
295
     },
357
   );
296
   );
358
 
297
 

+ 178
- 0
lib/Screens/Splash/background.dart View File

1
+import 'package:flutter/material.dart';
2
+
3
+class Background extends StatelessWidget {
4
+  const Background({Key? key}) : super(key: key);
5
+
6
+  @override
7
+  Widget build(BuildContext context) {
8
+    return Scaffold(
9
+      resizeToAvoidBottomInset: false,
10
+      backgroundColor: Colors.white,
11
+      body: Column(
12
+        children: <Widget>[
13
+          new Stack(
14
+            alignment: Alignment.bottomCenter,
15
+            children: <Widget>[
16
+              WavyHeader()
17
+            ],
18
+          ),
19
+          Expanded(
20
+            child: Container(),
21
+          ),
22
+          Stack(
23
+            alignment: Alignment.bottomLeft,
24
+            children: <Widget>[
25
+              WavyFooter(),
26
+              CirclePink(),
27
+              CircleYellow(),
28
+            ],
29
+          )
30
+        ],
31
+      ),
32
+    );
33
+  }
34
+}
35
+
36
+const List<Color> orangeGradients = [
37
+  /*Color(0xFFFF9844),
38
+  Color(0xFFFE8853),
39
+  Color(0xFFFD7267),*/
40
+  Color(0xFFD21404),
41
+  Color(0xFFFD7267)
42
+];
43
+
44
+const List<Color> aquaGradients = [
45
+  Color(0xFF8EF7DA),
46
+  Color(0xFF5AEAF1),
47
+  Colors.blueAccent,
48
+];
49
+
50
+class WavyHeader extends StatelessWidget {
51
+  @override
52
+  Widget build(BuildContext context) {
53
+    return ClipPath(
54
+      clipper: TopWaveClipper(),
55
+      child: Container(
56
+        decoration: BoxDecoration(
57
+          gradient: LinearGradient(
58
+              colors: orangeGradients,
59
+              begin: Alignment.topLeft,
60
+              end: Alignment.center),
61
+        ),
62
+        height: MediaQuery.of(context).size.height / 2.5,
63
+      ),
64
+    );
65
+  }
66
+}
67
+
68
+class WavyFooter extends StatelessWidget {
69
+  @override
70
+  Widget build(BuildContext context) {
71
+    return ClipPath(
72
+      clipper: FooterWaveClipper(),
73
+      child: Container(
74
+        decoration: BoxDecoration(
75
+          gradient: LinearGradient(
76
+              colors: aquaGradients,
77
+              begin: Alignment.center,
78
+              end: Alignment.bottomRight),
79
+        ),
80
+        height: MediaQuery.of(context).size.height / 3,
81
+      ),
82
+    );
83
+  }
84
+}
85
+
86
+class CirclePink extends StatelessWidget {
87
+  @override
88
+  Widget build(BuildContext context) {
89
+    return Transform.translate(
90
+      offset: Offset(-70.0, 90.0),
91
+      child: Material(
92
+        color: Color(0xFFFF9844),
93
+        child: Padding(padding: EdgeInsets.all(120)),
94
+        shape: CircleBorder(side: BorderSide(color: Colors.white, width: 15.0)),
95
+      ),
96
+    );
97
+  }
98
+}
99
+
100
+class CircleYellow extends StatelessWidget {
101
+  @override
102
+  Widget build(BuildContext context) {
103
+    return Transform.translate(
104
+      offset: Offset(0.0, 210.0),
105
+      child: Material(
106
+        color: Colors.yellow,
107
+        child: Padding(padding: EdgeInsets.all(140)),
108
+        shape: CircleBorder(side: BorderSide(color: Colors.white, width: 15.0)),
109
+      ),
110
+    );
111
+  }
112
+}
113
+
114
+class TopWaveClipper extends CustomClipper<Path> {
115
+  @override
116
+  Path getClip(Size size) {
117
+    // This is where we decide what part of our image is going to be visible.
118
+    var path = Path();
119
+    path.lineTo(0.0, size.height);
120
+
121
+    var firstControlPoint = new Offset(size.width / 7, size.height - 30);
122
+    var firstEndPoint = new Offset(size.width / 6, size.height / 1.5);
123
+
124
+    path.quadraticBezierTo(firstControlPoint.dx, firstControlPoint.dy,
125
+        firstEndPoint.dx, firstEndPoint.dy);
126
+
127
+    var secondControlPoint = Offset(size.width / 5, size.height / 4);
128
+    var secondEndPoint = Offset(size.width / 1.5, size.height / 5);
129
+    path.quadraticBezierTo(secondControlPoint.dx, secondControlPoint.dy,
130
+        secondEndPoint.dx, secondEndPoint.dy);
131
+
132
+    var thirdControlPoint =
133
+        Offset(size.width - (size.width / 9), size.height / 6);
134
+    var thirdEndPoint = Offset(size.width, 0.0);
135
+    path.quadraticBezierTo(thirdControlPoint.dx, thirdControlPoint.dy,
136
+        thirdEndPoint.dx, thirdEndPoint.dy);
137
+
138
+    ///move from bottom right to top
139
+    path.lineTo(size.width, 0.0);
140
+
141
+    ///finally close the path by reaching start point from top right corner
142
+    path.close();
143
+    return path;
144
+  }
145
+
146
+  @override
147
+  bool shouldReclip(CustomClipper<Path> oldClipper) => false;
148
+}
149
+
150
+class FooterWaveClipper extends CustomClipper<Path> {
151
+  @override
152
+  Path getClip(Size size) {
153
+    var path = Path();
154
+    path.moveTo(size.width, 0.0);
155
+    path.lineTo(size.width, size.height);
156
+    path.lineTo(0.0, size.height);
157
+    path.lineTo(0.0, size.height - 60);
158
+    var secondControlPoint = Offset(size.width - (size.width / 6), size.height);
159
+    var secondEndPoint = Offset(size.width, 0.0);
160
+    path.quadraticBezierTo(secondControlPoint.dx, secondControlPoint.dy,
161
+        secondEndPoint.dx, secondEndPoint.dy);
162
+
163
+    return path;
164
+  }
165
+
166
+  @override
167
+  bool shouldReclip(CustomClipper<Path> oldClipper) => false;
168
+}
169
+
170
+class YellowCircleClipper extends CustomClipper<Rect> {
171
+  @override
172
+  Rect getClip(Size size) {
173
+    throw UnimplementedError();
174
+  }
175
+
176
+  @override
177
+  bool shouldReclip(CustomClipper<Rect> oldClipper) => false;
178
+}

+ 40
- 0
lib/Screens/Splash/loginstatus_post.dart View File

1
+import 'dart:convert';
2
+import 'dart:core';
3
+import 'package:http/http.dart' as http;
4
+import 'package:employee_selfservice_mobile/constants.dart';
5
+import 'dart:developer' as logDev;
6
+
7
+class LoginStatus_Post {
8
+  late String version;
9
+  late String device;
10
+  late String session;
11
+  late String notif_token;
12
+
13
+  LoginStatus_Post({
14
+    required this.version,
15
+    required this.device,
16
+    required this.session,
17
+    required this.notif_token});
18
+
19
+  static Future<String> connectToAPI(String version, String device, String session, String notif_token) async {
20
+    String URL = baseURL + "/api/v1/login_status";
21
+    print(URL);
22
+
23
+    var sendData = await http.post(Uri.parse(URL),
24
+        body: jsonEncode({
25
+          "data": [
26
+            {
27
+              "version": version,
28
+              "device": device,
29
+              "session": session,
30
+              "notif_token": notif_token
31
+            }
32
+          ]
33
+        }),
34
+        headers: {"Content-Type": "application/json", "Api-key": apiKey});
35
+
36
+
37
+    logDev.log(sendData.body, name: "Login Status");
38
+    return sendData.body;
39
+  }
40
+}

+ 338
- 0
lib/Screens/Splash/splash_screen.dart View File

1
+import 'dart:async';
2
+import 'dart:convert';
3
+import 'dart:io';
4
+import 'package:connectivity_plus/connectivity_plus.dart';
5
+import 'package:flutter/cupertino.dart';
6
+import 'package:flutter/material.dart';
7
+import 'package:flutter/services.dart';
8
+import 'package:fluttertoast/fluttertoast.dart';
9
+import 'package:google_fonts/google_fonts.dart';
10
+import 'package:employee_selfservice_mobile/Screens/Login/login_screen.dart';
11
+import 'package:employee_selfservice_mobile/Screens/Splash/loginstatus_post.dart';
12
+import 'package:employee_selfservice_mobile/constants.dart';
13
+import 'package:internet_connection_checker/internet_connection_checker.dart';
14
+import 'package:lottie/lottie.dart';
15
+import 'package:shared_preferences/shared_preferences.dart';
16
+import '../Home/home_screen.dart';
17
+import '../Splash/background.dart';
18
+import 'package:url_launcher/url_launcher.dart';
19
+import 'dart:developer' as logDev;
20
+
21
+class Splash extends StatefulWidget {
22
+  const Splash({Key? key}) : super(key: key);
23
+
24
+  @override
25
+  _SplashState createState() => _SplashState();
26
+}
27
+
28
+class _SplashState extends State<Splash> {
29
+  late StreamSubscription subscription;
30
+  bool isDeviceConnected = false;
31
+  bool isAlertSet = false;
32
+
33
+  @override
34
+  void initState() {
35
+    //getConnectivity();
36
+    //Timer(Duration(seconds: 10), () => loginStatus(context));
37
+    Timer(Duration(seconds: 10), () => Navigator.pushReplacement(context, MaterialPageRoute(builder: (context) => LoginView())));
38
+    super.initState();
39
+  }
40
+
41
+  /*getConnectivity() =>
42
+      subscription = Connectivity().onConnectivityChanged.listen(
43
+            (ConnectivityResult result) async {
44
+          isDeviceConnected = await InternetConnectionChecker().hasConnection;
45
+          if (!isDeviceConnected && isAlertSet == false) {
46
+            showConnectivityDialogBox();
47
+            setState(() => isAlertSet = true);
48
+          }
49
+        },
50
+      );*/
51
+
52
+  @override
53
+  Widget build(BuildContext context) {
54
+    return Scaffold(
55
+        resizeToAvoidBottomInset: false,
56
+        body: Stack(
57
+          children: <Widget>[
58
+            Background(),
59
+            SplashScreen(),
60
+          ],
61
+        ));
62
+  }
63
+
64
+/*showConnectivityDialogBox() =>
65
+      showCupertinoDialog<String>(
66
+        context: context,
67
+        builder: (BuildContext context) =>
68
+            CupertinoAlertDialog(
69
+              title: const Text('No Connection'),
70
+              content: const Text('Please check your internet connectivity'),
71
+              actions: <Widget>[
72
+                Column(
73
+                  children: [
74
+                    SizedBox(
75
+                      width: 250,
76
+                      height: 250,
77
+                      child: LottieBuilder.asset(
78
+                        //'assets/animation/animation_no_internet.json',
79
+                          'assets/animation/animation_no_internet_3.json',
80
+                          repeat: true),
81
+                    ),
82
+                  ],
83
+                ),
84
+                TextButton(
85
+                  onPressed: () async {
86
+                    Navigator.pop(context, 'Cancel');
87
+                    setState(() => isAlertSet = false);
88
+                    isDeviceConnected =
89
+                    await InternetConnectionChecker().hasConnection;
90
+                    if (!isDeviceConnected && isAlertSet == false) {
91
+                      showConnectivityDialogBox();
92
+                      setState(() => isAlertSet = true);
93
+                    }
94
+                  },
95
+                  child: const Text('Retry'),
96
+                ),
97
+              ],
98
+            ),
99
+      );*/
100
+}
101
+
102
+class SplashScreen extends StatelessWidget {
103
+  const SplashScreen({Key? key}) : super(key: key);
104
+
105
+  @override
106
+  Widget build(BuildContext context) {
107
+    var size = MediaQuery.of(context).size;
108
+
109
+    return Scaffold(
110
+        body: Container(
111
+          width: double.infinity,
112
+          height: double.infinity,
113
+          decoration: BoxDecoration(
114
+              gradient: LinearGradient(
115
+                  begin: Alignment.topRight,
116
+                  end: Alignment.bottomRight,
117
+                  colors: [
118
+                    Color(0xFF4858A7),
119
+                    Color(0xFF4858A7),
120
+                    Color(0xFF6474C6),
121
+                    //Color(0xFF8C99DD),
122
+                    //Color(0xFFFFFFFF)
123
+                  ])),
124
+          child: Center(
125
+            child: Column(
126
+              mainAxisAlignment: MainAxisAlignment.center,
127
+              crossAxisAlignment: CrossAxisAlignment.center,
128
+              children: [
129
+                Container(
130
+                  /*decoration: BoxDecoration(
131
+                shape: BoxShape.circle,
132
+                color: Colors.white
133
+              ),*/
134
+                  child: SizedBox(
135
+                      width: size.width * 0.55,
136
+                      //height: 250,
137
+                      child: Image.asset('assets/animation/iconapp2.gif')
138
+                    /*LottieBuilder.asset('assets/animation/animation_4.json',
139
+                    repeat: true, ),*/
140
+                  ),
141
+                ),
142
+                /* Text(appName,
143
+                style: GoogleFonts.carterOne(fontSize: 25, color: Colors.white))*/
144
+              ],
145
+            ),
146
+          ),
147
+        ));
148
+  }
149
+}
150
+
151
+Future<void> loginStatus(BuildContext context) async {
152
+  final SharedPreferences prefs = await SharedPreferences.getInstance();
153
+  String? version = prefs.getString('version');
154
+  String? device = prefs.getString('device');
155
+  String? session = prefs.getString('session');
156
+  String? notif_token = prefs.getString('notif_token');
157
+
158
+  if (session == null) {
159
+    version = "1.0.0";
160
+    session = "";
161
+    notif_token = "";
162
+
163
+    if (Platform.isAndroid){
164
+      device = "android";
165
+    } else if (Platform.isIOS){
166
+      device = "ios";
167
+    }
168
+
169
+  }
170
+
171
+  //logDev.log(session, name: "SESSIONNYA");
172
+
173
+  LoginStatus_Post.connectToAPI(version!, device!, session, notif_token!).then((valueResult) async {
174
+    Map<String, dynamic> object = json.decode(valueResult);
175
+    if (object.containsKey("result").toString() == "true") {
176
+      String status = object['result']['status'].toString();
177
+      if (status == "success") {
178
+        Fluttertoast.showToast(
179
+            msg: "You are already logged in",
180
+            toastLength: Toast.LENGTH_SHORT,
181
+            gravity: ToastGravity.CENTER,
182
+            timeInSecForIosWeb: 1,
183
+            textColor: Colors.white,
184
+            fontSize: 16.0);
185
+        Navigator.pushReplacement(
186
+            context, MaterialPageRoute(builder: (context) => HomeView()));
187
+      } else if (status == "failed") {
188
+        String message = object['result']['message'].toString();
189
+        if (message == "Not Logged In") {
190
+          Fluttertoast.showToast(
191
+              msg: message,
192
+              toastLength: Toast.LENGTH_SHORT,
193
+              gravity: ToastGravity.CENTER,
194
+              timeInSecForIosWeb: 1,
195
+              textColor: Colors.white,
196
+              fontSize: 16.0);
197
+          Navigator.pushReplacement(
198
+              context, MaterialPageRoute(builder: (context) => LoginView()));
199
+        } else {
200
+          String title = object['result']['title'].toString();
201
+          String action = object['result']['action'].toString();
202
+          String block = object['result']['block'].toString();
203
+          if (block == "false") {
204
+            Widget okButton = TextButton(
205
+              child: Text(action),
206
+              onPressed: () async {
207
+                Uri url = Uri.parse(Uri.encodeFull("https://play.google.com/store/apps"));
208
+                //final Uri uri = Uri(scheme: "https", host: "play.google.com");
209
+                if(!await launchUrl(url, mode: LaunchMode.externalApplication)) {
210
+                  throw "Can not launch url";
211
+                }
212
+              },
213
+            );
214
+
215
+            Widget noButton = TextButton(
216
+              child: Text("Later"),
217
+              onPressed: () {
218
+                if (session == ""){
219
+                  Navigator.pushReplacement(context, MaterialPageRoute(builder: (context) => LoginView()));
220
+                } else {
221
+                  Navigator.pushReplacement(context, MaterialPageRoute(builder: (context) => HomeView()));
222
+                }
223
+              },
224
+            );
225
+
226
+            // set up the AlertDialog
227
+            AlertDialog alert = AlertDialog(
228
+              title: Text(appName),
229
+              content: Text(title + "\n" + message),
230
+              actions: [noButton, okButton],
231
+
232
+            );
233
+
234
+            // show the dialog
235
+            showDialog(
236
+              context: context,
237
+              barrierDismissible: false,
238
+              builder: (BuildContext context) {
239
+                return alert;
240
+              },
241
+            );
242
+          } else if (block == "true") {
243
+            Widget okButton = TextButton(
244
+              child: Text(action),
245
+              onPressed: () async {
246
+                if (action == "update") {
247
+                  _launchURL(Uri.parse("https://play.google.com/store/apps"));
248
+                  SystemChannels.platform.invokeMethod('SystemNavigator.pop');
249
+                  Uri url = Uri.parse(Uri.encodeFull("https://play.google.com/store/apps"));
250
+                  //final Uri uri = Uri(scheme: "https",  host: "play.google.com");
251
+                  if(!await launchUrl(url, mode: LaunchMode.externalApplication)) {
252
+                    throw "Can not launch url";
253
+                  }
254
+                } else if (action == "close") {
255
+                  SystemChannels.platform.invokeMethod('SystemNavigator.pop');
256
+                }
257
+              },
258
+            );
259
+
260
+            // set up the AlertDialog
261
+            AlertDialog alert = AlertDialog(
262
+              title: Text(appName),
263
+              content: Text(title + "\n" + message),
264
+              actions: [okButton],
265
+            );
266
+
267
+            // show the dialog
268
+            showDialog(
269
+              context: context,
270
+              barrierDismissible: false,
271
+              builder: (BuildContext context) {
272
+                return alert;
273
+              },
274
+            );
275
+          }
276
+        }
277
+      }
278
+    } else {
279
+      alertDialogFailedResponse(context);
280
+      Fluttertoast.showToast(
281
+          msg: "Server Response Error",
282
+          toastLength: Toast.LENGTH_SHORT,
283
+          gravity: ToastGravity.CENTER,
284
+          timeInSecForIosWeb: 1,
285
+          textColor: Colors.white,
286
+          fontSize: 16.0);
287
+    }
288
+  });
289
+}
290
+
291
+_launchURL(Uri url) async {
292
+  if (await canLaunchUrl(url)) {
293
+    await launchUrl(url);
294
+  } else {
295
+    throw 'Could not launch $url';
296
+  }
297
+}
298
+
299
+alertDialogFailedResponse(BuildContext context){
300
+  Widget okButton = TextButton(
301
+    child: Text("Refresh"),
302
+    onPressed: () {
303
+      Navigator.of(context, rootNavigator: true).pop();
304
+      Navigator.pushReplacement(context, MaterialPageRoute(
305
+          builder: (context) => SplashScreen()));
306
+    },
307
+  );
308
+
309
+  Widget noButton = TextButton(
310
+    child: Text("Back"),
311
+    onPressed: () {
312
+      Navigator.of(context, rootNavigator: true).pop();
313
+      Navigator.pop(context);
314
+
315
+    },
316
+  );
317
+
318
+  // set up the AlertDialog
319
+  AlertDialog alert = AlertDialog(
320
+    title: Text(appName),
321
+    content: Text("Server Response Error"),
322
+    actions: [
323
+      noButton,
324
+      okButton,
325
+    ],
326
+  );
327
+
328
+  // show the dialog
329
+  showDialog(
330
+    context: context,
331
+    barrierDismissible: false,
332
+    builder: (BuildContext context) {
333
+      return alert;
334
+    },
335
+  );
336
+}
337
+
338
+

+ 2
- 1
lib/constants.dart View File

8
 String appName = "Employee Self Service";
8
 String appName = "Employee Self Service";
9
 //String baseURL = "http://10.209.8.49:8090";
9
 //String baseURL = "http://10.209.8.49:8090";
10
 //String baseURL = "https://bisops.globalservice.co.id";
10
 //String baseURL = "https://bisops.globalservice.co.id";
11
-String baseURL = "https://urp.myapps.id";
11
+//String baseURL = "https://urp.myapps.id";
12
+String baseURL = "http://209.97.161.28:8069";
12
 //String apiKey = "admin";
13
 //String apiKey = "admin";
13
 //String apiKey = "G514p1k3y";
14
 //String apiKey = "G514p1k3y";
14
 String apiKey = "4pik3y";
15
 String apiKey = "4pik3y";

+ 81
- 0
lib/firebase_options.dart View File

1
+// File generated by FlutterFire CLI.
2
+// ignore_for_file: lines_longer_than_80_chars, avoid_classes_with_only_static_members
3
+import 'package:firebase_core/firebase_core.dart' show FirebaseOptions;
4
+import 'package:flutter/foundation.dart'
5
+    show defaultTargetPlatform, kIsWeb, TargetPlatform;
6
+
7
+/// Default [FirebaseOptions] for use with your Firebase apps.
8
+///
9
+/// Example:
10
+/// ```dart
11
+/// import 'firebase_options.dart';
12
+/// // ...
13
+/// await Firebase.initializeApp(
14
+///   options: DefaultFirebaseOptions.currentPlatform,
15
+/// );
16
+/// ```
17
+class DefaultFirebaseOptions {
18
+  static FirebaseOptions get currentPlatform {
19
+    if (kIsWeb) {
20
+      return web;
21
+    }
22
+    switch (defaultTargetPlatform) {
23
+      case TargetPlatform.android:
24
+        return android;
25
+      case TargetPlatform.iOS:
26
+        return ios;
27
+      case TargetPlatform.macOS:
28
+        return macos;
29
+      case TargetPlatform.windows:
30
+        throw UnsupportedError(
31
+          'DefaultFirebaseOptions have not been configured for windows - '
32
+          'you can reconfigure this by running the FlutterFire CLI again.',
33
+        );
34
+      case TargetPlatform.linux:
35
+        throw UnsupportedError(
36
+          'DefaultFirebaseOptions have not been configured for linux - '
37
+          'you can reconfigure this by running the FlutterFire CLI again.',
38
+        );
39
+      default:
40
+        throw UnsupportedError(
41
+          'DefaultFirebaseOptions are not supported for this platform.',
42
+        );
43
+    }
44
+  }
45
+
46
+  static const FirebaseOptions web = FirebaseOptions(
47
+    apiKey: 'AIzaSyBNRdnOpCYHm70Qc0Jo4sEH8lEpqhfVm2I',
48
+    appId: '1:11716618948:web:19cebf44e0d875f0937791',
49
+    messagingSenderId: '11716618948',
50
+    projectId: 'canvas-56baa',
51
+    authDomain: 'canvas-56baa.firebaseapp.com',
52
+    storageBucket: 'canvas-56baa.appspot.com',
53
+    measurementId: 'G-F5J2T5S5VC',
54
+  );
55
+
56
+  static const FirebaseOptions android = FirebaseOptions(
57
+    apiKey: 'AIzaSyAsylxl5a2treqN-GI1lqcx6Ode6-hl8hk',
58
+    appId: '1:11716618948:android:e8a6512d2d905094937791',
59
+    messagingSenderId: '11716618948',
60
+    projectId: 'canvas-56baa',
61
+    storageBucket: 'canvas-56baa.appspot.com',
62
+  );
63
+
64
+  static const FirebaseOptions ios = FirebaseOptions(
65
+    apiKey: 'AIzaSyBqWHTEHPlp6FFcTGQXkwuMsOcEopWG3F8',
66
+    appId: '1:11716618948:ios:2cfdbccbd58e6267937791',
67
+    messagingSenderId: '11716618948',
68
+    projectId: 'canvas-56baa',
69
+    storageBucket: 'canvas-56baa.appspot.com',
70
+    iosBundleId: 'com.urp.hris',
71
+  );
72
+
73
+  static const FirebaseOptions macos = FirebaseOptions(
74
+    apiKey: 'AIzaSyBqWHTEHPlp6FFcTGQXkwuMsOcEopWG3F8',
75
+    appId: '1:11716618948:ios:2cfdbccbd58e6267937791',
76
+    messagingSenderId: '11716618948',
77
+    projectId: 'canvas-56baa',
78
+    storageBucket: 'canvas-56baa.appspot.com',
79
+    iosBundleId: 'com.urp.hris',
80
+  );
81
+}

+ 4
- 140
lib/main.dart View File

1
 import 'dart:ui';
1
 import 'dart:ui';
2
+import 'package:employee_selfservice_mobile/Screens/Login/login_screen.dart';
2
 import 'package:firebase_core/firebase_core.dart';
3
 import 'package:firebase_core/firebase_core.dart';
3
 import 'package:firebase_messaging/firebase_messaging.dart';
4
 import 'package:firebase_messaging/firebase_messaging.dart';
4
 import 'package:flutter/material.dart';
5
 import 'package:flutter/material.dart';
5
 import 'package:flutter_local_notifications/flutter_local_notifications.dart';
6
 import 'package:flutter_local_notifications/flutter_local_notifications.dart';
6
-import 'package:employee_selfservice_mobile/NotificationService/local_notification_service.dart';
7
-import 'package:employee_selfservice_mobile/Screens/Splash/splash_screen.dart';
8
 import 'Screens/Settings/settings_screen.dart';
7
 import 'Screens/Settings/settings_screen.dart';
8
+import 'Screens/Splash/splash_screen.dart';
9
 import 'constants.dart';
9
 import 'constants.dart';
10
 import 'dart:developer' as logDev;
10
 import 'dart:developer' as logDev;
11
 import 'package:firebase_crashlytics/firebase_crashlytics.dart';
11
 import 'package:firebase_crashlytics/firebase_crashlytics.dart';
12
 
12
 
13
 import 'firebase_options.dart';
13
 import 'firebase_options.dart';
14
 
14
 
15
-const AndroidNotificationChannel channel = AndroidNotificationChannel(
16
-    'high_importance_channel', // id
17
-    'High Importance Notifications', // title
18
-    description: 'This channel is used for important notifications.', // description
19
-    importance: Importance.high,
20
-    playSound: true);
21
-
22
-final FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin = FlutterLocalNotificationsPlugin();
23
-
24
 void main() async{
15
 void main() async{
25
   WidgetsFlutterBinding.ensureInitialized();
16
   WidgetsFlutterBinding.ensureInitialized();
26
-  // if (Firebase.apps.length){
27
-    await Firebase.initializeApp(
28
-      name: "employee-self-service-8280b", options: DefaultFirebaseOptions.currentPlatform
29
-    );
30
-  // }
31
-
32
-  //You can automatically catch all errors that are thrown within the Flutter framework by overriding
33
-  FlutterError.onError = (errorDetails) {
34
-    FirebaseCrashlytics.instance.recordFlutterFatalError(errorDetails);
35
-  };
36
-
37
-  // Pass all uncaught asynchronous errors that aren't handled by the Flutter framework to Crashlytics
38
-  PlatformDispatcher.instance.onError = (error, stack) {
39
-    FirebaseCrashlytics.instance.recordError(error, stack, fatal: true);
40
-    return true;
41
-  };
42
-
43
-  //Force Crash - Crashlytics
44
-  //FirebaseCrashlytics.instance.crash();
45
-
46
-  //LocalNotificationService.initialize();
47
-  FirebaseMessaging.onBackgroundMessage(_firebaseMessagingBackgroundHandler);
48
-
49
-  await flutterLocalNotificationsPlugin.resolvePlatformSpecificImplementation<AndroidFlutterLocalNotificationsPlugin>()?.createNotificationChannel(channel);
50
-
51
-  LocalNotificationService.initialize();
52
-
53
-  FirebaseMessaging.onMessage.listen((RemoteMessage message) async {
54
-    LocalNotificationService.initialize();
55
-    Map<String, dynamic> data = message.data;
56
-    logDev.log(data.toString(), name: "NOTIF Messaging");
57
-
58
-    String body = data['body'].toString();
59
-    logDev.log(body, name: "NOTIF Body");
60
-
61
-    print('Got a message whilst in the foreground!');
62
-    print('Message data: ${message.data}');
63
-
64
-    if (message.notification != null) {
65
-      print('Message also contained a notification: ${message.notification}');
66
-    }
67
-
68
-    logDev.log(message.data.toString(), name: "on message listen - DATANYA APA?");
69
-    logDev.log(message.notification!.title.toString(), name: "on message listen - ISI NOTIFNYA APA?");
70
-  });
71
-
72
-  await FirebaseMessaging.instance.setForegroundNotificationPresentationOptions(
73
-    alert: true,
74
-    badge: true,
75
-    sound: true,
76
-  );
77
 
17
 
78
   runApp(MyApp());
18
   runApp(MyApp());
79
 }
19
 }
86
 }
26
 }
87
 
27
 
88
 class _MyAppState extends State<MyApp> {
28
 class _MyAppState extends State<MyApp> {
89
-  void initState(){
29
+  /*void initState(){
90
     super.initState();
30
     super.initState();
91
-
92
-    // 1. This method call when app in terminated state and you get a notification
93
-    // when you click on notification app open from terminated state and you can get notification data in this method
94
-    FirebaseMessaging.instance.getInitialMessage().then((message) {
95
-        print("FirebaseMessaging.instance.getInitialMessage");
96
-        if (message != null) {
97
-          logDev.log("New Notification", name: "NEW NOTIF");
98
-          // if (message.data['_id'] != null) {
99
-          //   Navigator.of(context).push(
100
-          //     MaterialPageRoute(
101
-          //       builder: (context) => DemoScreen(
102
-          //         id: message.data['_id'],
103
-          //       ),
104
-          //     ),
105
-          //   );
106
-          // }
107
-        }
108
-      },
109
-    );
110
-
111
-    // 2. This method only call when App in forground it mean app must be opened
112
-    FirebaseMessaging.onMessage.listen((RemoteMessage message) {
113
-      RemoteNotification? notification = message.notification!;
114
-      //AndroidNotification? android = message.notification?.android;
115
-      if (notification != null) {
116
-        flutterLocalNotificationsPlugin.show(
117
-            notification.hashCode,
118
-            notification.title,
119
-            notification.body,
120
-            NotificationDetails(
121
-              android: AndroidNotificationDetails(
122
-                channel.id,
123
-                channel.name,
124
-                channelDescription: channel.description,
125
-                color: Colors.blue,
126
-                playSound: true,
127
-                icon: '@mipmap/ic_launcher',
128
-              ),
129
-            ));
130
-      }
131
-      logDev.log(message.data.toString(), name: "onMessage listen - DATANYA APA?");
132
-      logDev.log(message.notification!.title.toString(), name: "onMessage listen - ISI NOTIFNYA APA?");
133
-    });
134
-
135
-    // 3. This method only call when App in background and not terminated(not closed)
136
-    FirebaseMessaging.onMessageOpenedApp.listen((RemoteMessage message)  {
137
-      print('A new onMessageOpenedApp event was published!');
138
-      RemoteNotification? notification = message.notification;
139
-      //AndroidNotification? android = message.notification?.android;
140
-      if (notification != null) {
141
-        showDialog(
142
-            context: context,
143
-            builder: (_) {
144
-              return Scaffold(
145
-                body: Builder(builder: (context) => Center(
146
-                  child: ElevatedButton(
147
-                    onPressed: () {
148
-                      Navigator.push(context, MaterialPageRoute(
149
-                          builder: (context) => SettingsScreen()));
150
-                    },
151
-                    child: Text("Click"),
152
-                  ),
153
-                )),
154
-              );
155
-            });
156
-      }
157
-      logDev.log(message.data.toString(), name: "Opened APP - DATANYA APA?");
158
-      logDev.log(message.notification!.title.toString(), name: "Opened APP - ISI NOTIFNYA APA?");
159
-    });
160
-  }
31
+  }*/
161
 
32
 
162
   @override
33
   @override
163
   Widget build(BuildContext context) {
34
   Widget build(BuildContext context) {
173
   }
44
   }
174
 }
45
 }
175
 
46
 
176
-Future<void> _firebaseMessagingBackgroundHandler(RemoteMessage message) async {
177
-  logDev.log(message.data.toString(), name: "BACKGROUND HANDLER - DATANYA APA?");
178
-  logDev.log(message.notification!.title.toString(), name: "BACKGROUND HANDLER - ISI NOTIFNYA APA?");
179
-}
180
-/*void sendLogMessage(String message) {
181
-  FirebaseCrashlytics.instance.log(message);
182
-}*/

+ 3
- 3
macos/Runner.xcodeproj/project.pbxproj View File

54
 /* Begin PBXFileReference section */
54
 /* Begin PBXFileReference section */
55
 		333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = "<group>"; };
55
 		333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = "<group>"; };
56
 		335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = "<group>"; };
56
 		335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = "<group>"; };
57
-		33CC10ED2044A3C60003C045 /* hris_selfservice_mobile.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "hris_selfservice_mobile.app"; sourceTree = BUILT_PRODUCTS_DIR; };
57
+		33CC10ED2044A3C60003C045 /* employee_self_service.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "employee_self_service.app"; sourceTree = BUILT_PRODUCTS_DIR; };
58
 		33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
58
 		33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
59
 		33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = "<group>"; };
59
 		33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = "<group>"; };
60
 		33CC10F52044A3C60003C045 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = "<group>"; };
60
 		33CC10F52044A3C60003C045 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = "<group>"; };
105
 		33CC10EE2044A3C60003C045 /* Products */ = {
105
 		33CC10EE2044A3C60003C045 /* Products */ = {
106
 			isa = PBXGroup;
106
 			isa = PBXGroup;
107
 			children = (
107
 			children = (
108
-				33CC10ED2044A3C60003C045 /* hris_selfservice_mobile.app */,
108
+				33CC10ED2044A3C60003C045 /* employee_self_service.app */,
109
 			);
109
 			);
110
 			name = Products;
110
 			name = Products;
111
 			sourceTree = "<group>";
111
 			sourceTree = "<group>";
172
 			);
172
 			);
173
 			name = Runner;
173
 			name = Runner;
174
 			productName = Runner;
174
 			productName = Runner;
175
-			productReference = 33CC10ED2044A3C60003C045 /* hris_selfservice_mobile.app */;
175
+			productReference = 33CC10ED2044A3C60003C045 /* employee_self_service.app */;
176
 			productType = "com.apple.product-type.application";
176
 			productType = "com.apple.product-type.application";
177
 		};
177
 		};
178
 /* End PBXNativeTarget section */
178
 /* End PBXNativeTarget section */

+ 4
- 4
macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme View File

15
             <BuildableReference
15
             <BuildableReference
16
                BuildableIdentifier = "primary"
16
                BuildableIdentifier = "primary"
17
                BlueprintIdentifier = "33CC10EC2044A3C60003C045"
17
                BlueprintIdentifier = "33CC10EC2044A3C60003C045"
18
-               BuildableName = "hris_selfservice_mobile.app"
18
+               BuildableName = "employee_self_service.app"
19
                BlueprintName = "Runner"
19
                BlueprintName = "Runner"
20
                ReferencedContainer = "container:Runner.xcodeproj">
20
                ReferencedContainer = "container:Runner.xcodeproj">
21
             </BuildableReference>
21
             </BuildableReference>
31
          <BuildableReference
31
          <BuildableReference
32
             BuildableIdentifier = "primary"
32
             BuildableIdentifier = "primary"
33
             BlueprintIdentifier = "33CC10EC2044A3C60003C045"
33
             BlueprintIdentifier = "33CC10EC2044A3C60003C045"
34
-            BuildableName = "hris_selfservice_mobile.app"
34
+            BuildableName = "employee_self_service.app"
35
             BlueprintName = "Runner"
35
             BlueprintName = "Runner"
36
             ReferencedContainer = "container:Runner.xcodeproj">
36
             ReferencedContainer = "container:Runner.xcodeproj">
37
          </BuildableReference>
37
          </BuildableReference>
54
          <BuildableReference
54
          <BuildableReference
55
             BuildableIdentifier = "primary"
55
             BuildableIdentifier = "primary"
56
             BlueprintIdentifier = "33CC10EC2044A3C60003C045"
56
             BlueprintIdentifier = "33CC10EC2044A3C60003C045"
57
-            BuildableName = "hris_selfservice_mobile.app"
57
+            BuildableName = "employee_self_service_mobile.app"
58
             BlueprintName = "Runner"
58
             BlueprintName = "Runner"
59
             ReferencedContainer = "container:Runner.xcodeproj">
59
             ReferencedContainer = "container:Runner.xcodeproj">
60
          </BuildableReference>
60
          </BuildableReference>
71
          <BuildableReference
71
          <BuildableReference
72
             BuildableIdentifier = "primary"
72
             BuildableIdentifier = "primary"
73
             BlueprintIdentifier = "33CC10EC2044A3C60003C045"
73
             BlueprintIdentifier = "33CC10EC2044A3C60003C045"
74
-            BuildableName = "hris_selfservice_mobile.app"
74
+            BuildableName = "employee_self_service.app"
75
             BlueprintName = "Runner"
75
             BlueprintName = "Runner"
76
             ReferencedContainer = "container:Runner.xcodeproj">
76
             ReferencedContainer = "container:Runner.xcodeproj">
77
          </BuildableReference>
77
          </BuildableReference>

+ 2
- 2
macos/Runner/Configs/AppInfo.xcconfig View File

5
 // 'flutter create' template.
5
 // 'flutter create' template.
6
 
6
 
7
 // The application's name. By default this is also the title of the Flutter window.
7
 // The application's name. By default this is also the title of the Flutter window.
8
-PRODUCT_NAME = hris_selfservice_mobile
8
+PRODUCT_NAME = employee_self_service
9
 
9
 
10
 // The application's bundle identifier
10
 // The application's bundle identifier
11
-PRODUCT_BUNDLE_IDENTIFIER = com.example.hrisSelfserviceMobile
11
+PRODUCT_BUNDLE_IDENTIFIER = com.urp.hris
12
 
12
 
13
 // The copyright displayed in application information
13
 // The copyright displayed in application information
14
 PRODUCT_COPYRIGHT = Copyright © 2022 com.example. All rights reserved.
14
 PRODUCT_COPYRIGHT = Copyright © 2022 com.example. All rights reserved.

+ 34
- 0
macos/Runner/GoogleService-Info.plist View File

1
+<?xml version="1.0" encoding="UTF-8"?>
2
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3
+<plist version="1.0">
4
+<dict>
5
+	<key>CLIENT_ID</key>
6
+	<string>476641837995-stu3jdmp8vk9ovgps0l5fuhamj8v0kms.apps.googleusercontent.com</string>
7
+	<key>REVERSED_CLIENT_ID</key>
8
+	<string>com.googleusercontent.apps.476641837995-stu3jdmp8vk9ovgps0l5fuhamj8v0kms</string>
9
+	<key>API_KEY</key>
10
+	<string>AIzaSyDtzT93pKa1UvHhlNlkmt_Kpvfjq_QVO5g</string>
11
+	<key>GCM_SENDER_ID</key>
12
+	<string>476641837995</string>
13
+	<key>PLIST_VERSION</key>
14
+	<string>1</string>
15
+	<key>BUNDLE_ID</key>
16
+	<string>com.urp.ess</string>
17
+	<key>PROJECT_ID</key>
18
+	<string>employee-self-service-8280b</string>
19
+	<key>STORAGE_BUCKET</key>
20
+	<string>employee-self-service-8280b.appspot.com</string>
21
+	<key>IS_ADS_ENABLED</key>
22
+	<false></false>
23
+	<key>IS_ANALYTICS_ENABLED</key>
24
+	<false></false>
25
+	<key>IS_APPINVITE_ENABLED</key>
26
+	<true></true>
27
+	<key>IS_GCM_ENABLED</key>
28
+	<true></true>
29
+	<key>IS_SIGNIN_ENABLED</key>
30
+	<true></true>
31
+	<key>GOOGLE_APP_ID</key>
32
+	<string>1:476641837995:ios:6f6cfeb3604f74d10e08ee</string>
33
+</dict>
34
+</plist>

+ 7
- 0
macos/firebase_app_id_file.json View File

1
+{
2
+  "file_generated_by": "FlutterFire CLI",
3
+  "purpose": "FirebaseAppID & ProjectID for this Firebase app in this directory",
4
+  "GOOGLE_APP_ID": "1:11716618948:ios:2cfdbccbd58e6267937791",
5
+  "FIREBASE_PROJECT_ID": "canvas-56baa",
6
+  "GCM_SENDER_ID": "11716618948"
7
+}

+ 76
- 52
pubspec.lock View File

5
     dependency: transitive
5
     dependency: transitive
6
     description:
6
     description:
7
       name: _flutterfire_internals
7
       name: _flutterfire_internals
8
-      sha256: "1a5e13736d59235ce0139621b4bbe29bc89839e202409081bc667eb3cd20674c"
8
+      sha256: d84d98f1992976775f83083523a34c5d22fea191eec3abb2bd09537fb623c2e0
9
       url: "https://pub.dev"
9
       url: "https://pub.dev"
10
     source: hosted
10
     source: hosted
11
-    version: "1.3.5"
11
+    version: "1.3.7"
12
   animated_splash_screen:
12
   animated_splash_screen:
13
     dependency: "direct main"
13
     dependency: "direct main"
14
     description:
14
     description:
37
     dependency: "direct main"
37
     dependency: "direct main"
38
     description:
38
     description:
39
       name: app_settings
39
       name: app_settings
40
-      sha256: "67ca58aba6ec311d89597c2716d2e37da54b8c7cef28b7749e6551c57f88c1f4"
40
+      sha256: "09bc7fe0313a507087bec1a3baf555f0576e816a760cbb31813a88890a09d9e5"
41
       url: "https://pub.dev"
41
       url: "https://pub.dev"
42
     source: hosted
42
     source: hosted
43
-    version: "5.0.0"
43
+    version: "5.1.1"
44
   archive:
44
   archive:
45
     dependency: transitive
45
     dependency: transitive
46
     description:
46
     description:
47
       name: archive
47
       name: archive
48
-      sha256: e0902a06f0e00414e4e3438a084580161279f137aeb862274710f29ec10cf01e
48
+      sha256: "7e0d52067d05f2e0324268097ba723b71cb41ac8a6a2b24d1edf9c536b987b03"
49
       url: "https://pub.dev"
49
       url: "https://pub.dev"
50
     source: hosted
50
     source: hosted
51
-    version: "3.3.9"
51
+    version: "3.4.6"
52
   args:
52
   args:
53
     dependency: transitive
53
     dependency: transitive
54
     description:
54
     description:
197
     dependency: "direct main"
197
     dependency: "direct main"
198
     description:
198
     description:
199
       name: dio
199
       name: dio
200
-      sha256: ce75a1b40947fea0a0e16ce73337122a86762e38b982e1ccb909daa3b9bc4197
200
+      sha256: "417e2a6f9d83ab396ec38ff4ea5da6c254da71e4db765ad737a42af6930140b7"
201
       url: "https://pub.dev"
201
       url: "https://pub.dev"
202
     source: hosted
202
     source: hosted
203
-    version: "5.3.2"
203
+    version: "5.3.3"
204
   double_back_to_close:
204
   double_back_to_close:
205
     dependency: "direct main"
205
     dependency: "direct main"
206
     description:
206
     description:
253
     dependency: transitive
253
     dependency: transitive
254
     description:
254
     description:
255
       name: file_selector_macos
255
       name: file_selector_macos
256
-      sha256: "182c3f8350cee659f7b115e956047ee3dc672a96665883a545e81581b9a82c72"
256
+      sha256: b15c3da8bd4908b9918111fa486903f5808e388b8d1c559949f584725a6594d6
257
       url: "https://pub.dev"
257
       url: "https://pub.dev"
258
     source: hosted
258
     source: hosted
259
-    version: "0.9.3+2"
259
+    version: "0.9.3+3"
260
   file_selector_platform_interface:
260
   file_selector_platform_interface:
261
     dependency: transitive
261
     dependency: transitive
262
     description:
262
     description:
277
     dependency: "direct main"
277
     dependency: "direct main"
278
     description:
278
     description:
279
       name: firebase_core
279
       name: firebase_core
280
-      sha256: c78132175edda4bc532a71e01a32964e4b4fcf53de7853a422d96dac3725f389
280
+      sha256: "95580fa07c8ca3072a2bb1fecd792616a33f8683477d25b7d29d3a6a399e6ece"
281
       url: "https://pub.dev"
281
       url: "https://pub.dev"
282
     source: hosted
282
     source: hosted
283
-    version: "2.15.1"
283
+    version: "2.17.0"
284
   firebase_core_platform_interface:
284
   firebase_core_platform_interface:
285
     dependency: transitive
285
     dependency: transitive
286
     description:
286
     description:
293
     dependency: transitive
293
     dependency: transitive
294
     description:
294
     description:
295
       name: firebase_core_web
295
       name: firebase_core_web
296
-      sha256: "4cf4d2161530332ddc3c562f19823fb897ff37a9a774090d28df99f47370e973"
296
+      sha256: e8c408923cd3a25bd342c576a114f2126769cd1a57106a4edeaa67ea4a84e962
297
       url: "https://pub.dev"
297
       url: "https://pub.dev"
298
     source: hosted
298
     source: hosted
299
-    version: "2.7.0"
299
+    version: "2.8.0"
300
   firebase_crashlytics:
300
   firebase_crashlytics:
301
     dependency: "direct main"
301
     dependency: "direct main"
302
     description:
302
     description:
303
       name: firebase_crashlytics
303
       name: firebase_crashlytics
304
-      sha256: fd9e1a1cb7cce3f9dd2358d8363d235f25f056981e23a333db1e57eca693913f
304
+      sha256: "833cf891d10e5e819a2034048ff7e8882bcc0b51055c0e17f5fe3f3c3c177a9d"
305
       url: "https://pub.dev"
305
       url: "https://pub.dev"
306
     source: hosted
306
     source: hosted
307
-    version: "3.3.5"
307
+    version: "3.3.7"
308
   firebase_crashlytics_platform_interface:
308
   firebase_crashlytics_platform_interface:
309
     dependency: transitive
309
     dependency: transitive
310
     description:
310
     description:
311
       name: firebase_crashlytics_platform_interface
311
       name: firebase_crashlytics_platform_interface
312
-      sha256: "0d19ef23cf7a917a357d2eb1807338ec536ec3232e729ebd769f5bb2aba9e085"
312
+      sha256: dfdf1172f35fc0b0132bc5ec815aed52c07643ee56732e6807ca7dc12f7fce86
313
       url: "https://pub.dev"
313
       url: "https://pub.dev"
314
     source: hosted
314
     source: hosted
315
-    version: "3.6.5"
315
+    version: "3.6.7"
316
   firebase_messaging:
316
   firebase_messaging:
317
     dependency: "direct main"
317
     dependency: "direct main"
318
     description:
318
     description:
319
       name: firebase_messaging
319
       name: firebase_messaging
320
-      sha256: "6c1a2a047d6f165b7c5f947467ac5138731a2af82c7af1c12d691dbb834f6b73"
320
+      sha256: "67f9d7c87457e71ad78ee81e332f232b8a24f7d5e338f8c958fa7d6e9e0e3636"
321
       url: "https://pub.dev"
321
       url: "https://pub.dev"
322
     source: hosted
322
     source: hosted
323
-    version: "14.6.7"
323
+    version: "14.6.9"
324
   firebase_messaging_platform_interface:
324
   firebase_messaging_platform_interface:
325
     dependency: transitive
325
     dependency: transitive
326
     description:
326
     description:
327
       name: firebase_messaging_platform_interface
327
       name: firebase_messaging_platform_interface
328
-      sha256: bcba58d28f8cda607a323240c6d314c2c62b62ebfbb0f2d704ebefef07b52b5f
328
+      sha256: "8c7ced3201886ad7ba37f344c1468ccfc08abb3023922e0e5a016eaf38abb96c"
329
       url: "https://pub.dev"
329
       url: "https://pub.dev"
330
     source: hosted
330
     source: hosted
331
-    version: "4.5.6"
331
+    version: "4.5.8"
332
   firebase_messaging_web:
332
   firebase_messaging_web:
333
     dependency: transitive
333
     dependency: transitive
334
     description:
334
     description:
335
       name: firebase_messaging_web
335
       name: firebase_messaging_web
336
-      sha256: "962d09ec9dfa486cbbc218258ad41e8ec7997a2eba46919049496e1cafd960c5"
336
+      sha256: b601322bdb44e2fefe4cc7b85ef0dbb7a2479d4a7653a51340821cf8d60696b5
337
       url: "https://pub.dev"
337
       url: "https://pub.dev"
338
     source: hosted
338
     source: hosted
339
-    version: "3.5.6"
339
+    version: "3.5.8"
340
   flutter:
340
   flutter:
341
     dependency: "direct main"
341
     dependency: "direct main"
342
     description: flutter
342
     description: flutter
378
     dependency: "direct main"
378
     dependency: "direct main"
379
     description:
379
     description:
380
       name: flutter_local_notifications
380
       name: flutter_local_notifications
381
-      sha256: "3002092e5b8ce2f86c3361422e52e6db6776c23ee21e0b2f71b892bf4259ef04"
381
+      sha256: "501ed9d54f1c8c0535b7991bade36f9e7e3b45a2346401f03775c1ec7a3c06ae"
382
       url: "https://pub.dev"
382
       url: "https://pub.dev"
383
     source: hosted
383
     source: hosted
384
-    version: "15.1.1"
384
+    version: "15.1.2"
385
   flutter_local_notifications_linux:
385
   flutter_local_notifications_linux:
386
     dependency: transitive
386
     dependency: transitive
387
     description:
387
     description:
500
     dependency: "direct main"
500
     dependency: "direct main"
501
     description:
501
     description:
502
       name: geocoding
502
       name: geocoding
503
-      sha256: b34c0501bbbaf3190b85bef3078b27cf66c28a8915c6d3af50d67f356aa7da31
503
+      sha256: e1dc0ac56666d9ed1d5a9ae5543ce9eb5986db6209cc7600103487d09192059c
504
       url: "https://pub.dev"
504
       url: "https://pub.dev"
505
     source: hosted
505
     source: hosted
506
-    version: "2.1.0"
506
+    version: "2.1.1"
507
   geocoding_android:
507
   geocoding_android:
508
     dependency: transitive
508
     dependency: transitive
509
     description:
509
     description:
532
     dependency: "direct main"
532
     dependency: "direct main"
533
     description:
533
     description:
534
       name: geolocator
534
       name: geolocator
535
-      sha256: "9f1c9a70dd25fc9d9574ff17ba714cf3bc7894258efd7d1ce0debfafe2f8e1d8"
535
+      sha256: e946395fc608842bb2f6c914807e9183f86f3cb787f6b8f832753e5251036f02
536
       url: "https://pub.dev"
536
       url: "https://pub.dev"
537
     source: hosted
537
     source: hosted
538
-    version: "10.0.1"
538
+    version: "10.1.0"
539
   geolocator_android:
539
   geolocator_android:
540
     dependency: transitive
540
     dependency: transitive
541
     description:
541
     description:
542
       name: geolocator_android
542
       name: geolocator_android
543
-      sha256: "55c4a81ea15b664a2fdbfd39ba37f2e9c31e1b57237bbeb8deeeaea9979bc97c"
543
+      sha256: "93906636752ea4d4e778afa981fdfe7409f545b3147046300df194330044d349"
544
       url: "https://pub.dev"
544
       url: "https://pub.dev"
545
     source: hosted
545
     source: hosted
546
-    version: "4.2.3"
546
+    version: "4.3.1"
547
   geolocator_apple:
547
   geolocator_apple:
548
     dependency: transitive
548
     dependency: transitive
549
     description:
549
     description:
550
       name: geolocator_apple
550
       name: geolocator_apple
551
-      sha256: "36527c555f4c425f7d8fa8c7c07d67b78e3ff7590d40448051959e1860c1cfb4"
551
+      sha256: ab90ae811c42ec2f6021e01eca71df00dee6ff1e69d2c2dafd4daeb0b793f73d
552
       url: "https://pub.dev"
552
       url: "https://pub.dev"
553
     source: hosted
553
     source: hosted
554
-    version: "2.2.7"
554
+    version: "2.3.2"
555
   geolocator_platform_interface:
555
   geolocator_platform_interface:
556
     dependency: transitive
556
     dependency: transitive
557
     description:
557
     description:
558
       name: geolocator_platform_interface
558
       name: geolocator_platform_interface
559
-      sha256: b2a0c09d2cfe8ad6a8cc44fada5c1092c49286e8c30922914dfe2b23799a682f
559
+      sha256: b7aca62aa05d7e610c396a53a1936ff87fce2f735d76e93fde9269c341c46a25
560
       url: "https://pub.dev"
560
       url: "https://pub.dev"
561
     source: hosted
561
     source: hosted
562
-    version: "4.0.8"
562
+    version: "4.1.1"
563
   geolocator_web:
563
   geolocator_web:
564
     dependency: transitive
564
     dependency: transitive
565
     description:
565
     description:
566
       name: geolocator_web
566
       name: geolocator_web
567
-      sha256: f68a122da48fcfff68bbc9846bb0b74ef651afe84a1b1f6ec20939de4d6860e1
567
+      sha256: "59083f7e0871b78299918d92bf930a14377f711d2d1156c558cd5ebae6c20d58"
568
       url: "https://pub.dev"
568
       url: "https://pub.dev"
569
     source: hosted
569
     source: hosted
570
-    version: "2.1.6"
570
+    version: "2.2.0"
571
   geolocator_windows:
571
   geolocator_windows:
572
     dependency: transitive
572
     dependency: transitive
573
     description:
573
     description:
574
       name: geolocator_windows
574
       name: geolocator_windows
575
-      sha256: "463045515b08bd83f73e014359c4ad063b902eb3899952cfb784497ae6c6583b"
575
+      sha256: "8725beaa00db2b52f53d9811584cb4488240b250b04a09763e80945017f65c9c"
576
       url: "https://pub.dev"
576
       url: "https://pub.dev"
577
     source: hosted
577
     source: hosted
578
-    version: "0.2.0"
578
+    version: "0.2.1"
579
   get_it:
579
   get_it:
580
     dependency: "direct main"
580
     dependency: "direct main"
581
     description:
581
     description:
612
     dependency: transitive
612
     dependency: transitive
613
     description:
613
     description:
614
       name: image
614
       name: image
615
-      sha256: a72242c9a0ffb65d03de1b7113bc4e189686fc07c7147b8b41811d0dd0e0d9bf
615
+      sha256: "028f61960d56f26414eb616b48b04eb37d700cbe477b7fb09bf1d7ce57fd9271"
616
       url: "https://pub.dev"
616
       url: "https://pub.dev"
617
     source: hosted
617
     source: hosted
618
-    version: "4.0.17"
618
+    version: "4.1.3"
619
   image_cropper:
619
   image_cropper:
620
     dependency: "direct main"
620
     dependency: "direct main"
621
     description:
621
     description:
652
     dependency: transitive
652
     dependency: transitive
653
     description:
653
     description:
654
       name: image_picker_android
654
       name: image_picker_android
655
-      sha256: "47da2161c2e9f8f8a9cbbd89d466d174333fbdd769aeed848912e0b16d9cb369"
655
+      sha256: "0c7b83bbe2980c8a8e36e974f055e11e51675784e13a4762889feed0f3937ff2"
656
       url: "https://pub.dev"
656
       url: "https://pub.dev"
657
     source: hosted
657
     source: hosted
658
-    version: "0.8.8"
658
+    version: "0.8.8+1"
659
   image_picker_for_web:
659
   image_picker_for_web:
660
     dependency: transitive
660
     dependency: transitive
661
     description:
661
     description:
924
     dependency: transitive
924
     dependency: transitive
925
     description:
925
     description:
926
       name: platform
926
       name: platform
927
-      sha256: ae68c7bfcd7383af3629daafb32fb4e8681c7154428da4febcff06200585f102
927
+      sha256: "0a279f0707af40c890e80b1e9df8bb761694c074ba7e1d4ab1bc4b728e200b59"
928
       url: "https://pub.dev"
928
       url: "https://pub.dev"
929
     source: hosted
929
     source: hosted
930
-    version: "3.1.2"
930
+    version: "3.1.3"
931
   plugin_platform_interface:
931
   plugin_platform_interface:
932
     dependency: transitive
932
     dependency: transitive
933
     description:
933
     description:
980
     dependency: "direct main"
980
     dependency: "direct main"
981
     description:
981
     description:
982
       name: shared_preferences
982
       name: shared_preferences
983
-      sha256: b7f41bad7e521d205998772545de63ff4e6c97714775902c199353f8bf1511ac
983
+      sha256: "81429e4481e1ccfb51ede496e916348668fd0921627779233bd24cc3ff6abd02"
984
       url: "https://pub.dev"
984
       url: "https://pub.dev"
985
     source: hosted
985
     source: hosted
986
-    version: "2.2.1"
986
+    version: "2.2.2"
987
   shared_preferences_android:
987
   shared_preferences_android:
988
     dependency: transitive
988
     dependency: transitive
989
     description:
989
     description:
1077
       url: "https://pub.dev"
1077
       url: "https://pub.dev"
1078
     source: hosted
1078
     source: hosted
1079
     version: "1.2.0"
1079
     version: "1.2.0"
1080
+  syncfusion_flutter_calendar:
1081
+    dependency: "direct main"
1082
+    description:
1083
+      name: syncfusion_flutter_calendar
1084
+      sha256: "0ef40e5dd10b94b9bb2808c217a10d24061b87e9106b9b35ecd8d489bb4f4b23"
1085
+      url: "https://pub.dev"
1086
+    source: hosted
1087
+    version: "23.1.41"
1088
+  syncfusion_flutter_core:
1089
+    dependency: transitive
1090
+    description:
1091
+      name: syncfusion_flutter_core
1092
+      sha256: a8e3d3ea369566bb45f454331c5863939632b6068d15b558fa384811f1f5aa51
1093
+      url: "https://pub.dev"
1094
+    source: hosted
1095
+    version: "23.1.41"
1096
+  syncfusion_flutter_datepicker:
1097
+    dependency: transitive
1098
+    description:
1099
+      name: syncfusion_flutter_datepicker
1100
+      sha256: "0faff9098c24299429743e895e6365aed4849884c19b7ce110aaee21db7afacf"
1101
+      url: "https://pub.dev"
1102
+    source: hosted
1103
+    version: "23.1.41"
1080
   term_glyph:
1104
   term_glyph:
1081
     dependency: transitive
1105
     dependency: transitive
1082
     description:
1106
     description:
1257
     dependency: transitive
1281
     dependency: transitive
1258
     description:
1282
     description:
1259
       name: win32
1283
       name: win32
1260
-      sha256: "9e82a402b7f3d518fb9c02d0e9ae45952df31b9bf34d77baf19da2de03fc2aaa"
1284
+      sha256: "350a11abd2d1d97e0cc7a28a81b781c08002aa2864d9e3f192ca0ffa18b06ed3"
1261
       url: "https://pub.dev"
1285
       url: "https://pub.dev"
1262
     source: hosted
1286
     source: hosted
1263
-    version: "5.0.7"
1287
+    version: "5.0.9"
1264
   win32_registry:
1288
   win32_registry:
1265
     dependency: transitive
1289
     dependency: transitive
1266
     description:
1290
     description:
1267
       name: win32_registry
1291
       name: win32_registry
1268
-      sha256: e4506d60b7244251bc59df15656a3093501c37fb5af02105a944d73eb95be4c9
1292
+      sha256: "41fd8a189940d8696b1b810efb9abcf60827b6cbfab90b0c43e8439e3a39d85a"
1269
       url: "https://pub.dev"
1293
       url: "https://pub.dev"
1270
     source: hosted
1294
     source: hosted
1271
-    version: "1.1.1"
1295
+    version: "1.1.2"
1272
   wkt_parser:
1296
   wkt_parser:
1273
     dependency: transitive
1297
     dependency: transitive
1274
     description:
1298
     description:

+ 2
- 1
pubspec.yaml View File

92
   flutter_animate: ^4.2.0+1
92
   flutter_animate: ^4.2.0+1
93
   animations: ^2.0.8
93
   animations: ^2.0.8
94
   firebase_crashlytics: ^3.3.5
94
   firebase_crashlytics: ^3.3.5
95
-  app_settings: ^5.0.0
95
+  app_settings: ^5.1.1
96
   flutter_gif: ^0.0.4
96
   flutter_gif: ^0.0.4
97
+  syncfusion_flutter_calendar: ^23.1.41
97
 
98
 
98
 dev_dependencies:
99
 dev_dependencies:
99
   flutter_test:
100
   flutter_test:

+ 23
- 0
upload_certificate.pem View File

1
+-----BEGIN CERTIFICATE-----
2
+MIIDxzCCAq+gAwIBAgIIY/18pRsCdGswDQYJKoZIhvcNAQELBQAwgZAxCzAJBgNV
3
+BAYTAklEMRQwEgYDVQQIEwtES0kgSmFrYXJ0YTEQMA4GA1UEBxMHSmFrYXJ0YTEi
4
+MCAGA1UEChMZSW5jdWJ1cyBDeWJlcmluZG8gUGVyc2FkYTEWMBQGA1UECxMNSVQg
5
+RGVwYXJ0bWVudDEdMBsGA1UEAxMURGllbmkgQW5pbmR5YXNhcmF0aGkwIBcNMjMx
6
+MDA0MDYyMzA5WhgPMjA1MTAyMTkwNjIzMDlaMIGQMQswCQYDVQQGEwJJRDEUMBIG
7
+A1UECBMLREtJIEpha2FydGExEDAOBgNVBAcTB0pha2FydGExIjAgBgNVBAoTGUlu
8
+Y3VidXMgQ3liZXJpbmRvIFBlcnNhZGExFjAUBgNVBAsTDUlUIERlcGFydG1lbnQx
9
+HTAbBgNVBAMTFERpZW5pIEFuaW5keWFzYXJhdGhpMIIBIjANBgkqhkiG9w0BAQEF
10
+AAOCAQ8AMIIBCgKCAQEApqBnnHa1rWaU/QZtTWEu5JocuY8H4ERSfgeXlqSaFoDV
11
+N+EoHaTakKWE7nqswVT3cTJdPDoEVZxGP6DVqOrWfd+EbUH9uNKqtRVVq/Yc7d3F
12
+4Ix3C4t/YdACb7QrP/oDape5rQf9KguRyzxGcbgY0P0A771Uq3jgaPbSXSazokyk
13
+nbPgykF+iEwsdfSiqKK5jdIenXD92OjCIqdJR16yJbyV6nzXKSQf/+mVzqhg+fbJ
14
+8QJik84+PL2rx6UvN5TxoFMDLtPNEjlQxS0aIXePgpUbM0KpADvmro7u69h2Mbry
15
+qObqRcyL2JiCiHzZ+tbt5FpN3hPyBTtLdh9dBW1bXQIDAQABoyEwHzAdBgNVHQ4E
16
+FgQU9qrCju0iqTjjMvjc3MlfvYpKOi4wDQYJKoZIhvcNAQELBQADggEBABdt3Sqa
17
+zbsuUNFr3k4ikNyBRVhXymLW4vy0zwd40TBQUpn8G8SRlwsIIl1p2HEVQogFBGfG
18
+L7oDXNsSsnuKn5Y2XknnZeFatMTsOm12wW2dejlcVPKIQCPkxVz/+cu6qi9eZr+g
19
+FGV4bT/sfUKHyqLzrvFvwP/7+cYxMdlup0NgYZpBqdB3XektRBNNSLOmlE9FpyNq
20
+kuiKQcidN+jYbeOhN96kh9BvE0xRcDz/cLh8uSA/aIE7bT1XwjJ1nqtjmtBMGd/v
21
+INdFQTaLGp7m9KScMNA/WUkRxdeU/RZcVnDgUjRzeiOWbPLnkUdVc2wWXPb/7QW7
22
+u7fvIlJXknLqCn0=
23
+-----END CERTIFICATE-----

Loading…
Cancel
Save