From e7ac6eb0d21c27120fa5d2f6a3d645ff045fdcc2 Mon Sep 17 00:00:00 2001 From: fufesou Date: Fri, 4 Nov 2022 21:43:51 +0800 Subject: [PATCH] desktop cm chat page Signed-off-by: fufesou --- flutter/lib/desktop/pages/server_page.dart | 3 +- flutter/lib/models/chat_model.dart | 44 +++++++++++++--------- flutter/lib/models/server_model.dart | 4 +- 3 files changed, 29 insertions(+), 22 deletions(-) diff --git a/flutter/lib/desktop/pages/server_page.dart b/flutter/lib/desktop/pages/server_page.dart index d04f7871f..884ac6441 100644 --- a/flutter/lib/desktop/pages/server_page.dart +++ b/flutter/lib/desktop/pages/server_page.dart @@ -101,6 +101,7 @@ class ConnectionManagerState extends State { gFFI.serverModel.updateClientState(); gFFI.serverModel.tabController.onSelected = (index, _) => gFFI.chatModel.changeCurrentID(gFFI.serverModel.clients[index].id); + gFFI.chatModel.isConnManager = true; super.initState(); } @@ -159,7 +160,7 @@ class ConnectionManagerState extends State { pageViewBuilder: (pageView) => Row(children: [ Expanded(child: pageView), Consumer( - builder: (_, model, child) => model.isShowChatPage + builder: (_, model, child) => model.isShowCMChatPage ? Expanded(child: Scaffold(body: ChatPage())) : Offstage()) ]))); diff --git a/flutter/lib/models/chat_model.dart b/flutter/lib/models/chat_model.dart index aaa81382c..2fdede718 100644 --- a/flutter/lib/models/chat_model.dart +++ b/flutter/lib/models/chat_model.dart @@ -34,6 +34,7 @@ class ChatModel with ChangeNotifier { OverlayEntry? chatWindowOverlayEntry; bool _showOnWindowRestore = false; bool _isWindowMinimized = false; + bool isConnManager = false; final ChatUser me = ChatUser( id: "", @@ -44,13 +45,13 @@ class ChatModel with ChangeNotifier { MessageBody(me, []); var _currentID = clientModeID; - late bool _isShowChatPage = false; + late bool _isShowCMChatPage = false; Map get messages => _messages; int get currentID => _currentID; - bool get isShowChatPage => _isShowChatPage; + bool get isShowCMChatPage => _isShowCMChatPage; final WeakReference parent; @@ -71,7 +72,6 @@ class ChatModel with ChangeNotifier { setWindowMinimized(bool v) { _isWindowMinimized = v; if (!_isWindowMinimized && _showOnWindowRestore) { - showChatIconOverlay(); _showOnWindowRestore = false; } } @@ -158,9 +158,11 @@ class ChatModel with ChangeNotifier { } } + _isChatOverlayHide() => ((!isDesktop && chatIconOverlayEntry == null) || + chatWindowOverlayEntry == null); + toggleChatOverlay() { - if ((!isDesktop && chatIconOverlayEntry == null) || - chatWindowOverlayEntry == null) { + if (_isChatOverlayHide()) { gFFI.invokeMethod("enable_soft_keyboard", true); if (!isDesktop) { showChatIconOverlay(); @@ -172,12 +174,24 @@ class ChatModel with ChangeNotifier { } } + showChatPage(int id) async { + if (isConnManager) { + if (!_isShowCMChatPage) { + await toggleCMChatPage(id); + } + } else { + if (_isChatOverlayHide()) { + await toggleChatOverlay(); + } + } + } + toggleCMChatPage(int id) async { if (gFFI.chatModel.currentID != id) { gFFI.chatModel.changeCurrentID(id); } - if (_isShowChatPage) { - _isShowChatPage = !_isShowChatPage; + if (_isShowCMChatPage) { + _isShowCMChatPage = !_isShowCMChatPage; notifyListeners(); await windowManager.setSize(Size(300, 400)); await windowManager.setAlignment(Alignment.topRight); @@ -185,7 +199,7 @@ class ChatModel with ChangeNotifier { await windowManager.setSize(Size(600, 400)); await Future.delayed(Duration(milliseconds: 100)); await windowManager.setAlignment(Alignment.topRight); - _isShowChatPage = !_isShowChatPage; + _isShowCMChatPage = !_isShowCMChatPage; notifyListeners(); } } @@ -219,17 +233,11 @@ class ChatModel with ChangeNotifier { } if (text.isEmpty) return; // mobile: first message show overlay icon - if (chatIconOverlayEntry == null) { - if (_isWindowMinimized) { - showChatIconOverlay(); - } else { - _showOnWindowRestore = true; - } - } - // desktop: show chat page - if (!_isShowChatPage) { - toggleCMChatPage(id); + if (!isDesktop && chatIconOverlayEntry == null) { + showChatIconOverlay(); } + // show chat page + await showChatPage(id); int toId = currentID; diff --git a/flutter/lib/models/server_model.dart b/flutter/lib/models/server_model.dart index 6671ec669..d407ca51b 100644 --- a/flutter/lib/models/server_model.dart +++ b/flutter/lib/models/server_model.dart @@ -407,9 +407,7 @@ class ServerModel with ChangeNotifier { if (client.hasUnreadChatMessage.value) { client.hasUnreadChatMessage.value = false; final chatModel = parent.target!.chatModel; - if (!chatModel.isShowChatPage) { - chatModel.toggleCMChatPage(client.id); - } + chatModel.showChatPage(client.id); } }, page: desktop.buildConnectionCard(client)));