Skip to content

Commit 65b330c

Browse files
author
Hamed Rezaee
committed
resolve survicate delegate issue in ios
1 parent ebc5299 commit 65b330c

File tree

1 file changed

+35
-11
lines changed

1 file changed

+35
-11
lines changed

ios/Classes/SwiftSurvicateFlutterSdkPlugin.swift

Lines changed: 35 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,20 +3,25 @@ import UIKit
33

44
import Survicate
55

6-
public class SwiftSurvicateFlutterSdkPlugin: NSObject, FlutterPlugin, SurvicateDelegate {
7-
6+
public class SwiftSurvicateFlutterSdkPlugin: NSObject, FlutterPlugin {
7+
private var survicateDelegate: FlutterSurvicateDelegate?
8+
89
class FlutterChannel: NSObject {
910
static let shared: FlutterChannel = FlutterChannel()
11+
1012
var channel: FlutterMethodChannel?
13+
1114
private override init() {}
1215
}
1316

1417
public static func register(with registrar: FlutterPluginRegistrar) {
1518
let channel = FlutterMethodChannel(name: "survicate_flutter_sdk", binaryMessenger: registrar.messenger())
1619
let instance = SwiftSurvicateFlutterSdkPlugin()
20+
21+
instance.survicateDelegate = FlutterSurvicateDelegate(channel)
1722
registrar.addMethodCallDelegate(instance, channel: channel)
18-
1923
FlutterChannel.shared.channel = channel
24+
2025
Survicate.shared.initialize()
2126
}
2227

@@ -25,18 +30,23 @@ public class SwiftSurvicateFlutterSdkPlugin: NSObject, FlutterPlugin, SurvicateD
2530

2631
if (call.method == "invokeEvent") {
2732
let eventName = arguments["eventName"] ?? ""
33+
2834
Survicate.shared.invokeEvent(name: eventName)
35+
2936
result(true)
3037
} else if (call.method == "enterScreen") {
3138
let screenName = arguments["screenName"] ?? ""
39+
3240
Survicate.shared.enterScreen(value: screenName)
41+
3342
result(true)
3443
} else if (call.method == "leaveScreen") {
3544
let screenName = arguments["screenName"] ?? ""
45+
3646
Survicate.shared.leaveScreen(value: screenName)
47+
3748
result(true)
3849
} else if (call.method == "setUserTraits") {
39-
4050
var traits = [UserTrait]()
4151

4252
for (key, value) in arguments {
@@ -48,45 +58,59 @@ public class SwiftSurvicateFlutterSdkPlugin: NSObject, FlutterPlugin, SurvicateD
4858
result(true)
4959
} else if (call.method == "reset") {
5060
Survicate.shared.reset()
61+
5162
result(true)
5263
} else if (call.method == "registerSurveyListeners") {
53-
Survicate.shared.delegate = self
64+
Survicate.shared.delegate = survicateDelegate
65+
5466
result(true)
5567
} else if (call.method == "unregisterSurveyListeners") {
5668
Survicate.shared.delegate = nil
69+
5770
result(true)
58-
}else {
71+
} else {
5972
result(FlutterMethodNotImplemented)
6073
}
6174
}
75+
}
76+
77+
class FlutterSurvicateDelegate : SurvicateDelegate {
78+
let channel: FlutterMethodChannel?
79+
80+
init(_ channel: FlutterMethodChannel) {
81+
self.channel = channel
82+
}
6283

6384
public func surveyDisplayed(surveyId: String) {
6485
let arguments = ["surveyId": surveyId]
86+
6587
DispatchQueue.main.async {
66-
FlutterChannel.shared.channel?.invokeMethod("onSurveyDisplayed", arguments: arguments)
88+
self.channel?.invokeMethod("onSurveyDisplayed", arguments: arguments)
6789
}
6890
}
6991

7092
public func questionAnswered(surveyId: String, questionId: Int, answer: SurvicateAnswer) {
7193
let answerMap = ["type": answer.type as Any, "id": answer.id as Any , "ids": answer.ids as Any , "value" : answer.value as Any] as [String : Any]
72-
7394
let arguments = ["surveyId": surveyId, "questionId": questionId, "answer": answerMap] as [String : Any]
95+
7496
DispatchQueue.main.async {
75-
FlutterChannel.shared.channel?.invokeMethod("onQuestionAnswered", arguments: arguments)
97+
self.channel?.invokeMethod("onQuestionAnswered", arguments: arguments)
7698
}
7799
}
78100

79101
public func surveyCompleted(surveyId: String) {
80102
let arguments = ["surveyId": surveyId]
103+
81104
DispatchQueue.main.async {
82-
FlutterChannel.shared.channel?.invokeMethod("onSurveyCompleted", arguments: arguments)
105+
self.channel?.invokeMethod("onSurveyCompleted", arguments: arguments)
83106
}
84107
}
85108

86109
public func surveyClosed(surveyId: String) {
87110
let arguments = ["surveyId": surveyId]
111+
88112
DispatchQueue.main.async {
89-
FlutterChannel.shared.channel?.invokeMethod("onSurveyClosed", arguments: arguments)
113+
self.channel?.invokeMethod("onSurveyClosed", arguments: arguments)
90114
}
91115
}
92116
}

0 commit comments

Comments
 (0)