Skip to content

Commit 6eb721c

Browse files
committed
[macos] Implement setBrightness method #86
1 parent 9bf69a9 commit 6eb721c

File tree

4 files changed

+38
-6
lines changed

4 files changed

+38
-6
lines changed

example/lib/pages/home.dart

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -91,10 +91,16 @@ class _HomePageState extends State<HomePage> with TrayListener, WindowListener {
9191
title: Text('ThemeMode'),
9292
detailText: Text('${sharedConfig.themeMode}'),
9393
onTap: () async {
94-
sharedConfigManager.setThemeMode(
95-
sharedConfig.themeMode == ThemeMode.light
96-
? ThemeMode.dark
97-
: ThemeMode.light,
94+
ThemeMode newThemeMode =
95+
sharedConfig.themeMode == ThemeMode.light
96+
? ThemeMode.dark
97+
: ThemeMode.light;
98+
99+
await sharedConfigManager.setThemeMode(newThemeMode);
100+
await windowManager.setBrightness(
101+
newThemeMode == ThemeMode.light
102+
? Brightness.light
103+
: Brightness.dark,
98104
);
99105
},
100106
),

lib/src/window_manager.dart

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import 'dart:async';
22
import 'dart:ui';
33

44
import 'package:flutter/foundation.dart';
5+
import 'package:flutter/material.dart';
56
import 'package:flutter/rendering.dart';
67
import 'package:flutter/services.dart';
78

@@ -549,6 +550,17 @@ class WindowManager {
549550
await _channel.invokeMethod('setOpacity', arguments);
550551
}
551552

553+
/// Sets the brightness of the window.
554+
///
555+
/// @platforms macos,windows
556+
Future<void> setBrightness(Brightness brightness) async {
557+
final Map<String, dynamic> arguments = {
558+
'brightness': brightness.name,
559+
};
560+
print(arguments);
561+
await _channel.invokeMethod('setBrightness', arguments);
562+
}
563+
552564
/// Starts a window drag based on the specified mouse-down event.
553565
Future<void> startDragging() async {
554566
await _channel.invokeMethod('startDragging');

macos/Classes/WindowManager.swift

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ public class WindowManager: NSObject, NSWindowDelegate {
7272
titleBarView.isHidden = true
7373
}
7474
}
75-
75+
7676
public func destroy() {
7777
NSApp.terminate(nil)
7878
}
@@ -165,7 +165,7 @@ public class WindowManager: NSObject, NSWindowDelegate {
165165
}
166166
}
167167
}
168-
168+
169169
public func setAspectRatio(_ args: [String: Any]) {
170170
let hasFrame = !mainWindow.styleMask.contains(.fullSizeContentView);
171171
let aspectRatio = (args["aspectRatio"] as! NSNumber).doubleValue
@@ -434,6 +434,16 @@ public class WindowManager: NSObject, NSWindowDelegate {
434434
mainWindow.alphaValue = opacity
435435
}
436436

437+
public func setBrightness(_ args: [String: Any]) {
438+
let brightness: String = args["brightness"] as! String
439+
if (brightness == "dark") {
440+
mainWindow.appearance = NSAppearance(named: NSAppearance.Name.vibrantDark)
441+
} else {
442+
mainWindow.appearance = NSAppearance(named: NSAppearance.Name.vibrantLight)
443+
}
444+
mainWindow.invalidateShadow()
445+
}
446+
437447
public func startDragging() {
438448
DispatchQueue.main.async {
439449
let window: NSWindow = self.mainWindow

macos/Classes/WindowManagerPlugin.swift

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -223,6 +223,10 @@ public class WindowManagerPlugin: NSObject, FlutterPlugin {
223223
windowManager.setOpacity(args)
224224
result(true)
225225
break
226+
case "setBrightness":
227+
windowManager.setBrightness(args)
228+
result(true)
229+
break
226230
case "startDragging":
227231
windowManager.startDragging()
228232
result(true)

0 commit comments

Comments
 (0)