Skip to content

Commit d9f9957

Browse files
committed
feat: add windows like controls and window_manager for example
1 parent 08664c5 commit d9f9957

16 files changed

+419
-183
lines changed

example/.gitignore

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,5 +50,4 @@ ios/*
5050
windows/*
5151
linux/*
5252
web/*
53-
54-
!linux/my_application.cc
53+
macos/*

example/lib/flap/flap_home_page.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import 'package:flutter/material.dart';
22
import 'package:libadwaita/libadwaita.dart';
3-
import 'package:libadwaita_bitsdojo/libadwaita_bitsdojo.dart';
3+
import 'package:libadwaita_window_manager/libadwaita_window_manager.dart';
44

55
class FlapHomePage extends StatefulWidget {
66
const FlapHomePage({Key? key, required this.themeNotifier}) : super(key: key);
@@ -49,7 +49,7 @@ class _FlapHomePageState extends State<FlapHomePage> {
4949
Widget build(BuildContext context) {
5050
return AdwScaffold(
5151
flapController: _flapController,
52-
actions: AdwActions().bitsdojo,
52+
actions: AdwActions().windowManager,
5353
start: [
5454
Builder(
5555
builder: (context) {

example/lib/home_page.dart

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import 'package:example/pages/welcome.dart';
1010
import 'package:flutter/material.dart';
1111

1212
import 'package:libadwaita/libadwaita.dart';
13-
import 'package:libadwaita_bitsdojo/libadwaita_bitsdojo.dart';
13+
import 'package:libadwaita_window_manager/libadwaita_window_manager.dart';
1414

1515
import 'package:url_launcher/url_launcher.dart';
1616

@@ -65,7 +65,7 @@ class _MyHomePageState extends State<MyHomePage> {
6565

6666
return AdwScaffold(
6767
flapController: _flapController,
68-
actions: AdwActions().bitsdojo,
68+
actions: AdwActions().windowManager,
6969
start: [
7070
AdwHeaderButton(
7171
icon: const Icon(Icons.view_sidebar_outlined, size: 19),
@@ -120,11 +120,6 @@ class _MyHomePageState extends State<MyHomePage> {
120120
issueTrackerLink:
121121
'https://github.com/gtk-flutter/libadwaita/issues',
122122
appIcon: Image.asset('assets/logo.png'),
123-
actions: AdwActions(
124-
onClose: Navigator.of(context).pop,
125-
onHeaderDrag: appWindow?.startDragging,
126-
onDoubleTap: appWindow?.maximizeOrRestore,
127-
),
128123
credits: [
129124
AdwPreferencesGroup.credits(
130125
title: 'Developers',

example/lib/main.dart

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,14 @@
1+
import 'dart:async';
12
import 'dart:convert';
3+
import 'dart:io';
24

35
import 'package:adwaita/adwaita.dart';
46
import 'package:collection/collection.dart';
57
import 'package:example/flap/flap_demo.dart';
68
import 'package:example/home_page.dart';
79
import 'package:example/view_switcher/view_switcher_demo.dart';
810
import 'package:flutter/material.dart';
11+
import 'package:window_manager/window_manager.dart';
912

1013
Future<void> main(List<String> args) async {
1114
if (args.firstOrNull == 'multi_window') {
@@ -22,6 +25,26 @@ Future<void> main(List<String> args) async {
2225
break;
2326
}
2427
} else {
28+
WidgetsFlutterBinding.ensureInitialized();
29+
await windowManager.ensureInitialized();
30+
31+
const windowOptions = WindowOptions(
32+
size: Size(1000, 600),
33+
minimumSize: Size(400, 450),
34+
skipTaskbar: false,
35+
backgroundColor: Colors.transparent,
36+
titleBarStyle: TitleBarStyle.hidden,
37+
title: 'PsTube',
38+
);
39+
40+
unawaited(
41+
windowManager.waitUntilReadyToShow(windowOptions, () async {
42+
if (Platform.isLinux) await windowManager.setAsFrameless();
43+
await windowManager.show();
44+
await windowManager.focus();
45+
}),
46+
);
47+
2548
runApp(MyApp());
2649
}
2750
}
@@ -38,6 +61,11 @@ class MyApp extends StatelessWidget {
3861
valueListenable: themeNotifier,
3962
builder: (_, ThemeMode currentMode, __) {
4063
return MaterialApp(
64+
builder: (context, child) {
65+
final virtualWindowFrame = VirtualWindowFrameInit();
66+
67+
return virtualWindowFrame(context, child);
68+
},
4169
theme: AdwaitaThemeData.light(),
4270
darkTheme: AdwaitaThemeData.dark(),
4371
debugShowCheckedModeBanner: false,

example/lib/view_switcher/view_switcher_home_page.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import 'package:flutter/material.dart';
22
import 'package:libadwaita/libadwaita.dart';
3-
import 'package:libadwaita_bitsdojo/libadwaita_bitsdojo.dart';
3+
import 'package:libadwaita_window_manager/libadwaita_window_manager.dart';
44

55
class ViewSwitcherHomePage extends StatefulWidget {
66
const ViewSwitcherHomePage({Key? key}) : super(key: key);
@@ -17,7 +17,7 @@ class _ViewSwitcherHomePageState extends State<ViewSwitcherHomePage> {
1717
return ValueListenableBuilder(
1818
valueListenable: index,
1919
builder: (context, int value, child) => AdwScaffold(
20-
actions: AdwActions().bitsdojo,
20+
actions: AdwActions().windowManager,
2121
viewSwitcher: AdwViewSwitcher(
2222
tabs: const [
2323
ViewSwitcherData(

example/linux/my_application.cc

Lines changed: 0 additions & 108 deletions
This file was deleted.

example/pubspec.lock

Lines changed: 24 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -22,34 +22,6 @@ packages:
2222
url: "https://pub.dartlang.org"
2323
source: hosted
2424
version: "2.8.2"
25-
bitsdojo_window_linux:
26-
dependency: transitive
27-
description:
28-
name: bitsdojo_window_linux
29-
url: "https://pub.dartlang.org"
30-
source: hosted
31-
version: "0.1.2"
32-
bitsdojo_window_macos:
33-
dependency: transitive
34-
description:
35-
name: bitsdojo_window_macos
36-
url: "https://pub.dartlang.org"
37-
source: hosted
38-
version: "0.1.2"
39-
bitsdojo_window_platform_interface:
40-
dependency: transitive
41-
description:
42-
name: bitsdojo_window_platform_interface
43-
url: "https://pub.dartlang.org"
44-
source: hosted
45-
version: "0.1.2"
46-
bitsdojo_window_windows:
47-
dependency: transitive
48-
description:
49-
name: bitsdojo_window_windows
50-
url: "https://pub.dartlang.org"
51-
source: hosted
52-
version: "0.1.2"
5325
boolean_selector:
5426
dependency: transitive
5527
description:
@@ -98,7 +70,7 @@ packages:
9870
name: desktop_multi_window
9971
url: "https://pub.dartlang.org"
10072
source: hosted
101-
version: "0.1.0"
73+
version: "0.2.0"
10274
fake_async:
10375
dependency: transitive
10476
description:
@@ -177,20 +149,20 @@ packages:
177149
relative: true
178150
source: path
179151
version: "1.2.5"
180-
libadwaita_bitsdojo:
181-
dependency: "direct main"
182-
description:
183-
name: libadwaita_bitsdojo
184-
url: "https://pub.dartlang.org"
185-
source: hosted
186-
version: "0.5.5"
187152
libadwaita_core:
188153
dependency: transitive
189154
description:
190155
name: libadwaita_core
191156
url: "https://pub.dartlang.org"
192157
source: hosted
193158
version: "0.5.4"
159+
libadwaita_window_manager:
160+
dependency: "direct main"
161+
description:
162+
name: libadwaita_window_manager
163+
url: "https://pub.dartlang.org"
164+
source: hosted
165+
version: "0.5.4+1"
194166
matcher:
195167
dependency: transitive
196168
description:
@@ -310,6 +282,13 @@ packages:
310282
url: "https://pub.dartlang.org"
311283
source: hosted
312284
version: "4.2.4"
285+
screen_retriever:
286+
dependency: transitive
287+
description:
288+
name: screen_retriever
289+
url: "https://pub.dartlang.org"
290+
source: hosted
291+
version: "0.1.2"
313292
sky_engine:
314293
dependency: transitive
315294
description: flutter
@@ -433,14 +412,21 @@ packages:
433412
name: very_good_analysis
434413
url: "https://pub.dartlang.org"
435414
source: hosted
436-
version: "2.4.0"
415+
version: "3.0.1"
437416
win32:
438417
dependency: transitive
439418
description:
440419
name: win32
441420
url: "https://pub.dartlang.org"
442421
source: hosted
443422
version: "2.5.2"
423+
window_manager:
424+
dependency: "direct main"
425+
description:
426+
name: window_manager
427+
url: "https://pub.dartlang.org"
428+
source: hosted
429+
version: "0.2.6"
444430
xdg_directories:
445431
dependency: transitive
446432
description:
@@ -456,5 +442,5 @@ packages:
456442
source: hosted
457443
version: "6.1.0"
458444
sdks:
459-
dart: ">=2.17.0 <3.0.0"
445+
dart: ">=2.17.6 <3.0.0"
460446
flutter: ">=3.0.0"

example/pubspec.yaml

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,17 +9,18 @@ environment:
99

1010
dependencies:
1111
adwaita: "0.5.1"
12-
desktop_multi_window: ">=0.1.0 <1.0.0"
12+
desktop_multi_window: ">=0.2.0 <1.0.0"
1313
flutter:
1414
sdk: flutter
1515
libadwaita:
1616
path: ../
17-
libadwaita_bitsdojo: ^0.5.5
17+
libadwaita_window_manager: ^0.5.4+1
18+
window_manager: ^0.2.6
1819

1920
dev_dependencies:
2021
flutter_test:
2122
sdk: flutter
22-
very_good_analysis: ^2.4.0
23+
very_good_analysis: ^3.0.1
2324

2425
flutter:
2526
uses-material-design: true

lib/src/internal/window_resize_listener.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ class WindowResizeListener extends StatefulWidget {
77
required this.child,
88
}) : super(key: key);
99

10-
final Function(Size size) onResize;
10+
final void Function(Size size) onResize;
1111
final Widget child;
1212

1313
@override

0 commit comments

Comments
 (0)