improved tab handling by id

This commit is contained in:
Fabian Freund
2024-08-19 04:27:47 +02:00
parent a465195ec4
commit 23dad27d61
12 changed files with 78 additions and 40 deletions
@@ -542,7 +542,7 @@ class KagiScreen extends HookConsumerWidget {
if (activeWebView?.key != null && webViews.length > 1) {
ref
.read(webViewRepositoryProvider.notifier)
.closeTab(activeWebView!.key!);
.closeTab(activeWebView!.tabId);
return true;
} else {
//Mark back as unhandled and navigator will pop
@@ -584,13 +584,13 @@ class KagiScreen extends HookConsumerWidget {
(activeWebView != null)
? webViews.keys
.toList()
.indexOf(activeWebView.page.value.key)
.indexOf(activeWebView.tabId)
: null,
),
index: (activeWebView != null)
? webViews.keys
.toList()
.indexOf(activeWebView.page.value.key) +
.indexOf(activeWebView.tabId) +
1
: 0,
children: [const LandingContent(), ...webViews.values],
@@ -3,6 +3,7 @@ import 'dart:async';
import 'package:flutter/material.dart';
import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:lensai/features/web_view/domain/entities/abstract/tab.dart';
import 'package:lensai/features/web_view/domain/repositories/web_view.dart';
import 'package:lensai/features/web_view/presentation/controllers/switch_new_tab.dart';
import 'package:lensai/features/web_view/presentation/widgets/web_view_tab.dart';
@@ -109,7 +110,7 @@ class ViewTabsSheet extends HookConsumerWidget {
);
final activeTab = ref.watch(
webViewTabControllerProvider.select(
(webView) => webView?.page.value.key,
(webView) => webView?.tabId,
),
);
@@ -128,7 +129,7 @@ class ViewTabsSheet extends HookConsumerWidget {
useEffect(
() {
final index =
tabs.indexWhere((webView) => webView.key == activeTab);
tabs.indexWhere((webView) => webView.tabId == activeTab);
if (index > -1) {
final reversedIndex = tabs.length - 1 - index;
@@ -160,10 +161,17 @@ class ViewTabsSheet extends HookConsumerWidget {
crossAxisCount: 2,
children: tabs.reversed
.map(
(webView) => WebViewTab(
webView: webView,
isActive: webView.key == activeTab,
onClose: onClose,
(webView) => HookBuilder(
key: ValueKey(webView.tabId),
builder: (context) {
final tab = useValueListenable(webView.page) as ITab;
return WebViewTab(
tab: tab,
isActive: webView.tabId == activeTab,
onClose: onClose,
);
},
),
)
.toList(),