fix tab dispose bug, add Key for PageView children

This commit is contained in:
csf 2022-08-26 12:14:14 +08:00
parent c04168eb73
commit 14f34f589c
3 changed files with 11 additions and 8 deletions

View File

@ -30,12 +30,13 @@ class _ConnectionTabPageState extends State<ConnectionTabPage> {
_ConnectionTabPageState(Map<String, dynamic> params) { _ConnectionTabPageState(Map<String, dynamic> params) {
if (params['id'] != null) { if (params['id'] != null) {
tabController.state.value.tabs.add(TabInfo( tabController.add(TabInfo(
key: params['id'], key: params['id'],
label: params['id'], label: params['id'],
selectedIcon: selectedIcon, selectedIcon: selectedIcon,
unselectedIcon: unselectedIcon, unselectedIcon: unselectedIcon,
page: RemotePage( page: RemotePage(
key: ValueKey(params['id']),
id: params['id'], id: params['id'],
tabBarHeight: tabBarHeight:
_fullscreenID.value.isNotEmpty ? 0 : kDesktopRemoteTabBarHeight, _fullscreenID.value.isNotEmpty ? 0 : kDesktopRemoteTabBarHeight,
@ -63,8 +64,8 @@ class _ConnectionTabPageState extends State<ConnectionTabPage> {
label: id, label: id,
selectedIcon: selectedIcon, selectedIcon: selectedIcon,
unselectedIcon: unselectedIcon, unselectedIcon: unselectedIcon,
closable: false,
page: RemotePage( page: RemotePage(
key: ValueKey(id),
id: id, id: id,
tabBarHeight: _fullscreenID.value.isNotEmpty tabBarHeight: _fullscreenID.value.isNotEmpty
? 0 ? 0

View File

@ -19,13 +19,15 @@ class _DesktopTabPageState extends State<DesktopTabPage> {
@override @override
void initState() { void initState() {
super.initState(); super.initState();
tabController.state.value.tabs.add(TabInfo( tabController.add(TabInfo(
key: kTabLabelHomePage, key: kTabLabelHomePage,
label: kTabLabelHomePage, label: kTabLabelHomePage,
selectedIcon: Icons.home_sharp, selectedIcon: Icons.home_sharp,
unselectedIcon: Icons.home_outlined, unselectedIcon: Icons.home_outlined,
closable: false, closable: false,
page: DesktopHomePage())); page: DesktopHomePage(
key: const ValueKey(kTabLabelHomePage),
)));
} }
@override @override
@ -59,6 +61,6 @@ class _DesktopTabPageState extends State<DesktopTabPage> {
label: kTabLabelSettingPage, label: kTabLabelSettingPage,
selectedIcon: Icons.build_sharp, selectedIcon: Icons.build_sharp,
unselectedIcon: Icons.build_outlined, unselectedIcon: Icons.build_outlined,
page: DesktopSettingPage())); page: DesktopSettingPage(key: const ValueKey(kTabLabelSettingPage))));
} }
} }

View File

@ -26,12 +26,12 @@ class _FileManagerTabPageState extends State<FileManagerTabPage> {
static final IconData unselectedIcon = Icons.file_copy_outlined; static final IconData unselectedIcon = Icons.file_copy_outlined;
_FileManagerTabPageState(Map<String, dynamic> params) { _FileManagerTabPageState(Map<String, dynamic> params) {
tabController.state.value.tabs.add(TabInfo( tabController.add(TabInfo(
key: params['id'], key: params['id'],
label: params['id'], label: params['id'],
selectedIcon: selectedIcon, selectedIcon: selectedIcon,
unselectedIcon: unselectedIcon, unselectedIcon: unselectedIcon,
page: FileManagerPage(id: params['id']))); page: FileManagerPage(key: ValueKey(params['id']), id: params['id'])));
} }
@override @override
@ -53,7 +53,7 @@ class _FileManagerTabPageState extends State<FileManagerTabPage> {
label: id, label: id,
selectedIcon: selectedIcon, selectedIcon: selectedIcon,
unselectedIcon: unselectedIcon, unselectedIcon: unselectedIcon,
page: FileManagerPage(id: id))); page: FileManagerPage(key: ValueKey(id), id: id)));
} else if (call.method == "onDestroy") { } else if (call.method == "onDestroy") {
tabController.state.value.tabs.forEach((tab) { tabController.state.value.tabs.forEach((tab) {
print("executing onDestroy hook, closing ${tab.label}}"); print("executing onDestroy hook, closing ${tab.label}}");