diff --git a/examples/flutter/lib/main.dart b/examples/flutter/lib/main.dart index 152e1fd75..cdeb9b8cb 100644 --- a/examples/flutter/lib/main.dart +++ b/examples/flutter/lib/main.dart @@ -30,7 +30,8 @@ void main(List args) { // Needs to be called before using, so it loads the C++ library // KDDW.initLibraryLoader(); - runApp(const MyApp()); + DockRegistry.instance.rootMainWidget = const MyApp(); + DockRegistry.instance.recreateViews(); } class MyApp extends StatelessWidget { diff --git a/src/flutter/dart/lib/KDDockWidgets.dart b/src/flutter/dart/lib/KDDockWidgets.dart index eb9de05e5..2396fa4e5 100644 --- a/src/flutter/dart/lib/KDDockWidgets.dart +++ b/src/flutter/dart/lib/KDDockWidgets.dart @@ -11,9 +11,12 @@ library kddockwidgets; +import 'dart:ui'; + import 'package:KDDockWidgets/models/GeometryItem.dart'; import 'package:KDDockWidgets/models/Separator.dart'; import 'package:KDDockWidgets/private/Bindings.dart'; +import 'package:KDDockWidgets/widgets/FloatingWidget.dart'; import 'package:flutter/material.dart'; import 'dart:ffi' as ffi; diff --git a/src/flutter/dart/lib/models/DockRegistry.dart b/src/flutter/dart/lib/models/DockRegistry.dart index 26c769b2d..afc9988a2 100644 --- a/src/flutter/dart/lib/models/DockRegistry.dart +++ b/src/flutter/dart/lib/models/DockRegistry.dart @@ -16,6 +16,7 @@ class DockRegistry { final floatingItems = []; final dockItems = []; + late final Widget rootMainWidget; void addFloatingItem(FloatingItem floatingItem) { if (floatingItems.contains(floatingItem)) { @@ -27,6 +28,7 @@ class DockRegistry { } floatingItems.add(floatingItem); + recreateViews(); } void removeFloatingItem(FloatingItem floatingItem) { @@ -35,6 +37,7 @@ class DockRegistry { } floatingItems.remove(floatingItem); + recreateViews(); } void addDockItem(DockItem dockItem) { @@ -67,6 +70,35 @@ class DockRegistry { return floatingItems.contains(floatingItem); } + void recreateViews() { + final floatingViews = floatingItems.map((fi) { + return View( + view: PlatformDispatcher.instance.views + .where((v) => + v.viewId == 1) // TODO: Support more than 1 floating window + .first, + child: MaterialApp( + title: 'Floating Window', + theme: ThemeData( + colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple), + useMaterial3: true, + ), + home: Scaffold( + body: Container( + color: Colors.orange, + child: FloatingWidget(fi), + )))); + }); + + runWidget(ViewCollection(views: [ + View( + view: PlatformDispatcher.instance.implicitView!, + child: rootMainWidget, + ), + ...floatingViews + ])); + } + factory DockRegistry() { return _instance; }