diff --git a/Cargo.lock b/Cargo.lock index 7dedfde5a..9a129977c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2440,7 +2440,7 @@ checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" [[package]] name = "hwcodec" version = "0.1.0" -source = "git+https://github.com/21pages/hwcodec#890204e0703a3d361fc7a45f035fe75c0575bb1d" +source = "git+https://github.com/21pages/hwcodec#1f03d203eca24dc976c21a47228f3bc31484c2bc" dependencies = [ "bindgen", "cc", diff --git a/flutter/lib/desktop/pages/desktop_home_page.dart b/flutter/lib/desktop/pages/desktop_home_page.dart index d238a5690..3aec884aa 100644 --- a/flutter/lib/desktop/pages/desktop_home_page.dart +++ b/flutter/lib/desktop/pages/desktop_home_page.dart @@ -5,6 +5,8 @@ import 'package:flutter/material.dart' hide MenuItem; import 'package:flutter/services.dart'; import 'package:flutter_hbb/common.dart'; import 'package:flutter_hbb/desktop/pages/connection_page.dart'; +import 'package:flutter_hbb/desktop/pages/desktop_setting_page.dart'; +import 'package:flutter_hbb/desktop/pages/desktop_tab_page.dart'; import 'package:flutter_hbb/models/platform_model.dart'; import 'package:flutter_hbb/models/server_model.dart'; import 'package:flutter_hbb/utils/multi_window_manager.dart'; @@ -161,7 +163,7 @@ class _DesktopHomePageState extends State final textColor = Theme.of(context).textTheme.titleLarge?.color; RxBool hover = false.obs; return InkWell( - onTap: () async {}, + onTap: DesktopTabPage.onAddSetting, child: Obx( () => CircleAvatar( radius: 15, @@ -252,7 +254,7 @@ class _DesktopHomePageState extends State size: 22, ).marginOnly(right: 8, bottom: 2), ), - onTap: () => {}, + onTap: () => DesktopSettingPage.switch2page(1), onHover: (value) => editHover.value = value, ), ], diff --git a/flutter/lib/desktop/pages/desktop_setting_page.dart b/flutter/lib/desktop/pages/desktop_setting_page.dart index 60da78856..610537766 100644 --- a/flutter/lib/desktop/pages/desktop_setting_page.dart +++ b/flutter/lib/desktop/pages/desktop_setting_page.dart @@ -6,6 +6,7 @@ import 'package:flutter/services.dart'; import 'package:flutter_hbb/common.dart'; import 'package:flutter_hbb/consts.dart'; import 'package:flutter_hbb/desktop/pages/desktop_home_page.dart'; +import 'package:flutter_hbb/desktop/pages/desktop_tab_page.dart'; import 'package:flutter_hbb/models/platform_model.dart'; import 'package:flutter_hbb/models/server_model.dart'; import 'package:get/get.dart'; @@ -27,6 +28,8 @@ const double _kListViewBottomMargin = 15; const double _kTitleFontSize = 20; const double _kContentFontSize = 15; const Color _accentColor = MyTheme.accent; +const String _kSettingPageControllerTag = "settingPageController"; +const String _kSettingPageIndexTag = "settingPageIndex"; class _TabInfo { late final String label; @@ -36,10 +39,30 @@ class _TabInfo { } class DesktopSettingPage extends StatefulWidget { - const DesktopSettingPage({Key? key}) : super(key: key); + final int initialPage; + + const DesktopSettingPage({Key? key, required this.initialPage}) + : super(key: key); @override State createState() => _DesktopSettingPageState(); + + static void switch2page(int page) { + if (page >= 5) return; + try { + if (Get.isRegistered(tag: _kSettingPageControllerTag)) { + DesktopTabPage.onAddSetting(initialPage: page); + PageController controller = Get.find(tag: _kSettingPageControllerTag); + RxInt selectedIndex = Get.find(tag: _kSettingPageIndexTag); + selectedIndex.value = page; + controller.jumpToPage(page); + } else { + DesktopTabPage.onAddSetting(initialPage: page); + } + } catch (e) { + debugPrint('$e'); + } + } } class _DesktopSettingPageState extends State @@ -54,7 +77,7 @@ class _DesktopSettingPageState extends State ]; late PageController controller; - RxInt selectedIndex = 0.obs; + late RxInt selectedIndex; @override bool get wantKeepAlive => true; @@ -62,7 +85,17 @@ class _DesktopSettingPageState extends State @override void initState() { super.initState(); - controller = PageController(); + selectedIndex = (widget.initialPage < 5 ? widget.initialPage : 0).obs; + Get.put(selectedIndex, tag: _kSettingPageIndexTag); + controller = PageController(initialPage: widget.initialPage); + Get.put(controller, tag: _kSettingPageControllerTag); + } + + @override + void dispose() { + super.dispose(); + Get.delete(tag: _kSettingPageControllerTag); + Get.delete(tag: _kSettingPageIndexTag); } @override diff --git a/flutter/lib/desktop/pages/desktop_tab_page.dart b/flutter/lib/desktop/pages/desktop_tab_page.dart index cd79e127b..82a9227c7 100644 --- a/flutter/lib/desktop/pages/desktop_tab_page.dart +++ b/flutter/lib/desktop/pages/desktop_tab_page.dart @@ -14,6 +14,23 @@ class DesktopTabPage extends StatefulWidget { @override State createState() => _DesktopTabPageState(); + + static void onAddSetting({int initialPage = 0}) { + try { + DesktopTabController tabController = Get.find(); + tabController.add(TabInfo( + key: kTabLabelSettingPage, + label: kTabLabelSettingPage, + selectedIcon: Icons.build_sharp, + unselectedIcon: Icons.build_outlined, + page: DesktopSettingPage( + key: const ValueKey(kTabLabelSettingPage), + initialPage: initialPage, + ))); + } catch (e) { + debugPrint('$e'); + } + } } class _DesktopTabPageState extends State { @@ -22,6 +39,7 @@ class _DesktopTabPageState extends State { @override void initState() { super.initState(); + Get.put(tabController); tabController.add(TabInfo( key: kTabLabelHomePage, label: kTabLabelHomePage, @@ -33,6 +51,12 @@ class _DesktopTabPageState extends State { ))); } + @override + void dispose() { + super.dispose(); + Get.delete(); + } + @override Widget build(BuildContext context) { RxBool fullscreen = false.obs; @@ -48,7 +72,7 @@ class _DesktopTabPageState extends State { tail: ActionIcon( message: 'Settings', icon: IconFont.menu, - onTap: onAddSetting, + onTap: DesktopTabPage.onAddSetting, isClose: false, ), )); @@ -62,13 +86,4 @@ class _DesktopTabPageState extends State { fullscreen.value ? kFullScreenEdgeSize : kWindowEdgeSize, child: tabWidget)); } - - void onAddSetting() { - tabController.add(TabInfo( - key: kTabLabelSettingPage, - label: kTabLabelSettingPage, - selectedIcon: Icons.build_sharp, - unselectedIcon: Icons.build_outlined, - page: DesktopSettingPage(key: const ValueKey(kTabLabelSettingPage)))); - } } diff --git a/flutter/pubspec.lock b/flutter/pubspec.lock index f1921779e..3d55e5598 100644 --- a/flutter/pubspec.lock +++ b/flutter/pubspec.lock @@ -243,8 +243,8 @@ packages: dependency: "direct main" description: path: "." - ref: fee851fa43116e0b91c39acd0ec37063dc6015f8 - resolved-ref: fee851fa43116e0b91c39acd0ec37063dc6015f8 + ref: "1818097611168f6148317f4c527aa45ff29d5850" + resolved-ref: "1818097611168f6148317f4c527aa45ff29d5850" url: "https://github.com/Kingtous/rustdesk_desktop_multi_window" source: git version: "0.1.0"