|
4 | 4 |
|
5 | 5 | import Flutter |
6 | 6 |
|
7 | | -var _eventChannels: [String: FlutterEventChannel] = [:] |
8 | | -var _streamHandlers: [String: MotionStreamHandler] = [:] |
9 | | -var _isCleanUp = false |
10 | | - |
11 | 7 | public class FPPSensorsPlusPlugin: NSObject, FlutterPlugin { |
| 8 | + private var methodChannel: FlutterMethodChannel? |
| 9 | + private var eventChannels: [String: FlutterEventChannel] = [:] |
| 10 | + private var streamHandlers: [String: MotionStreamHandler] = [:] |
12 | 11 |
|
13 | 12 | public static func register(with registrar: FlutterPluginRegistrar) { |
14 | | - let accelerometerStreamHandler = FPPAccelerometerStreamHandlerPlus() |
15 | | - let accelerometerStreamHandlerName = "dev.fluttercommunity.plus/sensors/accelerometer" |
16 | | - let accelerometerChannel = FlutterEventChannel( |
17 | | - name: accelerometerStreamHandlerName, |
18 | | - binaryMessenger: registrar.messenger() |
19 | | - ) |
20 | | - accelerometerChannel.setStreamHandler(accelerometerStreamHandler) |
21 | | - _eventChannels[accelerometerStreamHandlerName] = accelerometerChannel |
22 | | - _streamHandlers[accelerometerStreamHandlerName] = accelerometerStreamHandler |
23 | | - |
24 | | - let userAccelerometerStreamHandler = FPPUserAccelStreamHandlerPlus() |
25 | | - let userAccelerometerStreamHandlerName = "dev.fluttercommunity.plus/sensors/user_accel" |
26 | | - let userAccelerometerChannel = FlutterEventChannel( |
27 | | - name: userAccelerometerStreamHandlerName, |
28 | | - binaryMessenger: registrar.messenger() |
29 | | - ) |
30 | | - userAccelerometerChannel.setStreamHandler(userAccelerometerStreamHandler) |
31 | | - _eventChannels[userAccelerometerStreamHandlerName] = userAccelerometerChannel |
32 | | - _streamHandlers[userAccelerometerStreamHandlerName] = userAccelerometerStreamHandler |
| 13 | + let instance = FPPSensorsPlusPlugin() |
| 14 | + instance.setUpChannels(registrar: registrar) |
| 15 | + registrar.publish(instance) |
| 16 | + } |
33 | 17 |
|
34 | | - let gyroscopeStreamHandler = FPPGyroscopeStreamHandlerPlus() |
35 | | - let gyroscopeStreamHandlerName = "dev.fluttercommunity.plus/sensors/gyroscope" |
36 | | - let gyroscopeChannel = FlutterEventChannel( |
37 | | - name: gyroscopeStreamHandlerName, |
38 | | - binaryMessenger: registrar.messenger() |
39 | | - ) |
40 | | - gyroscopeChannel.setStreamHandler(gyroscopeStreamHandler) |
41 | | - _eventChannels[gyroscopeStreamHandlerName] = gyroscopeChannel |
42 | | - _streamHandlers[gyroscopeStreamHandlerName] = gyroscopeStreamHandler |
| 18 | + public func detachFromEngine(for registrar: FlutterPluginRegistrar) { |
| 19 | + cleanUp() |
| 20 | + } |
43 | 21 |
|
44 | | - let magnetometerStreamHandler = FPPMagnetometerStreamHandlerPlus() |
45 | | - let magnetometerStreamHandlerName = "dev.fluttercommunity.plus/sensors/magnetometer" |
46 | | - let magnetometerChannel = FlutterEventChannel( |
47 | | - name: magnetometerStreamHandlerName, |
48 | | - binaryMessenger: registrar.messenger() |
49 | | - ) |
50 | | - magnetometerChannel.setStreamHandler(magnetometerStreamHandler) |
51 | | - _eventChannels[magnetometerStreamHandlerName] = magnetometerChannel |
52 | | - _streamHandlers[magnetometerStreamHandlerName] = magnetometerStreamHandler |
| 22 | + private func setUpChannels(registrar: FlutterPluginRegistrar) { |
| 23 | + let sensorConfigurations: [(String, MotionStreamHandler)] = [ |
| 24 | + ("dev.fluttercommunity.plus/sensors/accelerometer", FPPAccelerometerStreamHandlerPlus()), |
| 25 | + ("dev.fluttercommunity.plus/sensors/user_accel", FPPUserAccelStreamHandlerPlus()), |
| 26 | + ("dev.fluttercommunity.plus/sensors/gyroscope", FPPGyroscopeStreamHandlerPlus()), |
| 27 | + ("dev.fluttercommunity.plus/sensors/magnetometer", FPPMagnetometerStreamHandlerPlus()), |
| 28 | + ("dev.fluttercommunity.plus/sensors/barometer", FPPBarometerStreamHandlerPlus()), |
| 29 | + ] |
53 | 30 |
|
54 | | - let barometerStreamHandler = FPPBarometerStreamHandlerPlus() |
55 | | - let barometerStreamHandlerName = "dev.fluttercommunity.plus/sensors/barometer" |
56 | | - let barometerChannel = FlutterEventChannel( |
57 | | - name: barometerStreamHandlerName, |
58 | | - binaryMessenger: registrar.messenger() |
59 | | - ) |
60 | | - barometerChannel.setStreamHandler(barometerStreamHandler) |
61 | | - _eventChannels[barometerStreamHandlerName] = barometerChannel |
62 | | - _streamHandlers[barometerStreamHandlerName] = barometerStreamHandler |
| 31 | + for (name, handler) in sensorConfigurations { |
| 32 | + let channel = FlutterEventChannel(name: name, binaryMessenger: registrar.messenger()) |
| 33 | + channel.setStreamHandler(handler) |
| 34 | + eventChannels[name] = channel |
| 35 | + streamHandlers[name] = handler |
| 36 | + } |
63 | 37 |
|
64 | | - let methodChannel = FlutterMethodChannel( |
65 | | - name: "dev.fluttercommunity.plus/sensors/method", |
66 | | - binaryMessenger: registrar.messenger() |
| 38 | + methodChannel = FlutterMethodChannel( |
| 39 | + name: "dev.fluttercommunity.plus/sensors/method", |
| 40 | + binaryMessenger: registrar.messenger() |
67 | 41 | ) |
68 | | - methodChannel.setMethodCallHandler { call, result in |
69 | | - let streamHandler: MotionStreamHandler!; |
70 | | - switch (call.method) { |
71 | | - case "setAccelerationSamplingPeriod": |
72 | | - streamHandler = _streamHandlers[accelerometerStreamHandlerName] |
73 | | - case "setUserAccelerometerSamplingPeriod": |
74 | | - streamHandler = _streamHandlers[userAccelerometerStreamHandlerName] |
75 | | - case "setGyroscopeSamplingPeriod": |
76 | | - streamHandler = _streamHandlers[gyroscopeStreamHandlerName] |
77 | | - case "setMagnetometerSamplingPeriod": |
78 | | - streamHandler = _streamHandlers[magnetometerStreamHandlerName] |
79 | | - case "setBarometerSamplingPeriod": |
80 | | - streamHandler = _streamHandlers[barometerStreamHandlerName] |
81 | | - default: |
82 | | - return result(FlutterMethodNotImplemented) |
| 42 | + methodChannel?.setMethodCallHandler { [weak self] call, result in |
| 43 | + guard let self, let handler = self.handler(for: call.method) else { |
| 44 | + result(FlutterMethodNotImplemented) |
| 45 | + return |
83 | 46 | } |
84 | | - streamHandler.samplingPeriod = call.arguments as! Int |
| 47 | + handler.samplingPeriod = call.arguments as! Int |
85 | 48 | result(nil) |
86 | 49 | } |
87 | | - |
88 | | - _isCleanUp = false |
89 | 50 | } |
90 | 51 |
|
91 | | - func detachFromEngineForRegistrar(registrar: NSObject!) { |
92 | | - FPPSensorsPlusPlugin._cleanUp() |
| 52 | + private func handler(for method: String) -> MotionStreamHandler? { |
| 53 | + let names = [ |
| 54 | + "setAccelerationSamplingPeriod": "dev.fluttercommunity.plus/sensors/accelerometer", |
| 55 | + "setUserAccelerometerSamplingPeriod": "dev.fluttercommunity.plus/sensors/user_accel", |
| 56 | + "setGyroscopeSamplingPeriod": "dev.fluttercommunity.plus/sensors/gyroscope", |
| 57 | + "setMagnetometerSamplingPeriod": "dev.fluttercommunity.plus/sensors/magnetometer", |
| 58 | + "setBarometerSamplingPeriod": "dev.fluttercommunity.plus/sensors/barometer", |
| 59 | + ] |
| 60 | + return names[method].flatMap { streamHandlers[$0] } |
93 | 61 | } |
94 | 62 |
|
95 | | - static func _cleanUp() { |
96 | | - _isCleanUp = true |
97 | | - for channel in _eventChannels.values { |
98 | | - channel.setStreamHandler(nil) |
99 | | - } |
100 | | - _eventChannels.removeAll() |
101 | | - for handler in _streamHandlers.values { |
| 63 | + private func cleanUp() { |
| 64 | + methodChannel?.setMethodCallHandler(nil) |
| 65 | + methodChannel = nil |
| 66 | + for handler in streamHandlers.values { |
102 | 67 | handler.onCancel(withArguments: nil) |
103 | 68 | } |
104 | | - _streamHandlers.removeAll() |
| 69 | + for channel in eventChannels.values { |
| 70 | + channel.setStreamHandler(nil) |
| 71 | + } |
| 72 | + streamHandlers.removeAll() |
| 73 | + eventChannels.removeAll() |
105 | 74 | } |
106 | 75 | } |
0 commit comments