mirror of
				https://github.com/AppFlowy-IO/AppFlowy.git
				synced 2025-10-31 10:03:18 +00:00 
			
		
		
		
	 9a5dbbb3ce
			
		
	
	
		9a5dbbb3ce
		
			
		
	
	
	
	
		
			
			* chore: upgrade flutter to 3.22.0 * chore: upgrade editor version * chore: upgrade CI files * fix: failed tests
		
			
				
	
	
		
			109 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
			
		
		
	
	
			109 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
| import 'package:flutter/material.dart';
 | |
| 
 | |
| import 'package:appflowy_editor/appflowy_editor.dart';
 | |
| import 'package:flowy_infra_ui/widget/spacing.dart';
 | |
| import 'package:window_manager/window_manager.dart';
 | |
| 
 | |
| class WindowsButtonListener extends WindowListener {
 | |
|   WindowsButtonListener();
 | |
| 
 | |
|   final ValueNotifier<bool> isMaximized = ValueNotifier(false);
 | |
| 
 | |
|   @override
 | |
|   void onWindowMaximize() => isMaximized.value = true;
 | |
| 
 | |
|   @override
 | |
|   void onWindowUnmaximize() => isMaximized.value = false;
 | |
| 
 | |
|   void dispose() => isMaximized.dispose();
 | |
| }
 | |
| 
 | |
| class WindowTitleBar extends StatefulWidget {
 | |
|   const WindowTitleBar({
 | |
|     super.key,
 | |
|     this.leftChildren = const [],
 | |
|   });
 | |
| 
 | |
|   final List<Widget> leftChildren;
 | |
| 
 | |
|   @override
 | |
|   State<WindowTitleBar> createState() => _WindowTitleBarState();
 | |
| }
 | |
| 
 | |
| class _WindowTitleBarState extends State<WindowTitleBar> {
 | |
|   late final WindowsButtonListener? windowsButtonListener;
 | |
|   bool isMaximized = false;
 | |
| 
 | |
|   @override
 | |
|   void initState() {
 | |
|     super.initState();
 | |
| 
 | |
|     if (PlatformExtension.isWindows || PlatformExtension.isLinux) {
 | |
|       windowsButtonListener = WindowsButtonListener();
 | |
|       windowManager.addListener(windowsButtonListener!);
 | |
|       windowsButtonListener!.isMaximized.addListener(() {
 | |
|         if (mounted) {
 | |
|           setState(
 | |
|             () => isMaximized = windowsButtonListener!.isMaximized.value,
 | |
|           );
 | |
|         }
 | |
|       });
 | |
|     } else {
 | |
|       windowsButtonListener = null;
 | |
|     }
 | |
| 
 | |
|     windowManager.isMaximized().then(
 | |
|           (v) => mounted ? setState(() => isMaximized = v) : null,
 | |
|         );
 | |
|   }
 | |
| 
 | |
|   @override
 | |
|   void dispose() {
 | |
|     if (windowsButtonListener != null) {
 | |
|       windowManager.removeListener(windowsButtonListener!);
 | |
|       windowsButtonListener?.dispose();
 | |
|     }
 | |
|     super.dispose();
 | |
|   }
 | |
| 
 | |
|   @override
 | |
|   Widget build(BuildContext context) {
 | |
|     final brightness = Theme.of(context).brightness;
 | |
| 
 | |
|     return Container(
 | |
|       height: 40,
 | |
|       decoration: BoxDecoration(
 | |
|         color: Theme.of(context).colorScheme.surfaceContainerHighest,
 | |
|       ),
 | |
|       child: DragToMoveArea(
 | |
|         child: Row(
 | |
|           children: [
 | |
|             const HSpace(4),
 | |
|             ...widget.leftChildren,
 | |
|             const Spacer(),
 | |
|             WindowCaptionButton.minimize(
 | |
|               brightness: brightness,
 | |
|               onPressed: () => windowManager.minimize(),
 | |
|             ),
 | |
|             if (isMaximized) ...[
 | |
|               WindowCaptionButton.unmaximize(
 | |
|                 brightness: brightness,
 | |
|                 onPressed: () => windowManager.unmaximize(),
 | |
|               ),
 | |
|             ] else ...[
 | |
|               WindowCaptionButton.maximize(
 | |
|                 brightness: brightness,
 | |
|                 onPressed: () => windowManager.maximize(),
 | |
|               ),
 | |
|             ],
 | |
|             WindowCaptionButton.close(
 | |
|               brightness: brightness,
 | |
|               onPressed: () => windowManager.close(),
 | |
|             ),
 | |
|           ],
 | |
|         ),
 | |
|       ),
 | |
|     );
 | |
|   }
 | |
| }
 |