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.
153 lines
5.1 KiB
Swift
153 lines
5.1 KiB
Swift
//
|
|
// BlueGpsView.swift
|
|
// Runner
|
|
//
|
|
// Created by Penguin.
|
|
//
|
|
|
|
import Foundation
|
|
import UIKit
|
|
import Flutter
|
|
import PenNavUI
|
|
|
|
import Foundation
|
|
import Flutter
|
|
import UIKit
|
|
|
|
/**
|
|
* A custom Flutter platform view for displaying Penguin UI components.
|
|
* This class integrates with the Penguin navigation SDK and handles UI events.
|
|
*/
|
|
class PenguinView: NSObject, FlutterPlatformView, PIEventsDelegate, PenNavInitializationDelegate {
|
|
|
|
// The main view displayed within the platform view
|
|
private var _view: UIView
|
|
private var model: PenguinModel?
|
|
|
|
|
|
/**
|
|
* Initializes the PenguinView with the provided parameters.
|
|
*
|
|
* @param frame The frame of the view, specifying its size and position.
|
|
* @param viewId A unique identifier for this view instance.
|
|
* @param args Optional arguments provided for creating the view.
|
|
* @param messenger The [FlutterBinaryMessenger] used for communication with Dart.
|
|
*/
|
|
init(
|
|
frame: CGRect,
|
|
viewIdentifier viewId: Int64,
|
|
arguments args: Any?,
|
|
binaryMessenger messenger: FlutterBinaryMessenger?
|
|
) {
|
|
_view = UIView()
|
|
super.init()
|
|
|
|
// Get the screen's width and height to set the view's frame
|
|
let screenWidth = UIScreen.main.bounds.width
|
|
let screenHeight = UIScreen.main.bounds.height
|
|
|
|
// Uncomment to set the background color of the view
|
|
// _view.backgroundColor = UIColor.red
|
|
|
|
// Set the frame of the view to cover the entire screen
|
|
_view.frame = CGRect(x: 0, y: 0, width: screenWidth, height: screenHeight)
|
|
print("========Inside Penguin View ========")
|
|
print(args)
|
|
guard let arguments = args as? [String: Any] else {
|
|
print("Error: Arguments are not in the expected format.")
|
|
return
|
|
}
|
|
print("===== i got tha Args=======")
|
|
|
|
// Initialize the model from the arguments
|
|
if let penguinModel = PenguinModel(from: arguments) {
|
|
self.model = penguinModel
|
|
initPenguin(args: penguinModel)
|
|
} else {
|
|
print("Error: Failed to initialize PenguinModel from arguments")
|
|
}
|
|
// Initialize the Penguin SDK with required configurations
|
|
// initPenguin( arguments: args)
|
|
}
|
|
|
|
/**
|
|
* Initializes the Penguin SDK with custom configuration settings.
|
|
*/
|
|
func initPenguin(args: PenguinModel) {
|
|
// Set the initialization delegate to handle SDK initialization events
|
|
PenNavUIManager.shared.initializationDelegate = self
|
|
// Configure the Penguin SDK with necessary parameters
|
|
PenNavUIManager.shared
|
|
.setClientKey(args.clientKey)
|
|
.setClientID(args.clientID)
|
|
.setUsername(args.username)
|
|
.setSimulationModeEnabled(isEnable: args.isSimulationModeEnabled)
|
|
.setBaseURL(dataURL: args.dataURL, positionURL: args.baseURL)
|
|
.setServiceName(dataServiceName: args.dataServiceName, positionServiceName: args.positionServiceName)
|
|
.setIsShowUserName(args.isShowUserName)
|
|
.setIsUpdateUserLocationSmoothly(args.isUpdateUserLocationSmoothly)
|
|
.setEnableReportIssue(enable: args.isEnableReportIssue)
|
|
.setLanguage(args.languageCode)
|
|
.build()
|
|
}
|
|
|
|
/**
|
|
* Returns the main view associated with this platform view.
|
|
*
|
|
* @return The UIView instance that represents this platform view.
|
|
*/
|
|
func view() -> UIView {
|
|
return _view
|
|
}
|
|
|
|
// MARK: - PIEventsDelegate Methods
|
|
|
|
/**
|
|
* Called when the Penguin UI is dismissed.
|
|
*/
|
|
func onPenNavUIDismiss() {
|
|
// Handle UI dismissal if needed
|
|
print("====== onPenNavUIDismiss =========")
|
|
}
|
|
|
|
/**
|
|
* Called when a report issue is generated.
|
|
*
|
|
* @param issue The type of issue reported.
|
|
*/
|
|
func onReportIssue(_ issue: PenNavUI.IssueType) {
|
|
// Handle report issue events if needed
|
|
print("====== onReportIssueError =========")
|
|
}
|
|
|
|
/**
|
|
* Called when the Penguin UI setup is successful.
|
|
*/
|
|
func onPenNavSuccess() {
|
|
// Obtain the FlutterViewController instance
|
|
let controller: FlutterViewController = UIApplication.shared.windows.first?.rootViewController as! FlutterViewController
|
|
|
|
// Set the events delegate to handle SDK events
|
|
PenNavUIManager.shared.eventsDelegate = self
|
|
|
|
// Present the Penguin UI on top of the Flutter view controller
|
|
PenNavUIManager.shared.present(root: controller, view: _view)
|
|
}
|
|
|
|
/**
|
|
* Called when there is an initialization error with the Penguin UI.
|
|
*
|
|
* @param errorType The type of initialization error.
|
|
* @param errorDescription A description of the error.
|
|
*/
|
|
func onPenNavInitializationError(errorType: PenNavUI.PenNavUIError, errorDescription: String) {
|
|
// Handle initialization errors if needed
|
|
|
|
print("onPenNavInitializationErrorType: \(errorType.rawValue)")
|
|
print("onPenNavInitializationError: \(errorDescription)")
|
|
|
|
}
|
|
|
|
|
|
}
|