55import Cocoa
66import FlutterMacOS
77
8- class MainFlutterWindow : NSWindow , FlutterStreamHandler , PowerSourceStateChangeDelegate {
8+ class MainFlutterWindow : NSWindow {
99 private let powerSource = PowerSource ( )
10- private let stateChangeSource = PowerSourceStateChangeHandler ( )
10+ private let stateChangeHandler = PowerSourceStateChangeHandler ( )
1111 private var eventSink : FlutterEventSink ?
1212
1313 override func awakeFromNib( ) {
1414 let flutterViewController = FlutterViewController ( )
1515 let windowFrame = self . frame
1616 self . contentViewController = flutterViewController
17+ self . displayIfNeeded ( )
1718 self . setFrame ( windowFrame, display: true )
1819
1920 // Register battery method channel.
2021 let registrar = flutterViewController. registrar ( forPlugin: " BatteryLevel " )
2122 let batteryChannel = FlutterMethodChannel (
2223 name: " samples.flutter.io/battery " ,
2324 binaryMessenger: registrar. messenger)
24- batteryChannel. setMethodCallHandler ( { [ weak self] ( call, result) in
25+ batteryChannel. setMethodCallHandler { [ powerSource = self . powerSource ] ( call, result) in
2526 switch call. method {
2627 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 ) )
3234 return
3335 }
34- let level = self ? . powerSource. getCurrentCapacity ( )
35- if level == - 1 {
36+ guard let level = powerSource. getCurrentCapacity ( ) else {
3637 result (
3738 FlutterError (
3839 code: " UNAVAILABLE " ,
@@ -44,7 +45,7 @@ class MainFlutterWindow: NSWindow, FlutterStreamHandler, PowerSourceStateChangeD
4445 default :
4546 result ( FlutterMethodNotImplemented)
4647 }
47- } )
48+ }
4849
4950 // Register charging event channel.
5051 let chargingChannel = FlutterEventChannel (
@@ -57,36 +58,40 @@ class MainFlutterWindow: NSWindow, FlutterStreamHandler, PowerSourceStateChangeD
5758 super. awakeFromNib ( )
5859 }
5960
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 {
6077 func onListen( withArguments arguments: Any ? , eventSink events: @escaping FlutterEventSink )
6178 -> FlutterError ?
6279 {
6380 self . eventSink = events
6481 self . emitPowerStatusEvent ( )
65- self . stateChangeSource . delegate = self
82+ self . stateChangeHandler . delegate = self
6683 return nil
6784 }
6885
6986 func onCancel( withArguments arguments: Any ? ) -> FlutterError ? {
70- self . stateChangeSource . delegate = nil
87+ self . stateChangeHandler . delegate = nil
7188 self . eventSink = nil
7289 return nil
7390 }
91+ }
7492
75- func onPowerSourceStateChanged( ) {
93+ extension MainFlutterWindow : PowerSourceStateChangeDelegate {
94+ func didChangePowerSourceState( ) {
7695 self . emitPowerStatusEvent ( )
7796 }
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-
9297}
0 commit comments