fix can't update isMaximized IconButton via double click title logo
This commit is contained in:
parent
516ff4221b
commit
76581d46f2
@ -191,6 +191,8 @@ class DesktopTab extends StatelessWidget {
|
|||||||
|
|
||||||
final DesktopTabController controller;
|
final DesktopTabController controller;
|
||||||
Rx<DesktopTabState> get state => controller.state;
|
Rx<DesktopTabState> get state => controller.state;
|
||||||
|
final isMaximized = false.obs;
|
||||||
|
|
||||||
late final DesktopTabType tabType;
|
late final DesktopTabType tabType;
|
||||||
late final bool isMainWindow;
|
late final bool isMainWindow;
|
||||||
|
|
||||||
@ -297,8 +299,10 @@ class DesktopTab extends StatelessWidget {
|
|||||||
width: 78,
|
width: 78,
|
||||||
)),
|
)),
|
||||||
GestureDetector(
|
GestureDetector(
|
||||||
onDoubleTap: () =>
|
onDoubleTap: showMaximize
|
||||||
showMaximize ? toggleMaximize(isMainWindow) : null,
|
? () => toggleMaximize(isMainWindow)
|
||||||
|
.then((value) => isMaximized.value = value)
|
||||||
|
: null,
|
||||||
onPanStart: (_) => startDragging(isMainWindow),
|
onPanStart: (_) => startDragging(isMainWindow),
|
||||||
child: Row(children: [
|
child: Row(children: [
|
||||||
Offstage(
|
Offstage(
|
||||||
@ -331,6 +335,7 @@ class DesktopTab extends StatelessWidget {
|
|||||||
tabType: tabType,
|
tabType: tabType,
|
||||||
state: state,
|
state: state,
|
||||||
tail: tail,
|
tail: tail,
|
||||||
|
isMaximized: isMaximized,
|
||||||
showMinimize: showMinimize,
|
showMinimize: showMinimize,
|
||||||
showMaximize: showMaximize,
|
showMaximize: showMaximize,
|
||||||
showClose: showClose,
|
showClose: showClose,
|
||||||
@ -345,6 +350,7 @@ class WindowActionPanel extends StatefulWidget {
|
|||||||
final bool isMainWindow;
|
final bool isMainWindow;
|
||||||
final DesktopTabType tabType;
|
final DesktopTabType tabType;
|
||||||
final Rx<DesktopTabState> state;
|
final Rx<DesktopTabState> state;
|
||||||
|
final RxBool isMaximized;
|
||||||
|
|
||||||
final bool showMinimize;
|
final bool showMinimize;
|
||||||
final bool showMaximize;
|
final bool showMaximize;
|
||||||
@ -357,6 +363,7 @@ class WindowActionPanel extends StatefulWidget {
|
|||||||
required this.isMainWindow,
|
required this.isMainWindow,
|
||||||
required this.tabType,
|
required this.tabType,
|
||||||
required this.state,
|
required this.state,
|
||||||
|
required this.isMaximized,
|
||||||
this.tail,
|
this.tail,
|
||||||
this.showMinimize = true,
|
this.showMinimize = true,
|
||||||
this.showMaximize = true,
|
this.showMaximize = true,
|
||||||
@ -372,30 +379,31 @@ class WindowActionPanel extends StatefulWidget {
|
|||||||
|
|
||||||
class WindowActionPanelState extends State<WindowActionPanel>
|
class WindowActionPanelState extends State<WindowActionPanel>
|
||||||
with MultiWindowListener, WindowListener {
|
with MultiWindowListener, WindowListener {
|
||||||
bool isMaximized = false;
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void initState() {
|
void initState() {
|
||||||
super.initState();
|
super.initState();
|
||||||
DesktopMultiWindow.addListener(this);
|
DesktopMultiWindow.addListener(this);
|
||||||
windowManager.addListener(this);
|
windowManager.addListener(this);
|
||||||
|
|
||||||
if (widget.isMainWindow) {
|
Future.delayed(Duration(milliseconds: 500), () {
|
||||||
windowManager.isMaximized().then((maximized) {
|
if (widget.isMainWindow) {
|
||||||
if (isMaximized != maximized) {
|
windowManager.isMaximized().then((maximized) {
|
||||||
WidgetsBinding.instance.addPostFrameCallback(
|
if (widget.isMaximized.value != maximized) {
|
||||||
(_) => setState(() => isMaximized = maximized));
|
WidgetsBinding.instance.addPostFrameCallback(
|
||||||
}
|
(_) => setState(() => widget.isMaximized.value = maximized));
|
||||||
});
|
}
|
||||||
} else {
|
});
|
||||||
final wc = WindowController.fromWindowId(windowId!);
|
} else {
|
||||||
wc.isMaximized().then((maximized) {
|
final wc = WindowController.fromWindowId(windowId!);
|
||||||
if (isMaximized != maximized) {
|
wc.isMaximized().then((maximized) {
|
||||||
WidgetsBinding.instance.addPostFrameCallback(
|
debugPrint("isMaximized $maximized");
|
||||||
(_) => setState(() => isMaximized = maximized));
|
if (widget.isMaximized.value != maximized) {
|
||||||
}
|
WidgetsBinding.instance.addPostFrameCallback(
|
||||||
});
|
(_) => setState(() => widget.isMaximized.value = maximized));
|
||||||
}
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@ -408,8 +416,8 @@ class WindowActionPanelState extends State<WindowActionPanel>
|
|||||||
@override
|
@override
|
||||||
void onWindowMaximize() {
|
void onWindowMaximize() {
|
||||||
// catch maximize from system
|
// catch maximize from system
|
||||||
if (!isMaximized) {
|
if (!widget.isMaximized.value) {
|
||||||
setState(() => isMaximized = true);
|
widget.isMaximized.value = true;
|
||||||
}
|
}
|
||||||
super.onWindowMaximize();
|
super.onWindowMaximize();
|
||||||
}
|
}
|
||||||
@ -417,8 +425,8 @@ class WindowActionPanelState extends State<WindowActionPanel>
|
|||||||
@override
|
@override
|
||||||
void onWindowUnmaximize() {
|
void onWindowUnmaximize() {
|
||||||
// catch unmaximize from system
|
// catch unmaximize from system
|
||||||
if (isMaximized) {
|
if (widget.isMaximized.value) {
|
||||||
setState(() => isMaximized = false);
|
widget.isMaximized.value = false;
|
||||||
}
|
}
|
||||||
super.onWindowUnmaximize();
|
super.onWindowUnmaximize();
|
||||||
}
|
}
|
||||||
@ -450,12 +458,14 @@ class WindowActionPanelState extends State<WindowActionPanel>
|
|||||||
)),
|
)),
|
||||||
Offstage(
|
Offstage(
|
||||||
offstage: !widget.showMaximize,
|
offstage: !widget.showMaximize,
|
||||||
child: ActionIcon(
|
child: Obx(() => ActionIcon(
|
||||||
message: isMaximized ? "Restore" : "Maximize",
|
message: widget.isMaximized.value ? "Restore" : "Maximize",
|
||||||
icon: isMaximized ? IconFont.restore : IconFont.max,
|
icon: widget.isMaximized.value
|
||||||
onTap: _toggleMaximize,
|
? IconFont.restore
|
||||||
isClose: false,
|
: IconFont.max,
|
||||||
)),
|
onTap: _toggleMaximize,
|
||||||
|
isClose: false,
|
||||||
|
))),
|
||||||
Offstage(
|
Offstage(
|
||||||
offstage: !widget.showClose,
|
offstage: !widget.showClose,
|
||||||
child: ActionIcon(
|
child: ActionIcon(
|
||||||
@ -482,9 +492,9 @@ class WindowActionPanelState extends State<WindowActionPanel>
|
|||||||
|
|
||||||
void _toggleMaximize() {
|
void _toggleMaximize() {
|
||||||
toggleMaximize(widget.isMainWindow).then((maximize) {
|
toggleMaximize(widget.isMainWindow).then((maximize) {
|
||||||
if (isMaximized != maximize) {
|
if (widget.isMaximized.value != maximize) {
|
||||||
// setState for sub window, wc.unmaximize/maximize() will not invoke onWindowMaximize/Unmaximize
|
// update state for sub window, wc.unmaximize/maximize() will not invoke onWindowMaximize/Unmaximize
|
||||||
setState(() => isMaximized = !isMaximized);
|
widget.isMaximized.value = maximize;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user