From d48a94e5309cda5124befa3bee5dfd52383454ea Mon Sep 17 00:00:00 2001
From: 21pages <pages21@163.com>
Date: Sat, 22 Oct 2022 21:55:36 +0800
Subject: [PATCH] forceUpdate when unminisized on windows

Signed-off-by: 21pages <pages21@163.com>
---
 .../lib/desktop/pages/connection_page.dart    | 22 ++++++++++++++++++-
 1 file changed, 21 insertions(+), 1 deletion(-)

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<ConnectionPage>
-    with SingleTickerProviderStateMixin {
+    with SingleTickerProviderStateMixin, WindowListener {
   /// Controller for the id input bar.
   final _idController = IDTextEditingController();
 
@@ -43,6 +45,8 @@ class _ConnectionPageState extends State<ConnectionPage>
   var svcStatusCode = 0.obs;
   var svcIsUsingPublicServer = true.obs;
 
+  bool isWindowMinisized = false;
+
   @override
   void initState() {
     super.initState();
@@ -63,6 +67,7 @@ class _ConnectionPageState extends State<ConnectionPage>
       _idInputFocused.value = _idFocusNode.hasFocus;
     });
     Get.put<RxBool>(svcStopped, tag: 'service-stop');
+    windowManager.addListener(this);
   }
 
   @override
@@ -70,9 +75,24 @@ class _ConnectionPageState extends State<ConnectionPage>
     _idController.dispose();
     _updateTimer?.cancel();
     Get.delete<RxBool>(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(