diff --git a/flutter/lib/desktop/pages/connection_page.dart b/flutter/lib/desktop/pages/connection_page.dart index 30b685347..506a03b7a 100644 --- a/flutter/lib/desktop/pages/connection_page.dart +++ b/flutter/lib/desktop/pages/connection_page.dart @@ -2,6 +2,7 @@ import 'dart:async'; import 'dart:convert'; +import 'dart:io'; import 'package:flutter/material.dart'; import 'package:flutter_hbb/common/widgets/address_book.dart'; @@ -9,6 +10,7 @@ import 'package:flutter_hbb/consts.dart'; import 'package:flutter_hbb/desktop/widgets/scroll_wrapper.dart'; import 'package:get/get.dart'; import 'package:url_launcher/url_launcher_string.dart'; +import 'package:window_manager/window_manager.dart'; import '../../common.dart'; import '../../common/formatter/id_formatter.dart'; @@ -27,7 +29,7 @@ class ConnectionPage extends StatefulWidget { /// State for the connection page. class _ConnectionPageState extends State - with SingleTickerProviderStateMixin { + with SingleTickerProviderStateMixin, WindowListener { /// Controller for the id input bar. final _idController = IDTextEditingController(); @@ -43,6 +45,8 @@ class _ConnectionPageState extends State var svcStatusCode = 0.obs; var svcIsUsingPublicServer = true.obs; + bool isWindowMinisized = false; + @override void initState() { super.initState(); @@ -63,6 +67,7 @@ class _ConnectionPageState extends State _idInputFocused.value = _idFocusNode.hasFocus; }); Get.put(svcStopped, tag: 'service-stop'); + windowManager.addListener(this); } @override @@ -70,9 +75,24 @@ class _ConnectionPageState extends State _idController.dispose(); _updateTimer?.cancel(); Get.delete(tag: 'service-stop'); + windowManager.removeListener(this); super.dispose(); } + @override + void onWindowEvent(String eventName) { + super.onWindowEvent(eventName); + if (eventName == 'minimize') { + isWindowMinisized = true; + } else if (eventName == 'maximize' || eventName == 'restore') { + if (isWindowMinisized && Platform.isWindows) { + // windows can't update when minisized. + Get.forceAppUpdate(); + } + isWindowMinisized = false; + } + } + @override Widget build(BuildContext context) { return Column(