Skip to content

Commit 86d79f3

Browse files
committed
Able to remove an application, albeit with some bugs + refactored how settings are donw
1 parent 4dd2d95 commit 86d79f3

File tree

7 files changed

+146
-513
lines changed

7 files changed

+146
-513
lines changed

examples/multi_window_ref_app/lib/app/main_window.dart

+28-25
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
1+
import 'dart:ui';
2+
13
import 'package:flutter/material.dart';
2-
import 'package:multi_window_ref_app/app/window_metadata_content.dart';
4+
import 'package:multi_window_ref_app/app/window_controller_render.dart';
35

46
import 'window_settings.dart';
57
import 'window_settings_dialog.dart';
@@ -47,6 +49,7 @@ class MainWindow extends StatefulWidget {
4749

4850
class _MainWindowState extends State<MainWindow> {
4951
final _WindowManagerModel _windowManagerModel = _WindowManagerModel();
52+
final WindowSettings _settings = WindowSettings();
5053

5154
@override
5255
Widget build(BuildContext context) {
@@ -75,7 +78,8 @@ class _MainWindowState extends State<MainWindow> {
7578
builder: (BuildContext context, Widget? child) {
7679
return _WindowCreatorCard(
7780
selectedWindow: _windowManagerModel.selected,
78-
windowManagerModel: _windowManagerModel);
81+
windowManagerModel: _windowManagerModel,
82+
windowSettings: _settings);
7983
})
8084
],
8185
),
@@ -88,22 +92,31 @@ class _MainWindowState extends State<MainWindow> {
8892
view: ListenableBuilder(
8993
listenable: _windowManagerModel,
9094
builder: (BuildContext context, Widget? widget) {
91-
return _ViewCollection(windowManagerModel: _windowManagerModel);
95+
return _ViewCollection(
96+
windowManagerModel: _windowManagerModel,
97+
windowSettings: _settings);
9298
}),
9399
child: widget);
94100
}
95101
}
96102

97103
class _ViewCollection extends StatelessWidget {
98-
_ViewCollection({required this.windowManagerModel});
104+
_ViewCollection(
105+
{required this.windowManagerModel, required this.windowSettings});
99106

100-
_WindowManagerModel windowManagerModel;
107+
final _WindowManagerModel windowManagerModel;
108+
final WindowSettings windowSettings;
101109

102110
@override
103111
Widget build(BuildContext context) {
104112
final List<Widget> childViews = <Widget>[];
105-
for (final WindowController childWindow in windowManagerModel.windows) {
106-
childViews.add(WindowMetadataContent(controller: childWindow));
113+
for (final WindowController controller in windowManagerModel.windows) {
114+
childViews.add(WindowControllerRender(
115+
controller: controller,
116+
onDestroyed: () {
117+
windowManagerModel.remove(controller);
118+
},
119+
windowSettings: windowSettings));
107120
}
108121

109122
return ViewCollection(views: childViews);
@@ -211,19 +224,15 @@ class _ActiveWindowsTable extends StatelessWidget {
211224
}
212225
}
213226

214-
class _WindowCreatorCard extends StatefulWidget {
215-
const _WindowCreatorCard(
216-
{required this.selectedWindow, required this.windowManagerModel});
227+
class _WindowCreatorCard extends StatelessWidget {
228+
_WindowCreatorCard(
229+
{required this.selectedWindow,
230+
required this.windowManagerModel,
231+
required this.windowSettings});
217232

218233
final WindowController? selectedWindow;
219234
final _WindowManagerModel windowManagerModel;
220-
221-
@override
222-
State<StatefulWidget> createState() => _WindowCreatorCardState();
223-
}
224-
225-
class _WindowCreatorCardState extends State<_WindowCreatorCard> {
226-
WindowSettings _settings = WindowSettings();
235+
final WindowSettings windowSettings;
227236

228237
@override
229238
Widget build(BuildContext context) {
@@ -249,7 +258,7 @@ class _WindowCreatorCardState extends State<_WindowCreatorCard> {
249258
children: [
250259
OutlinedButton(
251260
onPressed: () async {
252-
widget.windowManagerModel.add(RegularWindowController());
261+
windowManagerModel.add(RegularWindowController());
253262
},
254263
child: const Text('Regular'),
255264
),
@@ -259,13 +268,7 @@ class _WindowCreatorCardState extends State<_WindowCreatorCard> {
259268
child: TextButton(
260269
child: const Text('SETTINGS'),
261270
onPressed: () {
262-
windowSettingsDialog(context, _settings).then(
263-
(WindowSettings? settings) {
264-
if (settings != null) {
265-
_settings = settings;
266-
}
267-
},
268-
);
271+
windowSettingsDialog(context, windowSettings);
269272
},
270273
),
271274
),

examples/multi_window_ref_app/lib/app/regular_window_content.dart

+16-6
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,19 @@
11
import 'package:flutter/material.dart';
2-
import 'package:multi_window_ref_app/app/window_metadata_content.dart';
2+
import 'package:multi_window_ref_app/app/window_controller_render.dart';
3+
import 'package:multi_window_ref_app/app/window_settings.dart';
34

45
class RegularWindowContent extends StatefulWidget {
5-
const RegularWindowContent({super.key, required this.window});
6+
const RegularWindowContent({super.key, required this.window, required this.windowSettings});
67

78
final RegularWindowController window;
9+
final WindowSettings windowSettings;
810

911
@override
1012
State<RegularWindowContent> createState() => _RegularWindowContentState();
1113
}
1214

1315
class _RegularWindowContentState extends State<RegularWindowContent> {
14-
List<WindowController> children = <WindowController>[];
16+
List<WindowController> childControllers = <WindowController>[];
1517

1618
@override
1719
Widget build(BuildContext context) {
@@ -25,7 +27,10 @@ class _RegularWindowContentState extends State<RegularWindowContent> {
2527
ElevatedButton(
2628
onPressed: () {
2729
setState(() {
28-
children = [...children, RegularWindowController()];
30+
childControllers = [
31+
...childControllers,
32+
RegularWindowController()
33+
];
2934
});
3035
},
3136
child: const Text('Create Regular Window'),
@@ -48,8 +53,13 @@ class _RegularWindowContentState extends State<RegularWindowContent> {
4853
);
4954

5055
final List<Widget> childViews =
51-
children.map((WindowController childWindow) {
52-
return WindowMetadataContent(controller: childWindow);
56+
childControllers.map((WindowController controller) {
57+
return WindowControllerRender(
58+
controller: controller,
59+
windowSettings: widget.windowSettings,
60+
onDestroyed: () {
61+
childControllers.remove(controller);
62+
});
5363
}).toList();
5464

5565
return ViewAnchor(view: ViewCollection(views: childViews), child: child);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
import 'package:flutter/material.dart';
2+
import 'package:multi_window_ref_app/app/regular_window_content.dart';
3+
import 'package:multi_window_ref_app/app/window_settings.dart';
4+
5+
class WindowControllerRender extends StatelessWidget {
6+
WindowControllerRender(
7+
{required this.controller,
8+
required this.onDestroyed,
9+
required this.windowSettings});
10+
11+
final WindowController controller;
12+
final VoidCallback onDestroyed;
13+
final WindowSettings windowSettings;
14+
15+
@override
16+
Widget build(BuildContext context) {
17+
switch (controller.type) {
18+
case WindowArchetype.regular:
19+
return RegularWindow(
20+
onDestroyed: onDestroyed,
21+
preferredSize: windowSettings.regularSize,
22+
controller: controller as RegularWindowController,
23+
child: RegularWindowContent(
24+
window: controller as RegularWindowController,
25+
windowSettings: windowSettings));
26+
default:
27+
throw UnimplementedError(
28+
"The provided window type does not have an implementation");
29+
}
30+
}
31+
}

examples/multi_window_ref_app/lib/app/window_metadata_content.dart

-23
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,13 @@
11
import 'package:flutter/material.dart';
22

3-
class WindowSettings {
4-
WindowSettings(
5-
{this.regularSize = const Size(400, 300),
6-
this.floatingRegularSize = const Size(300, 300),
7-
this.dialogSize = const Size(300, 250),
8-
this.satelliteSize = const Size(150, 300),
9-
this.popupSize = const Size(200, 200),
10-
this.tipSize = const Size(140, 140),
11-
this.anchorToWindow = false,
12-
this.anchorRect = const Rect.fromLTWH(0, 0, 1000, 1000)});
13-
final Size regularSize;
14-
final Size floatingRegularSize;
15-
final Size dialogSize;
16-
final Size satelliteSize;
17-
final Size popupSize;
18-
final Size tipSize;
19-
final Rect anchorRect;
20-
final bool anchorToWindow;
3+
class WindowSettings extends ChangeNotifier {
4+
WindowSettings({Size regularSize = const Size(400, 300)})
5+
: _regularSize = regularSize;
6+
7+
Size _regularSize;
8+
Size get regularSize => _regularSize;
9+
set regularSize(Size value) {
10+
_regularSize = value;
11+
notifyListeners();
12+
}
2113
}

0 commit comments

Comments
 (0)