Skip to content

Commit

Permalink
flutter: Create a View when we create a floating window
Browse files Browse the repository at this point in the history
This is assuming the embedder has a secondary view already. This
is just for testing. In a followup we'll need to use flutter api
to create the window (this api doesn't exist yet)
iamsergio committed Jan 24, 2025

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
1 parent 4c2e149 commit 3194a75
Showing 3 changed files with 37 additions and 1 deletion.
3 changes: 2 additions & 1 deletion examples/flutter/lib/main.dart
Original file line number Diff line number Diff line change
@@ -30,7 +30,8 @@ void main(List<String> 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 {
3 changes: 3 additions & 0 deletions src/flutter/dart/lib/KDDockWidgets.dart
Original file line number Diff line number Diff line change
@@ -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;
32 changes: 32 additions & 0 deletions src/flutter/dart/lib/models/DockRegistry.dart
Original file line number Diff line number Diff line change
@@ -16,6 +16,7 @@ class DockRegistry {

final floatingItems = <FloatingItem>[];
final dockItems = <DockItem>[];
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;
}

0 comments on commit 3194a75

Please sign in to comment.