From b3b1d4658aa9c364e9007f570015f09592c33623 Mon Sep 17 00:00:00 2001
From: shoaib-mohmad <shoaib.mohmad@tarento.com>
Date: Mon, 28 Feb 2022 17:49:13 +0530
Subject: [PATCH] Push notifications in progress.

---
 android/app/build.gradle                      |   3 +
 android/app/google-services.json              |  47 ++++
 android/app/src/main/AndroidManifest.xml      |   7 +-
 .../src/main/res/drawable/flutter_devs.png    | Bin 0 -> 37891 bytes
 android/build.gradle                          |   1 +
 lib/constants/api_endpoints.dart              |   2 +
 lib/constants/app_constants.dart              |   7 +
 lib/l10n/app_en.arb                           |   8 +-
 lib/landing_page.dart                         |  96 +++++---
 lib/pages/application_details_page.dart       |   8 +-
 lib/pages/home_page.dart                      |   2 +-
 lib/pages/inspection_summary.dart             |   4 +-
 lib/pages/login_email_page.dart               |  35 ++-
 lib/pages/login_otp_page.dart                 |  54 +++--
 lib/repositories/login_repository.dart        |  44 +++-
 lib/services/login_service.dart               |  18 +-
 lib/util/helper.dart                          |  15 +-
 lib/util/notification_helper.dart             |  61 +++++
 lib/widgets/application_card.dart             |  50 ++--
 lib/widgets/application_field.dart            |  53 +++--
 lib/widgets/application_field_dialog.dart     |  82 +++++--
 lib/widgets/questions/dropdown_question.dart  |  99 ++++++++
 .../questions/multi_select_question.dart      | 225 +++++++-----------
 lib/widgets/questions/radio_question.dart     |  98 ++++++++
 .../questions/single_answer_question.dart     |  87 -------
 lib/widgets/questions/text_question.dart      |  97 ++++----
 pubspec.lock                                  |  84 +++++++
 pubspec.yaml                                  |   4 +
 28 files changed, 893 insertions(+), 398 deletions(-)
 create mode 100644 android/app/google-services.json
 create mode 100644 android/app/src/main/res/drawable/flutter_devs.png
 create mode 100644 lib/util/notification_helper.dart
 create mode 100644 lib/widgets/questions/dropdown_question.dart
 create mode 100644 lib/widgets/questions/radio_question.dart
 delete mode 100644 lib/widgets/questions/single_answer_question.dart

diff --git a/android/app/build.gradle b/android/app/build.gradle
index 85cd96a..26fd88b 100644
--- a/android/app/build.gradle
+++ b/android/app/build.gradle
@@ -23,6 +23,7 @@ if (flutterVersionName == null) {
 
 apply plugin: 'com.android.application'
 apply plugin: 'kotlin-android'
+apply plugin: 'com.google.gms.google-services'
 apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
 
 android {
@@ -65,4 +66,6 @@ flutter {
 
 dependencies {
     implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
+    implementation 'com.google.firebase:firebase-messaging:20.3.0'
 }
+
diff --git a/android/app/google-services.json b/android/app/google-services.json
new file mode 100644
index 0000000..ad2c948
--- /dev/null
+++ b/android/app/google-services.json
@@ -0,0 +1,47 @@
+{
+  "project_info": {
+    "project_number": "927565375305",
+    "project_id": "up-smf-47fd3",
+    "storage_bucket": "up-smf-47fd3.appspot.com"
+  },
+  "client": [
+    {
+      "client_info": {
+        "mobilesdk_app_id": "1:927565375305:android:72f8b2fed08ff47dc6dc98",
+        "android_client_info": {
+          "package_name": "com.example.smf_mobile"
+        }
+      },
+      "oauth_client": [
+        {
+          "client_id": "927565375305-57h44768ioqql1j8lm5q0jrq4es9lqj8.apps.googleusercontent.com",
+          "client_type": 1,
+          "android_info": {
+            "package_name": "com.example.smf_mobile",
+            "certificate_hash": "7157475a2fccb7c2857112262c12be29359f845d"
+          }
+        },
+        {
+          "client_id": "927565375305-den7asbeb5ucg36rpbn76ppnnd10pm4r.apps.googleusercontent.com",
+          "client_type": 3
+        }
+      ],
+      "api_key": [
+        {
+          "current_key": "AIzaSyDmWSOiwgEnSoTt6GKiArZT9wHREe-f1rw"
+        }
+      ],
+      "services": {
+        "appinvite_service": {
+          "other_platform_oauth_client": [
+            {
+              "client_id": "927565375305-den7asbeb5ucg36rpbn76ppnnd10pm4r.apps.googleusercontent.com",
+              "client_type": 3
+            }
+          ]
+        }
+      }
+    }
+  ],
+  "configuration_version": "1"
+}
\ No newline at end of file
diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml
index a471d0b..f6f287c 100644
--- a/android/app/src/main/AndroidManifest.xml
+++ b/android/app/src/main/AndroidManifest.xml
@@ -1,6 +1,7 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     package="com.example.smf_mobile">
-   <application
+    <uses-permission android:name="android.permission.INTERNET"/>
+    <application
         android:label="UP SMF"
         android:name="${applicationName}"
         android:icon="@mipmap/ic_launcher">
@@ -24,6 +25,10 @@
                 <action android:name="android.intent.action.MAIN"/>
                 <category android:name="android.intent.category.LAUNCHER"/>
             </intent-filter>
+            <intent-filter>
+                <action android:name="FLUTTER_NOTIFICATION_CLICK" />
+                <category android:name="android.intent.category.DEFAULT" />
+            </intent-filter>
         </activity>
         <!-- Don't delete the meta-data below.
              This is used by the Flutter tool to generate GeneratedPluginRegistrant.java -->
diff --git a/android/app/src/main/res/drawable/flutter_devs.png b/android/app/src/main/res/drawable/flutter_devs.png
new file mode 100644
index 0000000000000000000000000000000000000000..275d9ad266027529356df93df0097f05ea3e9889
GIT binary patch
literal 37891
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

literal 0
HcmV?d00001

diff --git a/android/build.gradle b/android/build.gradle
index 4256f91..94d72e4 100644
--- a/android/build.gradle
+++ b/android/build.gradle
@@ -8,6 +8,7 @@ buildscript {
     dependencies {
         classpath 'com.android.tools.build:gradle:4.1.0'
         classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
+        classpath 'com.google.gms:google-services:4.3.4'
     }
 }
 
diff --git a/lib/constants/api_endpoints.dart b/lib/constants/api_endpoints.dart
index c0293d4..8e575b0 100644
--- a/lib/constants/api_endpoints.dart
+++ b/lib/constants/api_endpoints.dart
@@ -2,6 +2,8 @@ class ApiUrl {
   static const baseUrl = 'https://smfdev.idc.tarento.com';
   static const getOtp = '$baseUrl/api/user/requestOTP';
   static const validateOtp = '$baseUrl/api/signIn';
+  static const updateUserDeviceToken =
+      '$baseUrl/api/user/updateUserDeviceToken';
   static const getAllApplications = '$baseUrl/api/forms/getAllApplications';
   static const submitInspection = '$baseUrl/api/forms/submitInspection';
   static const getAllUsers = '$baseUrl/api/user/v1/getAllUser';
diff --git a/lib/constants/app_constants.dart b/lib/constants/app_constants.dart
index d8e4235..5c65999 100644
--- a/lib/constants/app_constants.dart
+++ b/lib/constants/app_constants.dart
@@ -18,6 +18,13 @@ class FieldType {
 }
 
 class InspectionStatus {
+  static const String newInspection = 'NEW';
   static const String sentForInspection = 'SENTFORINS';
   static const String inspectionCompleted = 'INSCOMPLETED';
+  static const String returned = 'RETURNED';
+}
+
+class FieldValue {
+  static const String correct = 'Correct';
+  static const String inCorrect = 'Incorrect';
 }
diff --git a/lib/l10n/app_en.arb b/lib/l10n/app_en.arb
index 23d7cae..c319c9d 100644
--- a/lib/l10n/app_en.arb
+++ b/lib/l10n/app_en.arb
@@ -13,5 +13,11 @@
     "viewPastApplications": "View past applications",
     "next": "Next",
     "previous": "previous",
-    "inspectionCompleted": "Inspection completed"
+    "inspectionCompleted": "Inspection completed",
+    "sessionExpiredMessage": "Your session has expired.",
+    "isGivenInformationCorrect": "Is the given information found correct?",
+    "typeHere": "Type here",
+    "cancel": "Cancel",
+    "submit": "Submit",
+    "actualValue": "Actual value(s)"
 }
\ No newline at end of file
diff --git a/lib/landing_page.dart b/lib/landing_page.dart
index 5500a1a..888d48f 100644
--- a/lib/landing_page.dart
+++ b/lib/landing_page.dart
@@ -8,11 +8,13 @@ import 'package:smf_mobile/repositories/application_repository.dart';
 import 'package:smf_mobile/repositories/form_repository.dart';
 import 'package:smf_mobile/repositories/login_repository.dart';
 import 'package:smf_mobile/repositories/user_repository.dart';
+import 'package:smf_mobile/util/helper.dart';
 import 'constants/app_constants.dart';
 import 'constants/app_urls.dart';
 import 'constants/color_constants.dart';
 import 'routes.dart';
 import 'package:flutter_gen/gen_l10n/app_localizations.dart';
+import 'package:firebase_core/firebase_core.dart';
 
 class LandingPage extends StatefulWidget {
   static const route = AppUrl.landingPage;
@@ -28,6 +30,12 @@ class LandingPage extends StatefulWidget {
 class _LandingPageState extends State<LandingPage> {
   final client = HttpClient();
   Locale _locale = const Locale('en', 'US');
+  bool _isTokenExpired = false;
+
+  @override
+  void initState() {
+    super.initState();
+  }
 
   void setLocale(Locale value) {
     setState(() {
@@ -35,40 +43,62 @@ class _LandingPageState extends State<LandingPage> {
     });
   }
 
+  Future<dynamic> _initilizeApp() async {
+    _isTokenExpired = await Helper.isTokenExpired();
+    await Firebase.initializeApp();
+    // await Future.delayed(const Duration(microseconds: 100));
+    return true;
+  }
+
   @override
   Widget build(BuildContext context) {
-    return MultiProvider(
-        providers: [
-          ChangeNotifierProvider.value(value: LoginRespository()),
-          ChangeNotifierProvider.value(value: ApplicationRespository()),
-          ChangeNotifierProvider.value(value: UserRespository()),
-          ChangeNotifierProvider.value(value: FormRespository()),
-        ],
-        child: MaterialApp(
-          title: appName,
-          locale: _locale,
-          localizationsDelegates: const [
-            AppLocalizations.delegate,
-            GlobalMaterialLocalizations.delegate,
-            GlobalWidgetsLocalizations.delegate,
-            GlobalCupertinoLocalizations.delegate,
-          ],
-          supportedLocales: const [
-            Locale('en', 'US'),
-            // Locale('es', 'ES'),
-          ],
-          theme: ThemeData(
-              scaffoldBackgroundColor: AppColors.scaffoldBackground,
-              primaryColor: Colors.white,
-              visualDensity: VisualDensity.adaptivePlatformDensity,
-              dividerColor: AppColors.black08,
-              canvasColor: Colors.white,
-              unselectedWidgetColor: AppColors.black40),
-          debugShowCheckedModeBanner: false,
-          onGenerateRoute: Routes.generateRoute,
-          onUnknownRoute: Routes.errorRoute,
-          home: const LoginEmailPage(),
-          // home: const HomePage(),
-        ));
+    return Container(
+        color: AppColors.scaffoldBackground,
+        child: FutureBuilder(
+            // Initialize FlutterFire
+            future: _initilizeApp(),
+            builder: (context, AsyncSnapshot<dynamic> snapshot) {
+              // Check for errors
+              if (snapshot.hasData) {
+                return MultiProvider(
+                    providers: [
+                      ChangeNotifierProvider.value(value: LoginRespository()),
+                      ChangeNotifierProvider.value(
+                          value: ApplicationRespository()),
+                      ChangeNotifierProvider.value(value: UserRespository()),
+                      ChangeNotifierProvider.value(value: FormRespository()),
+                    ],
+                    child: MaterialApp(
+                      title: appName,
+                      locale: _locale,
+                      localizationsDelegates: const [
+                        AppLocalizations.delegate,
+                        GlobalMaterialLocalizations.delegate,
+                        GlobalWidgetsLocalizations.delegate,
+                        GlobalCupertinoLocalizations.delegate,
+                      ],
+                      supportedLocales: const [
+                        Locale('en', 'US'),
+                        // Locale('es', 'ES'),
+                      ],
+                      theme: ThemeData(
+                          scaffoldBackgroundColor: AppColors.scaffoldBackground,
+                          primaryColor: Colors.white,
+                          visualDensity: VisualDensity.adaptivePlatformDensity,
+                          dividerColor: AppColors.black08,
+                          canvasColor: Colors.white,
+                          unselectedWidgetColor: AppColors.black40),
+                      debugShowCheckedModeBanner: false,
+                      onGenerateRoute: Routes.generateRoute,
+                      onUnknownRoute: Routes.errorRoute,
+                      home: !_isTokenExpired
+                          ? const HomePage()
+                          : const LoginEmailPage(),
+                      // home: const HomePage(),
+                    ));
+              } else {
+                return const Center();
+              }
+            }));
   }
 }
diff --git a/lib/pages/application_details_page.dart b/lib/pages/application_details_page.dart
index 5828389..8c66091 100644
--- a/lib/pages/application_details_page.dart
+++ b/lib/pages/application_details_page.dart
@@ -32,6 +32,7 @@ class _ApplicationDetailsPageState extends State<ApplicationDetailsPage>
   int _activeTabIndex = 0;
   final Map _data = {};
   final Map _fieldTypes = {};
+  final Map _fieldOptions = {};
   final List<String> _tabs = [];
   final List<Map> _fields = [];
 
@@ -59,6 +60,8 @@ class _ApplicationDetailsPageState extends State<ApplicationDetailsPage>
         if (_formData.fields[i]['fieldType'] != FieldType.heading) {
           _fieldTypes[_formData.fields[i]['name']] =
               _formData.fields[i]['fieldType'];
+          _fieldOptions[_formData.fields[i]['name']] =
+              _formData.fields[i]['values'];
         }
       }
     }
@@ -98,12 +101,13 @@ class _ApplicationDetailsPageState extends State<ApplicationDetailsPage>
               })
             }
         });
+    // print(fieldData);
   }
 
   void _validateUser() async {
     bool tokenExpired = await Helper.isTokenExpired();
     if (tokenExpired) {
-      Helper.toastMessage('Your session has expired.');
+      Helper.toastMessage(AppLocalizations.of(context)!.sessionExpiredMessage);
       Navigator.of(context).pushReplacement(MaterialPageRoute(
         builder: (context) => const LoginEmailPage(),
       ));
@@ -241,6 +245,8 @@ class _ApplicationDetailsPageState extends State<ApplicationDetailsPage>
                                                   field.keys.elementAt(i)],
                                               fieldType: _fieldTypes[
                                                   field.keys.elementAt(i)],
+                                              fieldOptions: _fieldOptions[
+                                                  field.keys.elementAt(i)],
                                               applicationStatus:
                                                   widget.application.status,
                                               parentAction: updateField,
diff --git a/lib/pages/home_page.dart b/lib/pages/home_page.dart
index 54262c7..20f857d 100644
--- a/lib/pages/home_page.dart
+++ b/lib/pages/home_page.dart
@@ -34,7 +34,7 @@ class _HomePageState extends State<HomePage> {
   void _validateUser() async {
     bool tokenExpired = await Helper.isTokenExpired();
     if (tokenExpired) {
-      Helper.toastMessage('Your session has expired.');
+      Helper.toastMessage(AppLocalizations.of(context)!.sessionExpiredMessage);
       Navigator.of(context).pushReplacement(MaterialPageRoute(
         builder: (context) => const LoginEmailPage(),
       ));
diff --git a/lib/pages/inspection_summary.dart b/lib/pages/inspection_summary.dart
index e529200..91a6039 100644
--- a/lib/pages/inspection_summary.dart
+++ b/lib/pages/inspection_summary.dart
@@ -1,5 +1,4 @@
 import 'package:flutter/material.dart';
-import 'package:fluttertoast/fluttertoast.dart';
 import 'package:google_fonts/google_fonts.dart';
 import 'package:provider/provider.dart';
 import 'package:smf_mobile/constants/app_constants.dart';
@@ -12,6 +11,7 @@ import 'package:smf_mobile/repositories/form_repository.dart';
 import 'package:smf_mobile/util/helper.dart';
 import 'package:smf_mobile/widgets/people_card.dart';
 import 'inspection_completed.dart';
+import 'package:flutter_gen/gen_l10n/app_localizations.dart';
 
 class InspectionSummaryPage extends StatefulWidget {
   static const route = AppUrl.inspectionSummary;
@@ -65,7 +65,7 @@ class _InspectionSummaryPageState extends State<InspectionSummaryPage> {
   void _validateUser() async {
     bool tokenExpired = await Helper.isTokenExpired();
     if (tokenExpired) {
-      Helper.toastMessage('Your session has expired.');
+      Helper.toastMessage(AppLocalizations.of(context)!.sessionExpiredMessage);
       Navigator.of(context).pushReplacement(MaterialPageRoute(
         builder: (context) => const LoginEmailPage(),
       ));
diff --git a/lib/pages/login_email_page.dart b/lib/pages/login_email_page.dart
index 629962d..e623aa3 100644
--- a/lib/pages/login_email_page.dart
+++ b/lib/pages/login_email_page.dart
@@ -1,3 +1,4 @@
+// import 'dart:math';
 import 'package:flutter/material.dart';
 import 'package:flutter/services.dart';
 import 'package:provider/provider.dart';
@@ -8,6 +9,8 @@ import 'package:smf_mobile/pages/login_otp_page.dart';
 import 'package:smf_mobile/repositories/login_repository.dart';
 import 'package:smf_mobile/util/helper.dart';
 import 'package:flutter_gen/gen_l10n/app_localizations.dart';
+import 'package:firebase_messaging/firebase_messaging.dart';
+import 'package:smf_mobile/util/notification_helper.dart';
 
 class LoginEmailPage extends StatefulWidget {
   static const route = AppUrl.loginEmailPage;
@@ -20,19 +23,39 @@ class LoginEmailPage extends StatefulWidget {
 class _LoginEmailPageState extends State<LoginEmailPage> {
   final TextEditingController _emailController = TextEditingController();
   final GlobalKey<ScaffoldState> _scaffoldKey = GlobalKey<ScaffoldState>();
+  FirebaseMessaging messaging = FirebaseMessaging.instance;
   String _errorMessage = '';
-
   late Locale locale;
 
   @override
   void initState() {
     super.initState();
+    // _configureMessaging();
   }
 
-  // This method should be triggered on some event
-  // _setLang() async {
-  //   locale = const Locale('es', '');
-  //   LandingPage.of(context)?.setLocale(locale);
+  // _configureMessaging() async {
+  //   NotificationSettings settings = await messaging.requestPermission(
+  //     alert: true,
+  //     announcement: false,
+  //     badge: true,
+  //     carPlay: false,
+  //     criticalAlert: false,
+  //     provisional: false,
+  //     sound: true,
+  //   );
+  //   print('User granted permission: ${settings.authorizationStatus}');
+
+  //   FirebaseMessaging.onMessage.listen((RemoteMessage message) {
+  //     if (message.notification != null) {
+  //       var random = Random();
+  //       int notificationId = random.nextInt(999999);
+  //       String body =
+  //           message.notification!.body.toString() + message.data.toString();
+  //       NotificationHelper.scheduleNotification(context, DateTime.now(),
+  //           notificationId, message.notification!.title.toString(), body);
+  //     }
+  //     print('Message data: $message');
+  //   });
   // }
 
   Future<void> _generateOtp() async {
@@ -45,7 +68,7 @@ class _LoginEmailPageState extends State<LoginEmailPage> {
     try {
       final responseCode =
           await Provider.of<LoginRespository>(context, listen: false)
-              .getOtp(email);
+              .getOtp(email.trim());
       if (responseCode == 200) {
         Navigator.of(context).pushReplacement(MaterialPageRoute(
           builder: (context) => const LoginOtpPage(),
diff --git a/lib/pages/login_otp_page.dart b/lib/pages/login_otp_page.dart
index 3bb11ae..4423329 100644
--- a/lib/pages/login_otp_page.dart
+++ b/lib/pages/login_otp_page.dart
@@ -10,6 +10,8 @@ import 'package:otp_text_field/style.dart';
 import 'package:smf_mobile/repositories/login_repository.dart';
 import 'package:smf_mobile/util/helper.dart';
 import 'package:flutter_gen/gen_l10n/app_localizations.dart';
+import 'package:unique_identifier/unique_identifier.dart';
+import 'package:flutter/services.dart';
 
 class LoginOtpPage extends StatefulWidget {
   static const route = AppUrl.loginOtpPage;
@@ -23,10 +25,27 @@ class _LoginOtpPageState extends State<LoginOtpPage> {
   final GlobalKey<ScaffoldState> _scaffoldKey = GlobalKey<ScaffoldState>();
   String _errorMessage = '';
   String _otp = '';
+  late String _identifier;
 
   @override
   void initState() {
     super.initState();
+    initUniqueIdentifierState();
+  }
+
+  Future<void> initUniqueIdentifierState() async {
+    String? identifier;
+    try {
+      identifier = await UniqueIdentifier.serial;
+    } on PlatformException {
+      identifier = 'Failed to get Unique Identifier';
+    }
+
+    if (!mounted) return;
+
+    setState(() {
+      _identifier = identifier!;
+    });
   }
 
   Future<void> _validateOtp() async {
@@ -34,7 +53,7 @@ class _LoginOtpPageState extends State<LoginOtpPage> {
     try {
       final responseCode =
           await Provider.of<LoginRespository>(context, listen: false)
-              .validateOtp(otp);
+              .validateOtp(context, otp, _identifier);
       if (responseCode == 200) {
         Navigator.of(context).pushReplacement(MaterialPageRoute(
           builder: (context) => const HomePage(),
@@ -144,19 +163,26 @@ class _LoginOtpPageState extends State<LoginOtpPage> {
                                       color: Colors.white,
                                     ),
                                     child: OTPTextField(
-                                      length: 6,
-                                      width: MediaQuery.of(context).size.width,
-                                      fieldWidth: 38,
-                                      style: const TextStyle(fontSize: 14),
-                                      textFieldAlignment:
-                                          MainAxisAlignment.spaceAround,
-                                      fieldStyle: FieldStyle.underline,
-                                      onCompleted: (pin) {
-                                        setState(() {
-                                          _otp = pin;
-                                        });
-                                      },
-                                    ),
+                                        length: 6,
+                                        width:
+                                            MediaQuery.of(context).size.width,
+                                        fieldWidth: 38,
+                                        style: const TextStyle(fontSize: 14),
+                                        textFieldAlignment:
+                                            MainAxisAlignment.spaceAround,
+                                        fieldStyle: FieldStyle.underline,
+                                        onCompleted: (pin) {
+                                          setState(() {
+                                            _otp = pin;
+                                          });
+                                        },
+                                        onChanged: (String? pin) {
+                                          if (pin?.length == 6) {
+                                            setState(() {
+                                              _otp = pin.toString();
+                                            });
+                                          }
+                                        }),
                                   )
                                 ],
                               ),
diff --git a/lib/repositories/login_repository.dart b/lib/repositories/login_repository.dart
index b98c877..295db22 100644
--- a/lib/repositories/login_repository.dart
+++ b/lib/repositories/login_repository.dart
@@ -1,13 +1,17 @@
 import 'dart:convert';
+import 'package:firebase_messaging/firebase_messaging.dart';
 import 'package:flutter/widgets.dart';
 import 'package:smf_mobile/models/login_model.dart';
 import 'package:flutter_secure_storage/flutter_secure_storage.dart';
 import 'package:smf_mobile/services/login_service.dart';
+import 'package:smf_mobile/util/helper.dart';
+import 'package:smf_mobile/util/notification_helper.dart';
 
 class LoginRespository with ChangeNotifier {
   late Map _data;
   late Login _loginDetails;
   String _errorMessage = '';
+  final FirebaseMessaging _firebaseMessaging = FirebaseMessaging.instance;
 
   final _storage = const FlutterSecureStorage();
 
@@ -27,7 +31,7 @@ class LoginRespository with ChangeNotifier {
     return _data['statusInfo']['statusCode'];
   }
 
-  Future<dynamic> validateOtp(String otp) async {
+  Future<dynamic> validateOtp(context, String otp, String identifier) async {
     try {
       final username = await _storage.read(key: 'username');
       final request = await LoginService.validateOtp(username!, otp);
@@ -45,10 +49,48 @@ class LoginRespository with ChangeNotifier {
       _storage.write(key: 'firstName', value: _loginDetails.firstName);
       _storage.write(key: 'lastName', value: _loginDetails.lastName);
       _storage.write(key: 'authToken', value: _loginDetails.authToken);
+      _firebaseMessaging.getToken().then((token) async {
+        final request = await LoginService.updateUserDeviceToken(
+          token.toString(),
+          identifier,
+          _loginDetails.id,
+        );
+        _data = json.decode(request.body);
+        // print(_data);
+        if (_data['statusInfo']['statusCode'] == 200) {
+          // print('_configureMessaging...');
+          _configureMessaging(context);
+        }
+      });
     }
     return _data['statusInfo']['statusCode'];
   }
 
+  _configureMessaging(context) async {
+    NotificationSettings settings = await _firebaseMessaging.requestPermission(
+      alert: true,
+      announcement: false,
+      badge: true,
+      carPlay: false,
+      criticalAlert: false,
+      provisional: false,
+      sound: true,
+    );
+    print('User granted permission: ${settings.authorizationStatus}');
+
+    FirebaseMessaging.onMessage.listen((RemoteMessage message) {
+      print('message.notification...');
+      if (message.notification != null) {
+        // int uniqueNotificationId = Helper.getUniqueId();
+        String body = message.notification!.body.toString();
+        NotificationHelper.scheduleNotification(context, DateTime.now(), 0,
+            message.notification!.title.toString(), body);
+      }
+      print('Message data: $message');
+    });
+    return;
+  }
+
   Future<void> clearData() async {
     await _storage.deleteAll();
   }
diff --git a/lib/services/login_service.dart b/lib/services/login_service.dart
index e9efcae..6df9e5a 100644
--- a/lib/services/login_service.dart
+++ b/lib/services/login_service.dart
@@ -9,9 +9,7 @@ class LoginService extends BaseService {
   LoginService(HttpClient client) : super(client);
 
   static Future<dynamic> getOtp(String username) async {
-    Map requestData = {
-      'username': username,
-    };
+    Map requestData = {'username': username, 'isMobile': true};
     var body = json.encode(requestData);
     Map<String, String> headers = await BaseService.getHeaders();
     final response =
@@ -27,4 +25,18 @@ class LoginService extends BaseService {
         headers: headers, body: body);
     return response;
   }
+
+  static Future<dynamic> updateUserDeviceToken(
+      String token, String identifier, int userId) async {
+    Map requestData = {
+      "deviceToken": token,
+      "deviceId": identifier,
+      "userId": userId
+    };
+    var body = json.encode(requestData);
+    Map<String, String> headers = await BaseService.getHeaders();
+    final response = await http.post(Uri.parse(ApiUrl.updateUserDeviceToken),
+        headers: headers, body: body);
+    return response;
+  }
 }
diff --git a/lib/util/helper.dart b/lib/util/helper.dart
index 0582bd1..92e1dde 100644
--- a/lib/util/helper.dart
+++ b/lib/util/helper.dart
@@ -1,3 +1,5 @@
+import 'dart:math';
+
 import 'package:flutter/material.dart';
 import 'package:fluttertoast/fluttertoast.dart';
 import 'package:jwt_decoder/jwt_decoder.dart';
@@ -33,7 +35,9 @@ class Helper {
   static Future<bool> isTokenExpired() async {
     bool isTokenExpired = true;
     var authToken = await _storage.read(key: 'authToken');
-    isTokenExpired = JwtDecoder.isExpired(authToken!);
+    if (authToken != null) {
+      isTokenExpired = JwtDecoder.isExpired(authToken);
+    }
     return isTokenExpired;
   }
 
@@ -47,4 +51,13 @@ class Helper {
         textColor: Colors.white,
         fontSize: 16.0);
   }
+
+  static getUniqueId() {
+    DateTime _now = DateTime.now();
+    var random = Random();
+    int id1 = random.nextInt(99999);
+    int id2 = random.nextInt(99999);
+    int notificationId = id1 + id2 + _now.millisecond;
+    return notificationId;
+  }
 }
diff --git a/lib/util/notification_helper.dart b/lib/util/notification_helper.dart
new file mode 100644
index 0000000..c03623f
--- /dev/null
+++ b/lib/util/notification_helper.dart
@@ -0,0 +1,61 @@
+// import 'dart:convert';
+// import 'package:crypto/crypto.dart';
+import 'dart:convert';
+
+import 'package:flutter/material.dart';
+import 'package:flutter_local_notifications/flutter_local_notifications.dart';
+import 'package:smf_mobile/pages/home_page.dart';
+
+class NotificationHelper {
+  // static BuildContext get context => null;
+  static void onSelectNotification(
+    BuildContext context,
+    String payload,
+  ) {
+    Navigator.of(context).pushReplacement(MaterialPageRoute(
+      builder: (context) => const HomePage(),
+    ));
+  }
+
+  static Future<void> scheduleNotification(
+      BuildContext context,
+      DateTime scheduledNotificationDateTime,
+      int notificationId,
+      String title,
+      String notes) async {
+    FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin =
+        FlutterLocalNotificationsPlugin();
+    var initializationSettingsAndroid =
+        const AndroidInitializationSettings('flutter_devs');
+    var initializationSettingsIOs = const IOSInitializationSettings();
+    var initSetttings = InitializationSettings(
+        android: initializationSettingsAndroid, iOS: initializationSettingsIOs);
+    flutterLocalNotificationsPlugin.initialize(initSetttings,
+        onSelectNotification: (payload) async {
+      onSelectNotification(context, payload!);
+    });
+
+    var androidPlatformChannelSpecifics = const AndroidNotificationDetails(
+      'channel id',
+      'channel name',
+      icon: 'flutter_devs',
+      enableVibration: true,
+      enableLights: true,
+      playSound: true,
+      // sound: RawResourceAndroidNotificationSound('mixkit_happy_bell'),
+      largeIcon: DrawableResourceAndroidBitmap('flutter_devs'),
+      styleInformation: BigTextStyleInformation(''),
+    );
+
+    var iOSPlatformChannelSpecifics = const IOSNotificationDetails();
+    var platformChannelSpecifics = NotificationDetails(
+        android: androidPlatformChannelSpecifics,
+        iOS: iOSPlatformChannelSpecifics);
+
+    Map payload = {};
+    // ignore: deprecated_member_use
+    await flutterLocalNotificationsPlugin.schedule(notificationId, title, notes,
+        scheduledNotificationDateTime, platformChannelSpecifics,
+        payload: jsonEncode(payload));
+  }
+}
diff --git a/lib/widgets/application_card.dart b/lib/widgets/application_card.dart
index 72a8c5c..0838d56 100644
--- a/lib/widgets/application_card.dart
+++ b/lib/widgets/application_card.dart
@@ -17,11 +17,29 @@ class ApplicationCard extends StatefulWidget {
 }
 
 class _ApplicationCardState extends State<ApplicationCard> {
+  String _inspectionStatus = '';
   @override
   void initState() {
     super.initState();
+    _getInspectionStatus();
   }
 
+  void _getInspectionStatus() {
+    if (widget.application.status == InspectionStatus.inspectionCompleted) {
+      _inspectionStatus = 'Completed';
+    } else if (widget.application.status ==
+        InspectionStatus.sentForInspection) {
+      _inspectionStatus = 'Pending';
+    } else {
+      _inspectionStatus = _toCapitalized(widget.application.status);
+    }
+    setState(() {});
+  }
+
+  _toCapitalized(String string) => string.isNotEmpty
+      ? '${string[0].toUpperCase()}${string.substring(1).toLowerCase()}'
+      : '';
+
   @override
   Widget build(BuildContext context) {
     return InkWell(
@@ -89,28 +107,16 @@ class _ApplicationCardState extends State<ApplicationCard> {
                           fontWeight: FontWeight.w400,
                         )),
                   ),
-                  widget.application.status ==
-                          InspectionStatus.inspectionCompleted
-                      ? Padding(
-                          padding: const EdgeInsets.only(bottom: 10),
-                          child: Text('Completed',
-                              style: GoogleFonts.lato(
-                                color: AppColors.black60,
-                                fontSize: 14.0,
-                                letterSpacing: 0.12,
-                                fontWeight: FontWeight.w700,
-                              )),
-                        )
-                      : Padding(
-                          padding: const EdgeInsets.only(bottom: 10),
-                          child: Text('Pending',
-                              style: GoogleFonts.lato(
-                                color: AppColors.black60,
-                                fontSize: 14.0,
-                                letterSpacing: 0.12,
-                                fontWeight: FontWeight.w700,
-                              )),
-                        )
+                  Padding(
+                    padding: const EdgeInsets.only(bottom: 10),
+                    child: Text(_inspectionStatus,
+                        style: GoogleFonts.lato(
+                          color: AppColors.black60,
+                          fontSize: 14.0,
+                          letterSpacing: 0.12,
+                          fontWeight: FontWeight.w700,
+                        )),
+                  ),
                 ],
               )
             ],
diff --git a/lib/widgets/application_field.dart b/lib/widgets/application_field.dart
index da777e1..ac8f844 100644
--- a/lib/widgets/application_field.dart
+++ b/lib/widgets/application_field.dart
@@ -3,11 +3,13 @@ import 'package:google_fonts/google_fonts.dart';
 import 'package:smf_mobile/constants/app_constants.dart';
 import 'package:smf_mobile/constants/color_constants.dart';
 import 'package:smf_mobile/widgets/application_field_dialog.dart';
+import 'package:flutter_gen/gen_l10n/app_localizations.dart';
 
 class ApplicationField extends StatefulWidget {
   final String fieldName;
   final Map fieldData;
   final String fieldType;
+  final List fieldOptions;
   final String applicationStatus;
   final ValueChanged<Map> parentAction;
   const ApplicationField({
@@ -15,6 +17,7 @@ class ApplicationField extends StatefulWidget {
     required this.fieldName,
     required this.fieldData,
     required this.fieldType,
+    required this.fieldOptions,
     required this.applicationStatus,
     required this.parentAction,
   }) : super(key: key);
@@ -27,15 +30,21 @@ class _ApplicationFieldState extends State<ApplicationField> {
   late String _radioValue;
   String _inspectionValue = '';
   String _summaryText = '';
-  final List<String> _options = ['Correct', 'Incorrect'];
+  final List<String> _options = [FieldValue.correct, FieldValue.inCorrect];
 
   @override
   void initState() {
     super.initState();
-    // print(widget.fieldName + ', ' + widget.fieldType);
+
     _data = widget.fieldData[widget.fieldData.keys.elementAt(0)];
+    // print('Field: ' + _data.toString());
     _radioValue = _data[_data.keys.elementAt(0)];
     _summaryText = _data[_data.keys.elementAt(1)];
+    try {
+      _inspectionValue = _data[_data.keys.elementAt(2)];
+    } catch (_) {
+      return;
+    }
   }
 
   triggerUpdate(Map dialogData) {
@@ -64,6 +73,7 @@ class _ApplicationFieldState extends State<ApplicationField> {
                 summaryText: _summaryText,
                 inspectionValue: _inspectionValue,
                 fieldType: widget.fieldType,
+                fieldOptions: widget.fieldOptions,
                 parentAction: triggerUpdate,
               );
             }));
@@ -158,7 +168,8 @@ class _ApplicationFieldState extends State<ApplicationField> {
                                   width: MediaQuery.of(context).size.width,
                                   padding: const EdgeInsets.only(bottom: 10),
                                   child: Text(
-                                    'Is the given information found correct?',
+                                    AppLocalizations.of(context)!
+                                        .sessionExpiredMessage,
                                     style: GoogleFonts.lato(
                                       color: AppColors.black60,
                                       fontWeight: FontWeight.w700,
@@ -182,7 +193,7 @@ class _ApplicationFieldState extends State<ApplicationField> {
                                                   _radioValue = _options[i];
                                                 });
                                                 if (_options[i] ==
-                                                    'Incorrect') {
+                                                    FieldValue.inCorrect) {
                                                   _displayCommentDialog();
                                                 }
                                                 Map data = {
@@ -239,7 +250,8 @@ class _ApplicationFieldState extends State<ApplicationField> {
                                                         };
                                                         triggerUpdate(data);
                                                         if (_options[i] ==
-                                                            'Incorrect') {
+                                                            FieldValue
+                                                                .inCorrect) {
                                                           _displayCommentDialog();
                                                         }
                                                       }
@@ -264,24 +276,27 @@ class _ApplicationFieldState extends State<ApplicationField> {
                                             if (widget.applicationStatus ==
                                                     InspectionStatus
                                                         .sentForInspection &&
-                                                _radioValue != 'Correct') {
+                                                _radioValue !=
+                                                    FieldValue.correct) {
                                               _displayCommentDialog();
                                             }
                                           },
-                                          icon: _radioValue != 'Correct'
-                                              ? const Icon(
-                                                  Icons.edit,
-                                                  color: AppColors.black40,
-                                                )
-                                              : const Icon(
-                                                  Icons.message,
-                                                  color: AppColors.black40,
-                                                ),
+                                          icon:
+                                              _radioValue != FieldValue.correct
+                                                  ? const Icon(
+                                                      Icons.edit,
+                                                      color: AppColors.black40,
+                                                    )
+                                                  : const Icon(
+                                                      Icons.message,
+                                                      color: AppColors.black40,
+                                                    ),
                                         ),
                                       )
                                     ],
                                   )),
-                              _radioValue != 'Correct' && _summaryText != ''
+                              _radioValue != FieldValue.correct &&
+                                      _summaryText != ''
                                   ? Container(
                                       margin: const EdgeInsets.only(top: 10),
                                       padding: const EdgeInsets.fromLTRB(
@@ -304,7 +319,8 @@ class _ApplicationFieldState extends State<ApplicationField> {
                                       ),
                                     )
                                   : const Center(),
-                              _radioValue != 'Correct' && _inspectionValue != ''
+                              _radioValue != FieldValue.correct &&
+                                      _inspectionValue != ''
                                   ? Container(
                                       width: MediaQuery.of(context).size.width,
                                       padding: const EdgeInsets.only(top: 20),
@@ -318,7 +334,8 @@ class _ApplicationFieldState extends State<ApplicationField> {
                                         ),
                                       ))
                                   : const Center(),
-                              _radioValue != 'Correct' && _inspectionValue != ''
+                              _radioValue != FieldValue.correct &&
+                                      _inspectionValue != ''
                                   ? Container(
                                       margin: const EdgeInsets.only(top: 10),
                                       padding: const EdgeInsets.fromLTRB(
diff --git a/lib/widgets/application_field_dialog.dart b/lib/widgets/application_field_dialog.dart
index df381b6..616befd 100644
--- a/lib/widgets/application_field_dialog.dart
+++ b/lib/widgets/application_field_dialog.dart
@@ -1,19 +1,26 @@
 import 'package:flutter/material.dart';
+import 'package:flutter/services.dart';
 import 'package:google_fonts/google_fonts.dart';
 import 'package:smf_mobile/constants/app_constants.dart';
 import 'package:smf_mobile/constants/color_constants.dart';
+import 'package:smf_mobile/widgets/questions/dropdown_question.dart';
+import 'package:smf_mobile/widgets/questions/multi_select_question.dart';
+import 'package:smf_mobile/widgets/questions/radio_question.dart';
 import 'package:smf_mobile/widgets/questions/text_question.dart';
+import 'package:flutter_gen/gen_l10n/app_localizations.dart';
 
 class ApplicationFieldDialog extends StatefulWidget {
   final String summaryText;
   final String inspectionValue;
   final String fieldType;
+  final List fieldOptions;
   final ValueChanged<Map> parentAction;
   const ApplicationFieldDialog({
     Key? key,
     required this.summaryText,
     required this.inspectionValue,
     required this.fieldType,
+    required this.fieldOptions,
     required this.parentAction,
   }) : super(key: key);
 
@@ -29,14 +36,20 @@ class _ApplicationFieldDialogState extends State<ApplicationFieldDialog> {
   @override
   void initState() {
     super.initState();
+    // print('Dialog: ' + widget.inspectionValue);
     _summaryController.text = widget.summaryText;
+    _inspectionValue = widget.inspectionValue;
   }
 
   saveData(String inspectionValue) {
     setState(() {
       _inspectionValue = inspectionValue;
     });
-    // _submitData();
+    data = {
+      'summaryText': _summaryController.text,
+      'inspectionValue': _inspectionValue
+    };
+    widget.parentAction(data);
   }
 
   _submitData() {
@@ -44,6 +57,7 @@ class _ApplicationFieldDialogState extends State<ApplicationFieldDialog> {
       'summaryText': _summaryController.text,
       'inspectionValue': _inspectionValue
     };
+    // print('inspectionValue: $_inspectionValue');
     widget.parentAction(data);
   }
 
@@ -57,7 +71,7 @@ class _ApplicationFieldDialogState extends State<ApplicationFieldDialog> {
               margin: const EdgeInsets.only(top: 150),
               decoration: BoxDecoration(
                   color: Colors.white, borderRadius: BorderRadius.circular(4)),
-              constraints: const BoxConstraints(minHeight: 300, maxHeight: 400),
+              constraints: const BoxConstraints(minHeight: 300, maxHeight: 440),
               width: MediaQuery.of(context).size.width - 40,
               child: Material(
                   child: Padding(
@@ -66,7 +80,7 @@ class _ApplicationFieldDialogState extends State<ApplicationFieldDialog> {
                   crossAxisAlignment: CrossAxisAlignment.start,
                   children: [
                     SizedBox(
-                      height: 290,
+                      height: 330,
                       child: ListView(
                           shrinkWrap: true,
                           physics: const AlwaysScrollableScrollPhysics(),
@@ -94,7 +108,7 @@ class _ApplicationFieldDialogState extends State<ApplicationFieldDialog> {
                                 borderRadius: BorderRadius.circular(8),
                                 child: Focus(
                                   child: TextFormField(
-                                    autofocus: true,
+                                    // autofocus: true,
                                     controller: _summaryController,
                                     textCapitalization:
                                         TextCapitalization.sentences,
@@ -103,7 +117,11 @@ class _ApplicationFieldDialogState extends State<ApplicationFieldDialog> {
                                     minLines:
                                         8, //Normal textInputField will be displayed
                                     maxLines: 8, // wh
-                                    // controller: notesController,
+                                    onEditingComplete: () {
+                                      SystemChannels.textInput
+                                          .invokeMethod('TextInput.hide');
+                                      return;
+                                    },
                                     style: const TextStyle(
                                         color: AppColors.black87, fontSize: 14),
                                     decoration: const InputDecoration(
@@ -118,25 +136,52 @@ class _ApplicationFieldDialogState extends State<ApplicationFieldDialog> {
                                 ),
                               ),
                             ),
-                            Padding(
-                                padding: const EdgeInsets.only(top: 20),
-                                child: Text(
-                                  'Actual value(s)',
-                                  style: GoogleFonts.lato(
-                                    color: AppColors.black87,
-                                    fontWeight: FontWeight.w700,
-                                    fontSize: 14,
-                                    letterSpacing: 0.25,
-                                  ),
-                                )),
+                            widget.fieldType != FieldType.file
+                                ? Padding(
+                                    padding: const EdgeInsets.only(top: 20),
+                                    child: Text(
+                                      'Actual value(s)',
+                                      style: GoogleFonts.lato(
+                                        color: AppColors.black87,
+                                        fontWeight: FontWeight.w700,
+                                        fontSize: 14,
+                                        letterSpacing: 0.25,
+                                      ),
+                                    ))
+                                : const Center(),
                             widget.fieldType == FieldType.text ||
                                     widget.fieldType == FieldType.numeric ||
-                                    widget.fieldType == FieldType.email
+                                    widget.fieldType == FieldType.email ||
+                                    widget.fieldType == FieldType.date ||
+                                    widget.fieldType == FieldType.textarea
                                 ? TextQuestion(
                                     fieldType: widget.fieldType,
                                     answerGiven: widget.inspectionValue,
                                     parentAction: saveData)
-                                : const Center(),
+                                : widget.fieldType == FieldType.dropdown
+                                    ? DropdownQuestion(
+                                        items: widget.fieldOptions,
+                                        selectedItem: widget.inspectionValue,
+                                        parentAction: saveData)
+                                    : widget.fieldType == FieldType.radio ||
+                                            widget.fieldType ==
+                                                FieldType.boolean
+                                        ? RadioQuestion(
+                                            items: widget.fieldOptions,
+                                            fieldType: widget.fieldType,
+                                            selectedItem:
+                                                widget.inspectionValue,
+                                            parentAction: saveData)
+                                        : widget.fieldType ==
+                                                    FieldType.checkbox ||
+                                                widget.fieldType ==
+                                                    FieldType.multiselect
+                                            ? MultiSelectQuestion(
+                                                items: widget.fieldOptions,
+                                                selectedItems:
+                                                    widget.inspectionValue,
+                                                parentAction: saveData)
+                                            : const Center(),
                           ]),
                     ),
                     Container(
@@ -148,6 +193,7 @@ class _ApplicationFieldDialogState extends State<ApplicationFieldDialog> {
                               child: OutlinedButton(
                                 onPressed: () {
                                   Navigator.of(context).pop(false);
+                                  _submitData();
                                 },
                                 style: OutlinedButton.styleFrom(
                                   // primary: Colors.white,
diff --git a/lib/widgets/questions/dropdown_question.dart b/lib/widgets/questions/dropdown_question.dart
new file mode 100644
index 0000000..9044e26
--- /dev/null
+++ b/lib/widgets/questions/dropdown_question.dart
@@ -0,0 +1,99 @@
+import 'package:flutter/material.dart';
+import 'package:google_fonts/google_fonts.dart';
+import 'package:smf_mobile/constants/color_constants.dart';
+
+class DropdownQuestion extends StatefulWidget {
+  final List items;
+  final String selectedItem;
+  final ValueChanged<String> parentAction;
+  const DropdownQuestion(
+      {Key? key,
+      required this.items,
+      required this.selectedItem,
+      required this.parentAction})
+      : super(key: key);
+
+  @override
+  _DropdownQuestionState createState() => _DropdownQuestionState();
+}
+
+class _DropdownQuestionState extends State<DropdownQuestion> {
+  String _dropdownValue = '';
+  final List<String> _dropdownItems = [];
+
+  @override
+  void initState() {
+    super.initState();
+    initializeDropdown();
+  }
+
+  void initializeDropdown() {
+    for (var item in widget.items) {
+      _dropdownItems.add(item['value']);
+    }
+    setState(() {
+      _dropdownValue =
+          widget.selectedItem != '' ? widget.selectedItem : _dropdownItems[0];
+    });
+  }
+
+  @override
+  Widget build(BuildContext context) {
+    return Container(
+        margin: const EdgeInsets.only(top: 15),
+        padding: const EdgeInsets.only(left: 10, right: 10),
+        decoration: BoxDecoration(
+          color: Colors.white,
+          border: Border.all(color: AppColors.black16),
+        ),
+        child: DropdownButton<String>(
+          value: _dropdownValue.isNotEmpty ? _dropdownValue : null,
+          icon: const Icon(Icons.arrow_drop_down_outlined),
+          iconSize: 26,
+          elevation: 16,
+          isExpanded: true,
+          style: const TextStyle(color: AppColors.black87),
+          underline: Container(
+            // height: 2,
+            color: AppColors.black08,
+          ),
+          selectedItemBuilder: (BuildContext context) {
+            return _dropdownItems.map<Widget>((String item) {
+              return Row(
+                children: [
+                  Text(
+                    _dropdownValue,
+                    style: GoogleFonts.lato(
+                      color: AppColors.black87,
+                      fontSize: 14.0,
+                      letterSpacing: 0.25,
+                      fontWeight: FontWeight.w400,
+                    ),
+                  ),
+                ],
+              );
+            }).toList();
+          },
+          onChanged: (newValue) {
+            setState(() {
+              _dropdownValue = newValue.toString();
+              widget.parentAction(newValue.toString());
+            });
+          },
+          items: _dropdownItems.map<DropdownMenuItem<String>>((String value) {
+            return DropdownMenuItem<String>(
+              value: value,
+              child: Text(
+                value,
+                style: GoogleFonts.lato(
+                  color: AppColors.black87,
+                  fontSize: 13.0,
+                  letterSpacing: 0.25,
+                  fontWeight: FontWeight.w400,
+                ),
+              ),
+            );
+          }).toList(),
+        ));
+  }
+}
diff --git a/lib/widgets/questions/multi_select_question.dart b/lib/widgets/questions/multi_select_question.dart
index 30fc692..be747e5 100644
--- a/lib/widgets/questions/multi_select_question.dart
+++ b/lib/widgets/questions/multi_select_question.dart
@@ -1,170 +1,107 @@
 import 'package:flutter/material.dart';
 import 'package:google_fonts/google_fonts.dart';
-import 'package:flutter_widget_from_html/flutter_widget_from_html.dart';
-import './../../../../feedback/constants.dart';
+import 'package:smf_mobile/constants/color_constants.dart';
 
 class MultiSelectQuestion extends StatefulWidget {
-  final question;
-  final int currentIndex;
-  final answerGiven;
-  final bool showAnswer;
-  final ValueChanged<Map> parentAction;
-  MultiSelectQuestion(this.question, this.currentIndex, this.answerGiven,
-      this.showAnswer, this.parentAction);
+  final List items;
+  final String selectedItems;
+  final ValueChanged<String> parentAction;
+
+  const MultiSelectQuestion(
+      {Key? key,
+      required this.items,
+      required this.selectedItems,
+      required this.parentAction})
+      : super(key: key);
   @override
   _MultiSelectQuestionQuestionState createState() =>
       _MultiSelectQuestionQuestionState();
 }
 
 class _MultiSelectQuestionQuestionState extends State<MultiSelectQuestion> {
-  Map<int, bool> isChecked = {
-    1: false,
-    2: false,
-    3: false,
-    4: false,
-  };
-  List selectedOptions = [];
-  List<int> _correctAnswer = [];
+  final Map _isChecked = {};
+  List _selectedOptions = [];
+  final List _checkboxItems = [];
 
   @override
   void initState() {
     super.initState();
-    if (widget.answerGiven != null) {
-      selectedOptions = widget.answerGiven;
-      for (int i = 0; i < widget.question['options'].length; i++) {
-        if (selectedOptions
-            .contains(widget.question['options'][i]['optionId'])) {
-          isChecked[i + 1] = true;
-        }
-        if (widget.question['options'][i]['isCorrect']) {
-          _correctAnswer.add(i);
-        }
+    initializeDropdown();
+  }
+
+  void initializeDropdown() {
+    _selectedOptions = widget.selectedItems.split(",");
+    for (int i = 0; i < widget.items.length; i++) {
+      _checkboxItems.add(widget.items[i]['value']);
+      _isChecked[i] =
+          _selectedOptions.contains(widget.items[i]['value']) ? true : false;
+    }
+    List temp = [];
+    for (int i = 0; i < _selectedOptions.length; i++) {
+      if (_checkboxItems.contains(_selectedOptions[i])) {
+        temp.add(_selectedOptions[i]);
       }
     }
+    _selectedOptions = temp;
   }
 
   @override
   Widget build(BuildContext context) {
     return Container(
-      height: MediaQuery.of(context).size.height- 30,
-        padding: const EdgeInsets.all(32),
-        child: Column(
-          crossAxisAlignment: CrossAxisAlignment.start,
-          children: [
-            Container(
-              padding: const EdgeInsets.only(bottom: 15),
-              child: HtmlWidget(
-                widget.question['question'],
-                textStyle: GoogleFonts.lato(
-                  color: FeedbackColors.black87,
-                  fontWeight: FontWeight.w600,
-                  fontSize: 16.0,
-                ),
+      padding: const EdgeInsets.only(top: 10),
+      child: ListView.builder(
+        physics: const NeverScrollableScrollPhysics(),
+        shrinkWrap: true,
+        itemCount: _checkboxItems.length,
+        itemBuilder: (context, index) {
+          return Container(
+            width: MediaQuery.of(context).size.width,
+            // padding: const EdgeInsets.all(15),
+            margin: const EdgeInsets.only(top: 10, bottom: 10),
+            decoration: BoxDecoration(
+              color: _isChecked[index]
+                  ? const Color.fromRGBO(0, 116, 182, 0.05)
+                  : Colors.white,
+              borderRadius: const BorderRadius.all(Radius.circular(4.0)),
+              border: Border.all(
+                color: _isChecked[index]
+                    ? AppColors.primaryBlue
+                    : AppColors.black16,
               ),
             ),
-            ListView.builder(
-              physics: NeverScrollableScrollPhysics(),
-              shrinkWrap: true,
-              itemCount: widget.question['options'].length,
-              itemBuilder: (context, index) {
-                return Container(
-                  width: MediaQuery.of(context).size.width,
-                  // padding: const EdgeInsets.all(15),
-                  margin: const EdgeInsets.only(top: 10, bottom: 10),
-                  decoration: BoxDecoration(
-                    color: isChecked[index + 1] &&
-                            _correctAnswer.contains(index) &&
-                            widget.showAnswer
-                        ? FeedbackColors.positiveLightBg
-                        : isChecked[index + 1] &&
-                                !_correctAnswer.contains(index) &&
-                                widget.showAnswer
-                            ? FeedbackColors.negativeLightBg
-                            : _correctAnswer.contains(index) &&
-                                    widget.showAnswer
-                                ? FeedbackColors.positiveLightBg
-                                : _correctAnswer.contains(index) &&
-                                        widget.showAnswer
-                                    ? FeedbackColors.negativeLightBg
-                                    : isChecked[index + 1] &&
-                                            _correctAnswer.contains(index) &&
-                                            widget.showAnswer
-                                        ? FeedbackColors.positiveLightBg
-                                        : Colors.white,
-                    borderRadius: BorderRadius.all(const Radius.circular(4.0)),
-                    border: Border.all(
-                      color: isChecked[index + 1] &&
-                              _correctAnswer.contains(index) &&
-                              widget.showAnswer
-                          ? FeedbackColors.positiveLight
-                          : isChecked[index + 1] &&
-                                  !_correctAnswer.contains(index) &&
-                                  widget.showAnswer
-                              ? FeedbackColors.negativeLight
-                              : _correctAnswer.contains(index) &&
-                                      widget.showAnswer
-                                  ? FeedbackColors.positiveLight
-                                  : _correctAnswer.contains(index) &&
-                                          widget.showAnswer
-                                      ? FeedbackColors.negativeLight
-                                      : isChecked[index + 1] &&
-                                              _correctAnswer.contains(index) &&
-                                              widget.showAnswer
-                                          ? FeedbackColors.positiveLight
-                                          : isChecked[index + 1]
-                                              ? FeedbackColors.primaryBlue
-                                              : FeedbackColors.black16,
-                    ),
+            child: CheckboxListTile(
+                controlAffinity: ListTileControlAffinity.leading,
+                activeColor: AppColors.primaryBlue,
+                dense: true,
+                title: Text(
+                  _checkboxItems[index],
+                  style: GoogleFonts.lato(
+                    color: AppColors.black87,
+                    fontWeight: FontWeight.w400,
+                    fontSize: 14,
                   ),
-                  child: CheckboxListTile(
-                      controlAffinity: ListTileControlAffinity.leading,
-                      activeColor: _correctAnswer.contains(index) &&
-                              widget.showAnswer
-                          ? FeedbackColors.positiveLight
-                          : !_correctAnswer.contains(index) && widget.showAnswer
-                              ? FeedbackColors.negativeLight
-                              : FeedbackColors.primaryBlue,
-                      dense: true,
-                      //font change
-                      title: Text(
-                        widget.question['options'][index]['text'],
-                        style: GoogleFonts.lato(
-                          color: FeedbackColors.black87,
-                          fontWeight: FontWeight.w400,
-                          fontSize: 14,
-                        ),
-                      ),
-                      value: isChecked[index + 1],
-                      onChanged: (bool value) {
-                        if (!widget.showAnswer) {
-                          if (value) {
-                            if (!selectedOptions.contains(widget
-                                .question['options'][index]['optionId'])) {
-                              selectedOptions.add(widget.question['options']
-                                  [index]['optionId']);
-                            }
-                          } else {
-                            if (selectedOptions.contains(widget
-                                .question['options'][index]['optionId'])) {
-                              selectedOptions.remove(widget.question['options']
-                                  [index]['optionId']);
-                            }
-                          }
-                          widget.parentAction({
-                            'index': widget.question['questionId'],
-                            'isCorrect': widget.question['options'][index]
-                                ['isCorrect'],
-                            'value': selectedOptions
-                          });
-                          setState(() {
-                            isChecked[index + 1] = value;
-                          });
-                        }
-                      }),
-                );
-              },
-            ),
-          ],
-        ));
+                ),
+                value: _isChecked[index],
+                onChanged: (value) {
+                  setState(() {
+                    _isChecked[index] = value;
+
+                    if (_isChecked[index]) {
+                      _selectedOptions.add(_checkboxItems[index]);
+                    } else {
+                      int keyIndex =
+                          _selectedOptions.indexOf(_checkboxItems[index]);
+                      if (keyIndex >= 0) {
+                        _selectedOptions.removeAt(keyIndex);
+                      }
+                    }
+                  });
+                  // print(_selectedOptions);
+                  widget.parentAction(_selectedOptions.join(","));
+                }),
+          );
+        },
+      ),
+    );
   }
 }
diff --git a/lib/widgets/questions/radio_question.dart b/lib/widgets/questions/radio_question.dart
new file mode 100644
index 0000000..83e5c0c
--- /dev/null
+++ b/lib/widgets/questions/radio_question.dart
@@ -0,0 +1,98 @@
+import 'package:flutter/material.dart';
+import 'package:google_fonts/google_fonts.dart';
+import 'package:smf_mobile/constants/app_constants.dart';
+import 'package:smf_mobile/constants/color_constants.dart';
+
+class RadioQuestion extends StatefulWidget {
+  final List items;
+  final String fieldType;
+  final String selectedItem;
+  final ValueChanged<String> parentAction;
+
+  const RadioQuestion(
+      {Key? key,
+      required this.items,
+      required this.fieldType,
+      required this.selectedItem,
+      required this.parentAction})
+      : super(key: key);
+  @override
+  _RadioQuestionState createState() => _RadioQuestionState();
+}
+
+class _RadioQuestionState extends State<RadioQuestion> {
+  int _radioValue = 0;
+  List<String> _radioItems = [];
+
+  @override
+  void initState() {
+    super.initState();
+    initializeDropdown();
+  }
+
+  void initializeDropdown() {
+    if (widget.fieldType == FieldType.boolean) {
+      _radioItems = ['True', 'False'];
+    } else {
+      for (var item in widget.items) {
+        _radioItems.add(item['value']);
+      }
+    }
+    setState(() {
+      _radioValue = widget.selectedItem != ''
+          ? widget.items.indexOf(widget.selectedItem)
+          : 0;
+    });
+    // if (widget.selectedItem.isEmpty) {
+    //   widget.parentAction(_radioItems[_radioValue]);
+    // }
+  }
+
+  @override
+  Widget build(BuildContext context) {
+    return Container(
+      padding: const EdgeInsets.only(top: 15),
+      child: ListView.builder(
+        physics: const NeverScrollableScrollPhysics(),
+        shrinkWrap: true,
+        itemCount: _radioItems.length,
+        itemBuilder: (context, index) {
+          return Container(
+              width: MediaQuery.of(context).size.width,
+              // padding: const EdgeInsets.all(15),
+              margin: const EdgeInsets.only(top: 10, bottom: 10),
+              decoration: BoxDecoration(
+                color: _radioValue == index
+                    ? const Color.fromRGBO(0, 116, 182, 0.05)
+                    : Colors.white,
+                borderRadius: const BorderRadius.all(Radius.circular(4.0)),
+                border: Border.all(
+                    color: _radioValue == index
+                        ? AppColors.primaryBlue
+                        : AppColors.black16),
+              ),
+              child: RadioListTile(
+                groupValue: _radioValue,
+                title: Text(
+                  _radioItems[index],
+                  style: GoogleFonts.lato(
+                    color: AppColors.black87,
+                    fontWeight: FontWeight.w400,
+                    fontSize: 14,
+                  ),
+                ),
+                value: index,
+                onChanged: (value) {
+                  int selectedIndex = int.parse(value.toString());
+                  setState(() {
+                    _radioValue = selectedIndex;
+                  });
+                  // print(value);
+                  widget.parentAction(_radioItems[selectedIndex]);
+                },
+              ));
+        },
+      ),
+    );
+  }
+}
diff --git a/lib/widgets/questions/single_answer_question.dart b/lib/widgets/questions/single_answer_question.dart
deleted file mode 100644
index fe4f67d..0000000
--- a/lib/widgets/questions/single_answer_question.dart
+++ /dev/null
@@ -1,87 +0,0 @@
-import 'package:flutter/material.dart';
-import './../../../../models/_models/assessment_question_model.dart';
-import 'package:google_fonts/google_fonts.dart';
-import './../../../../constants/index.dart';
-
-class SingleAnswerQuestion extends StatefulWidget {
-  final AssessmentQuestion question;
-  SingleAnswerQuestion(this.question);
-  @override
-  _SingleAnswerQuestionState createState() => _SingleAnswerQuestionState();
-}
-
-class _SingleAnswerQuestionState extends State<SingleAnswerQuestion> {
-  int _radioValue = 0;
-
-  @override
-  Widget build(BuildContext context) {
-    return Container(
-        padding: const EdgeInsets.all(32),
-        child: Column(
-          crossAxisAlignment: CrossAxisAlignment.start,
-          children: [
-            Container(
-              padding: const EdgeInsets.only(bottom: 15),
-              child: Text(
-                'Q' + widget.question.id.toString() + ' of 3',
-                style: GoogleFonts.lato(
-                  color: AppColors.greys60,
-                  fontWeight: FontWeight.w400,
-                  fontSize: 14.0,
-                ),
-              ),
-            ),
-            Container(
-              padding: const EdgeInsets.only(bottom: 15),
-              child: Text(
-                widget.question.question,
-                style: GoogleFonts.lato(
-                  color: AppColors.greys87,
-                  fontWeight: FontWeight.w600,
-                  fontSize: 16.0,
-                ),
-              ),
-            ),
-            ListView.builder(
-              physics: NeverScrollableScrollPhysics(),
-              shrinkWrap: true,
-              itemCount: widget.question.options.length,
-              itemBuilder: (context, index) {
-                return Container(
-                    width: MediaQuery.of(context).size.width,
-                    // padding: const EdgeInsets.all(15),
-                    margin: const EdgeInsets.only(top: 10, bottom: 10),
-                    decoration: BoxDecoration(
-                      color: _radioValue == index + 1
-                          ? Color.fromRGBO(0, 116, 182, 0.05)
-                          : Colors.white,
-                      borderRadius:
-                          BorderRadius.all(const Radius.circular(4.0)),
-                      border: Border.all(
-                          color: _radioValue == index + 1
-                              ? AppColors.primaryThree
-                              : AppColors.grey16),
-                    ),
-                    child: RadioListTile(
-                      groupValue: _radioValue,
-                      title: Text(
-                        widget.question.options[index],
-                        style: GoogleFonts.lato(
-                          color: AppColors.greys87,
-                          fontWeight: FontWeight.w400,
-                          fontSize: 14,
-                        ),
-                      ),
-                      value: index + 1,
-                      onChanged: (value) {
-                        setState(() {
-                          _radioValue = value;
-                        });
-                      },
-                    ));
-              },
-            ),
-          ],
-        ));
-  }
-}
diff --git a/lib/widgets/questions/text_question.dart b/lib/widgets/questions/text_question.dart
index 049cbc4..6a7ccb7 100644
--- a/lib/widgets/questions/text_question.dart
+++ b/lib/widgets/questions/text_question.dart
@@ -36,51 +36,58 @@ class _TextQuestionState extends State<TextQuestion> {
   @override
   Widget build(BuildContext context) {
     return Container(
-        width: MediaQuery.of(context).size.width,
-        margin: const EdgeInsets.only(top: 15, bottom: 20),
-        decoration: BoxDecoration(
-          color: Colors.white,
-          borderRadius: BorderRadius.circular(4),
-          border: Border.all(color: AppColors.black16),
-        ),
-        child: Focus(
-          child: TextFormField(
-            onEditingComplete: () {
-              widget.parentAction(_textController.text);
-              SystemChannels.textInput.invokeMethod('TextInput.hide');
-              return;
-            },
-            controller: _textController,
-            style: GoogleFonts.lato(fontSize: 14.0),
-            textInputAction: TextInputAction.done,
-            textCapitalization: TextCapitalization.sentences,
-            keyboardType: widget.fieldType == FieldType.numeric
-                ? TextInputType.number
-                : widget.fieldType == FieldType.email
-                    ? TextInputType.emailAddress
-                    : TextInputType.name,
-            decoration: InputDecoration(
-              contentPadding: const EdgeInsets.fromLTRB(10.0, 0.0, 10.0, 0.0),
-              // border: OutlineInputBorder(
-              //     borderSide: BorderSide(color: AppColors.grey16)),
-              // enabledBorder: const UnderlineInputBorder(
-              //   borderSide: BorderSide(color: AppColors.black16),
-              // ),
-              // focusedBorder: const UnderlineInputBorder(
-              //   borderSide: BorderSide(color: AppColors.primaryBlue),
-              // ),
-              border: InputBorder.none,
-              hintText: 'Type here',
-              hintStyle: GoogleFonts.lato(
-                  color: AppColors.black40,
-                  fontSize: 14.0,
-                  fontWeight: FontWeight.w400),
-              // focusedBorder: OutlineInputBorder(
-              //   borderSide: const BorderSide(
-              //       color: AppColors.primaryThree, width: 1.0),
-              // ),
-            ),
+      width: MediaQuery.of(context).size.width,
+      margin: const EdgeInsets.only(top: 15, bottom: 20),
+      decoration: BoxDecoration(
+        color: Colors.white,
+        borderRadius: BorderRadius.circular(4),
+        border: Border.all(color: AppColors.black16),
+      ),
+      child: Focus(
+        child: TextFormField(
+          onEditingComplete: () {
+            // widget.parentAction(_textController.text.toString());
+            SystemChannels.textInput.invokeMethod('TextInput.hide');
+            // return;
+          },
+          controller: _textController,
+          style: GoogleFonts.lato(fontSize: 14.0),
+          textInputAction: TextInputAction.done,
+          textCapitalization: TextCapitalization.sentences,
+          keyboardType: widget.fieldType == FieldType.numeric ||
+                  widget.fieldType == FieldType.date
+              ? TextInputType.number
+              : widget.fieldType == FieldType.email
+                  ? TextInputType.emailAddress
+                  : TextInputType.name,
+          decoration: InputDecoration(
+            contentPadding: const EdgeInsets.fromLTRB(10.0, 0.0, 10.0, 0.0),
+            // border: OutlineInputBorder(
+            //     borderSide: BorderSide(color: AppColors.grey16)),
+            // enabledBorder: const UnderlineInputBorder(
+            //   borderSide: BorderSide(color: AppColors.black16),
+            // ),
+            // focusedBorder: const UnderlineInputBorder(
+            //   borderSide: BorderSide(color: AppColors.primaryBlue),
+            // ),
+            border: InputBorder.none,
+            hintText: 'Type here',
+            hintStyle: GoogleFonts.lato(
+                color: AppColors.black40,
+                fontSize: 14.0,
+                fontWeight: FontWeight.w400),
+            // focusedBorder: OutlineInputBorder(
+            //   borderSide: const BorderSide(
+            //       color: AppColors.primaryThree, width: 1.0),
+            // ),
           ),
-        ));
+        ),
+        onFocusChange: (value) {
+          if (!value) {
+            widget.parentAction(_textController.text.toString());
+          }
+        },
+      ),
+    );
   }
 }
diff --git a/pubspec.lock b/pubspec.lock
index c6ffcc7..bac53e3 100644
--- a/pubspec.lock
+++ b/pubspec.lock
@@ -78,6 +78,13 @@ packages:
       url: "https://pub.dartlang.org"
     source: hosted
     version: "1.0.4"
+  dbus:
+    dependency: transitive
+    description:
+      name: dbus
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "0.7.1"
   fake_async:
     dependency: transitive
     description:
@@ -99,6 +106,48 @@ packages:
       url: "https://pub.dartlang.org"
     source: hosted
     version: "6.1.2"
+  firebase_core:
+    dependency: "direct main"
+    description:
+      name: firebase_core
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "1.12.0"
+  firebase_core_platform_interface:
+    dependency: transitive
+    description:
+      name: firebase_core_platform_interface
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "4.2.4"
+  firebase_core_web:
+    dependency: transitive
+    description:
+      name: firebase_core_web
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "1.5.4"
+  firebase_messaging:
+    dependency: "direct main"
+    description:
+      name: firebase_messaging
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "11.2.6"
+  firebase_messaging_platform_interface:
+    dependency: transitive
+    description:
+      name: firebase_messaging_platform_interface
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "3.1.6"
+  firebase_messaging_web:
+    dependency: transitive
+    description:
+      name: firebase_messaging_web
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "2.2.7"
   flutter:
     dependency: "direct main"
     description: flutter
@@ -118,6 +167,27 @@ packages:
       url: "https://pub.dartlang.org"
     source: hosted
     version: "1.0.4"
+  flutter_local_notifications:
+    dependency: "direct main"
+    description:
+      name: flutter_local_notifications
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "9.3.2"
+  flutter_local_notifications_linux:
+    dependency: transitive
+    description:
+      name: flutter_local_notifications_linux
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "0.4.2"
+  flutter_local_notifications_platform_interface:
+    dependency: transitive
+    description:
+      name: flutter_local_notifications_platform_interface
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "5.0.0"
   flutter_localizations:
     dependency: "direct main"
     description: flutter
@@ -411,6 +481,13 @@ packages:
       url: "https://pub.dartlang.org"
     source: hosted
     version: "0.4.8"
+  timezone:
+    dependency: transitive
+    description:
+      name: timezone
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "0.8.0"
   typed_data:
     dependency: transitive
     description:
@@ -418,6 +495,13 @@ packages:
       url: "https://pub.dartlang.org"
     source: hosted
     version: "1.3.0"
+  unique_identifier:
+    dependency: "direct main"
+    description:
+      name: unique_identifier
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "0.2.2"
   vector_math:
     dependency: transitive
     description:
diff --git a/pubspec.yaml b/pubspec.yaml
index 9f80831..c936985 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -44,6 +44,10 @@ dependencies:
   fluttertoast: ^8.0.8
   jwt_decoder: ^2.0.1
   intl: ^0.17.0
+  firebase_messaging: ^11.0.0
+  firebase_core: ^1.12.0
+  flutter_local_notifications: ^9.3.2
+  unique_identifier: ^0.2.2
 
 dev_dependencies:
   flutter_test:
-- 
GitLab