Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

The thought process is to keep the complete business logic in Flutter (Dart files),

only for the below functions, we should reach to platform-specific code:

  1. Data fetch from & store to DB (we have to live with this until the August release),

  2. crypto functions - enc, dec, trust validations

  3. SDK calls for bio matches/dedupe

  4. Creating Registration packet


  • State management with providers

Image RemovedImage Added

  • Separating platform-specific code with conditional imports (During the build process, Flutter analyzes the conditional imports and includes only the necessary platform-specific files based on the current platform. The platform-specific files are then compiled into the final app bundle)

Eg: https://stackoverflow.com/questions/58710226/how-to-import-platform-specific-dependency-in-flutter-dart-combine-web-with-an

screens(Only UI) ---------------- providers(state-mgmt & Business-logic) -----------may or may not--------- platform-specific code

Project structure:

Code Block
languagenone
project/
  lib/
    providers/
      auth_provider.dart
    models/
      user_detail.dart
    screens/
      home
        dashboard.dart
        settings.dart
        home.dart
      onboard
        onboard.dart
      registration
        language_selection.dart
        registration.dart
        registration_listing.dart
        preview.dart
        acknowledgment.dart      
      auth
        pwd_auth.dart
        finger_auth.dart
        iris_auth.dart
        face_auth.dart
    widgets/
       checkbox.dart
       radio_button.dart
       textbox.dart
       dropdown.dart
    utils/
      constants.dart
      file_storage.dart
    validators/
      regex.dart
      mvel.dart
    platform_spi/
      auth_service.dart
      user_service.dart
      registration_service.dart
    platform_android/
      auth_service_impl.dart
      user_service_impl.dart
      registration_service_impl.dart
    platform_web/
      auth_service_impl.dart
      user_service_impl.dart
      registration_service_impl.dart

    main.dart

For each scenario, here we are listing down the possible method channel calls to platform-specific code with the expected response DTO structure.

Code Block
breakoutModewide
         View(TODO) ---------- channels ------------- Pigeon ------------------  Platform specific code

SCENE:on_launch
				 1. ------------------------ getCenterMachineDetails() ------------------->
														ResponseWrapper ->
													{
														response : {
														  centerName
														  centerId
														  centerStatus
														  machineName
														  machineId
														  machineStatus
														},
														errorCode : ""
													}					
													"NOT_INITIALIZED"


				//DO machine status check
				//DO center status check
				
				2. ------------------------ getGlobalParams() ------------------->

						load all the global params (key-value pairs) in the context.


SCENE:Login	  user_validation -------------------getUserDetail(userId)------------------------------->
												ResponseWrapper -> 
												{
													response : { 
													  userId
													  is_active
													  is_locked
													  is_onboarded
													  centerName
													  centerId
													  machineName
													  machineId
													  failedAttempts
													  authMethods: []
													},
													errorCode : ""
												}	

		//DO user validation 												 

	    			
		online:	---------------------------------------- auth endpoint call -----------------------------> enc(response)
				<---------------------------------------------------------------------------------- decrypted(response)
				//validate auth token (signature check & expiry & aud & iss check)
				//parse token ----------------------------- saveUserDetail(userId)
															{
															username
															password(plain)
															roles
															auth-token
															refresh-token
															}


		offline:
				credential_check ------------(offline) getStoredCredential(userId, authMethod)------------------->

									    						ResponseWrapper -> 
																	{
																		response : [{ 
																		  credential : <string>
																		  salt: <string>
																		  type: <string>
																		  subType: <string>										
																		}],
																		errorCode : ""
																	}
				//Do pwd comparision

		//store user logged in details in
				SharedPreferences

NAVIGATION:Load onboard page only if valid user session details found in sharedPreferences & is_onboarded is false
NAVIGATION:Load homepage only if valid user session details found in sharedPreferences
				
SCENE:Sync 
            only when ONLINE and valid auth-token session (either OPERATOR/SUPERVISOR):
                policy_certificate_sync ------------------------------------------------------------------ API call  
                                                                                                      store in DB
                         <----------------------------------------------- ResponseWrapper {  response: <status>, errorCode: "" }
                configuration_sync ------------------------------------------------------------------ API call  
                                                                                                      store in DB
                         <----------------------------------------------- ResponseWrapper {  response: <status>, errorCode: "" }
                schema_sync ------------------------------------------------------------------ API call  
                                                                                                      store in DB
                         <----------------------------------------------- ResponseWrapper {  response: <status>, errorCode: "" }
                masterdata_sync------------------------------------------------------------------ API call  
                                                                                                      store in DB
                         <----------------------------------------------- ResponseWrapper {  response: <status>, errorCode: "" }
                userdetails_sync------------------------------------------------------------------ API call  
                                                                                                      store in DB
                         <----------------------------------------------- ResponseWrapper {  response: <status>, errorCode: "" }
                trust_certs_sync------------------------------------------------------------------ API call  
                                                                                                      store in DB
                         <----------------------------------------------- ResponseWrapper {  response: <status>, errorCode: "" }
                prereg_data_sync------------------------------------------------------------------ API call  
                                                                                                      store in DB
                         <----------------------------------------------- ResponseWrapper {  response: <status>, errorCode: "" }
              //Handle progress & errors
                                           
            offline: Machine is offline
				//DO nothing
				

SCENE:Registration
        // TODO