5
5
import Cocoa
6
6
import FlutterMacOS
7
7
8
- class MainFlutterWindow : NSWindow , FlutterStreamHandler , PowerSourceStateChangeDelegate {
8
+ class MainFlutterWindow : NSWindow {
9
9
private let powerSource = PowerSource ( )
10
- private let stateChangeSource = PowerSourceStateChangeHandler ( )
10
+ private let stateChangeHandler = PowerSourceStateChangeHandler ( )
11
11
private var eventSink : FlutterEventSink ?
12
12
13
13
override func awakeFromNib( ) {
14
14
let flutterViewController = FlutterViewController ( )
15
15
let windowFrame = self . frame
16
16
self . contentViewController = flutterViewController
17
+ self . displayIfNeeded ( )
17
18
self . setFrame ( windowFrame, display: true )
18
19
19
20
// Register battery method channel.
20
21
let registrar = flutterViewController. registrar ( forPlugin: " BatteryLevel " )
21
22
let batteryChannel = FlutterMethodChannel (
22
23
name: " samples.flutter.io/battery " ,
23
24
binaryMessenger: registrar. messenger)
24
- batteryChannel. setMethodCallHandler ( { [ weak self] ( call, result) in
25
+ batteryChannel. setMethodCallHandler { [ powerSource = self . powerSource ] ( call, result) in
25
26
switch call. method {
26
27
case " getBatteryLevel " :
27
- if self ? . powerSource. hasBattery ( ) == false {
28
- result ( FlutterError (
29
- code: " NO_BATTERY " ,
30
- message: " Device does not have a battery " ,
31
- details: nil ) )
28
+ guard powerSource. hasBattery ( ) else {
29
+ result (
30
+ FlutterError (
31
+ code: " NO_BATTERY " ,
32
+ message: " Device does not have a battery " ,
33
+ details: nil ) )
32
34
return
33
35
}
34
- let level = self ? . powerSource. getCurrentCapacity ( )
35
- if level == - 1 {
36
+ guard let level = powerSource. getCurrentCapacity ( ) else {
36
37
result (
37
38
FlutterError (
38
39
code: " UNAVAILABLE " ,
@@ -44,7 +45,7 @@ class MainFlutterWindow: NSWindow, FlutterStreamHandler, PowerSourceStateChangeD
44
45
default :
45
46
result ( FlutterMethodNotImplemented)
46
47
}
47
- } )
48
+ }
48
49
49
50
// Register charging event channel.
50
51
let chargingChannel = FlutterEventChannel (
@@ -57,36 +58,40 @@ class MainFlutterWindow: NSWindow, FlutterStreamHandler, PowerSourceStateChangeD
57
58
super. awakeFromNib ( )
58
59
}
59
60
61
+ /// Emit a power status event to the registered event sink.
62
+ func emitPowerStatusEvent( ) {
63
+ if let sink = self . eventSink {
64
+ switch self . powerSource. getPowerState ( ) {
65
+ case . ac:
66
+ sink ( " charging " )
67
+ case . battery:
68
+ sink ( " discharging " )
69
+ case . unknown:
70
+ sink ( " UNAVAILABLE " )
71
+ }
72
+ }
73
+ }
74
+ }
75
+
76
+ extension MainFlutterWindow : FlutterStreamHandler {
60
77
func onListen( withArguments arguments: Any ? , eventSink events: @escaping FlutterEventSink )
61
78
-> FlutterError ?
62
79
{
63
80
self . eventSink = events
64
81
self . emitPowerStatusEvent ( )
65
- self . stateChangeSource . delegate = self
82
+ self . stateChangeHandler . delegate = self
66
83
return nil
67
84
}
68
85
69
86
func onCancel( withArguments arguments: Any ? ) -> FlutterError ? {
70
- self . stateChangeSource . delegate = nil
87
+ self . stateChangeHandler . delegate = nil
71
88
self . eventSink = nil
72
89
return nil
73
90
}
91
+ }
74
92
75
- func onPowerSourceStateChanged( ) {
93
+ extension MainFlutterWindow : PowerSourceStateChangeDelegate {
94
+ func didChangePowerSourceState( ) {
76
95
self . emitPowerStatusEvent ( )
77
96
}
78
-
79
- func emitPowerStatusEvent( ) {
80
- if let sink = self . eventSink {
81
- switch self . powerSource. getPowerState ( ) {
82
- case . ac:
83
- sink ( " charging " )
84
- case . battery:
85
- sink ( " discharging " )
86
- case . unknown:
87
- sink ( " UNAVAILABLE " )
88
- }
89
- }
90
- }
91
-
92
97
}
0 commit comments