You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
	
	
		
			106 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			Dart
		
	
		
		
			
		
	
	
			106 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			Dart
		
	
| 
								 
											4 months ago
										 
									 | 
							
								import 'package:flutter/services.dart';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class PenguinMethodChannel {
							 | 
						||
| 
								 | 
							
								  static const MethodChannel _channel = MethodChannel('launch_penguin_ui');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  Future<Uint8List> loadGif() async {
							 | 
						||
| 
								 | 
							
								    return await rootBundle.load("assets/images/progress-loading-red-crop-1.gif").then((data) => data.buffer.asUint8List());
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  Future<void> launch(String storyboardName, String languageCode, String username, {NavigationClinicDetails? details}) async {
							 | 
						||
| 
								 | 
							
								    Uint8List image = await loadGif();
							 | 
						||
| 
								 | 
							
								    try {
							 | 
						||
| 
								 | 
							
								      await _channel.invokeMethod('launchPenguin', {
							 | 
						||
| 
								 | 
							
								        "storyboardName": storyboardName,
							 | 
						||
| 
								 | 
							
								        "baseURL": "https://prod.hmg.nav.penguinin.com",
							 | 
						||
| 
								 | 
							
								        // "dataURL": "https://hmg.nav.penguinin.com",
							 | 
						||
| 
								 | 
							
								        // "positionURL": "https://hmg.nav.penguinin.com",
							 | 
						||
| 
								 | 
							
								        // "dataURL": "https://hmg-v33.local.penguinin.com",
							 | 
						||
| 
								 | 
							
								        // "positionURL": "https://hmg-v33.local.penguinin.com",
							 | 
						||
| 
								 | 
							
								        "dataURL": "https://prod.hmg.nav.penguinin.com",
							 | 
						||
| 
								 | 
							
								        "positionURL": "https://prod.hmg.nav.penguinin.com",
							 | 
						||
| 
								 | 
							
								        "dataServiceName": "api",
							 | 
						||
| 
								 | 
							
								        "positionServiceName": "pe",
							 | 
						||
| 
								 | 
							
								        "clientID": "HMG",
							 | 
						||
| 
								 | 
							
								        // "username": "Haroon",
							 | 
						||
| 
								 | 
							
								        "username": username,
							 | 
						||
| 
								 | 
							
								        "isSimulationModeEnabled": false,
							 | 
						||
| 
								 | 
							
								        "isShowUserName": false,
							 | 
						||
| 
								 | 
							
								        "isUpdateUserLocationSmoothly": true,
							 | 
						||
| 
								 | 
							
								        "isEnableReportIssue": true,
							 | 
						||
| 
								 | 
							
								        "languageCode": languageCode,
							 | 
						||
| 
								 | 
							
								        "clientKey": "UGVuZ3VpbklOX1Blbk5hdl9QSUY=",
							 | 
						||
| 
								 | 
							
								        "mapBoxKey": "sk.eyJ1IjoicndhaWQiLCJhIjoiY2x6NWo0bTMzMWZodzJrcGZpemYzc3Z4dSJ9.uSSZuwNSGCcCdPAiORECmg",
							 | 
						||
| 
								 | 
							
								        "clinicID": details?.clinicId ?? "",
							 | 
						||
| 
								 | 
							
								        // "clinicID": "108", // 46 ,49, 133
							 | 
						||
| 
								 | 
							
								        "patientID": details?.patientId ?? "",
							 | 
						||
| 
								 | 
							
								        "projectID": details?.projectId ?? "",
							 | 
						||
| 
								 | 
							
								        "loaderImage": image,
							 | 
						||
| 
								 | 
							
								      });
							 | 
						||
| 
								 | 
							
								    } on PlatformException catch (e) {
							 | 
						||
| 
								 | 
							
								      print("Failed to launch PenguinIn: '${e.message}'.");
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  void setMethodCallHandler(){
							 | 
						||
| 
								 | 
							
								    _channel.setMethodCallHandler((MethodCall call) async {
							 | 
						||
| 
								 | 
							
								      try {
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        print(call.method);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        switch (call.method) {
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								          case PenguinMethodNames.onPenNavInitializationError:
							 | 
						||
| 
								 | 
							
								            _handleInitializationError(call.arguments); // Handle onPenNavInitializationError errors.
							 | 
						||
| 
								 | 
							
								            break;
							 | 
						||
| 
								 | 
							
								          case PenguinMethodNames.onPenNavUIDismiss:
							 | 
						||
| 
								 | 
							
								            //todo handle pen dismissable
							 | 
						||
| 
								 | 
							
								            // _handlePenNavUIDismiss(); // Handle UI dismissal event.
							 | 
						||
| 
								 | 
							
								            break;
							 | 
						||
| 
								 | 
							
								          case PenguinMethodNames.onReportIssue:
							 | 
						||
| 
								 | 
							
								             // Handle the report issue event.
							 | 
						||
| 
								 | 
							
								            _handleInitializationError(call.arguments);
							 | 
						||
| 
								 | 
							
								            break;
							 | 
						||
| 
								 | 
							
								          default:
							 | 
						||
| 
								 | 
							
								            _handleUnknownMethod(call.method); // Handle unknown method calls.
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								      } catch (e) {
							 | 
						||
| 
								 | 
							
								        print("Error handling method call '${call.method}': $e");
							 | 
						||
| 
								 | 
							
								        // Optionally, log this error to an external service
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								    });
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								  static void _handleUnknownMethod(String method) {
							 | 
						||
| 
								 | 
							
								    print("Unknown method: $method");
							 | 
						||
| 
								 | 
							
								    // Optionally, handle this unknown method case, such as reporting or ignoring it
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  static void _handleInitializationError(Map<dynamic, dynamic> error) {
							 | 
						||
| 
								 | 
							
								    final type = error['type'] as String?;
							 | 
						||
| 
								 | 
							
								    final description = error['description'] as String?;
							 | 
						||
| 
								 | 
							
								    print("Initialization Error: ${type ?? 'Unknown Type'}, ${description ?? 'No Description'}");
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								// Define constants for method names
							 | 
						||
| 
								 | 
							
								class PenguinMethodNames {
							 | 
						||
| 
								 | 
							
								  static const String showPenguinUI = 'showPenguinUI';
							 | 
						||
| 
								 | 
							
								  static const String openSharedLocation = 'openSharedLocation';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  // ---- Handler Method
							 | 
						||
| 
								 | 
							
								  static const String onPenNavSuccess = 'onPenNavSuccess'; // Tested Android,iOS
							 | 
						||
| 
								 | 
							
								  static const String onPenNavInitializationError = 'onPenNavInitializationError'; // Tested Android,iOS
							 | 
						||
| 
								 | 
							
								  static const String onPenNavUIDismiss = 'onPenNavUIDismiss'; //Tested Android,iOS
							 | 
						||
| 
								 | 
							
								  static const String onReportIssue = 'onReportIssue'; // Tested Android,iOS
							 | 
						||
| 
								 | 
							
								  static const String onLocationOffCampus = 'onLocationOffCampus';  // Tested iOS,Android
							 | 
						||
| 
								 | 
							
								  static const String navigateToPOI = 'navigateToPOI'; // Tested Android,iOS
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class NavigationClinicDetails {
							 | 
						||
| 
								 | 
							
								  String? clinicId;
							 | 
						||
| 
								 | 
							
								  String? patientId;
							 | 
						||
| 
								 | 
							
								  String? projectId;
							 | 
						||
| 
								 | 
							
								}
							 |