Skip to content

Commit

Permalink
flutter: disconnect connections when disposing group
Browse files Browse the repository at this point in the history
  • Loading branch information
iamsergio committed Jan 19, 2025
1 parent fddde1a commit ae38238
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 3 deletions.
23 changes: 23 additions & 0 deletions src/flutter/dart/lib/HasConnections.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
/*
This file is part of KDDockWidgets.
SPDX-FileCopyrightText: 2025 Klarälvdalens Datakonsult AB, a KDAB Group company <[email protected]>
Author: Sérgio Martins <[email protected]>
SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only
Contact KDAB at <[email protected]> for commercial licensing options.
*/

import 'package:signals_slots/signals_slots.dart';

mixin HasConnections {
final List<Connection> connections = [];
void connect(var signal, action) {
connections.add(signal.connect(action));
}

void disconnect() {
for (var con in connections) con.disconnect();
}
}
15 changes: 12 additions & 3 deletions src/flutter/dart/lib/widgets/GroupWidget.dart
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,15 @@
Contact KDAB at <[email protected]> for commercial licensing options.
*/

import 'package:KDDockWidgets/HasConnections.dart';
import 'package:KDDockWidgets/KDDockWidgets.dart';
import 'package:KDDockWidgets/widgets/PositionedWidget.dart';
import 'package:KDDockWidgets/widgets/TabBarWidget.dart';
import 'package:KDDockWidgets/widgets/TitleBarWidget.dart';
import 'package:KDDockWidgets/widgets/DockWidget.dart';

import 'package:flutter/material.dart';
import 'package:signals_slots/signals_slots.dart';

class GroupWidget extends PositionedWidget {
final Group group;
Expand All @@ -27,18 +29,25 @@ class GroupWidget extends PositionedWidget {
}
}

class GroupWidgetState extends PositionedWidgetState {
class GroupWidgetState extends PositionedWidgetState with HasConnections {
final Group group;

GroupWidgetState(this.group) : super(group) {
group.changed.connect(() {
connect(group.changed, () {
setState(() {});
});

group.titleChanged.connect(() {
connect(group.titleChanged, () {
setState(() {});
});
}

@override
void dispose() {
disconnect();
super.dispose();
}

@override
Widget buildContents(BuildContext ctx) {
final titleBarWidget = TitleBarWidget(group.titlebar);
Expand Down

0 comments on commit ae38238

Please sign in to comment.