fix tab state issues

This commit is contained in:
Fabian Freund
2025-03-11 23:26:39 +01:00
parent 86d1e9c455
commit 7d2700a481
5 changed files with 44 additions and 10 deletions
@@ -144,7 +144,7 @@ class TabRepository extends _$TabRepository {
final unassignedTabs = await ref
.read(containerRepositoryProvider.notifier)
.getContainerTabIds(currentContainerId);
.getContainerTabIds(null);
if (unassignedTabs.isNotEmpty) {
return _tabsService.selectTab(tabId: unassignedTabs.first);
@@ -6,7 +6,7 @@ part of 'tab.dart';
// RiverpodGenerator
// **************************************************************************
String _$tabRepositoryHash() => r'a798385b50c101e41b9789e92181cbd5b6188246';
String _$tabRepositoryHash() => r'10768bd2c880edd40f82ed49532d9e2e2043e61f';
/// See also [TabRepository].
@ProviderFor(TabRepository)
@@ -1,6 +1,7 @@
import 'package:flutter/material.dart';
import 'package:flutter_material_design_icons/flutter_material_design_icons.dart';
import 'package:lensai/features/geckoview/domain/entities/states/tab.dart';
import 'package:lensai/features/geckoview/features/browser/presentation/widgets/tab_icon.dart';
import 'package:skeletonizer/skeletonizer.dart';
import 'package:text_scroll/text_scroll.dart';
@@ -45,13 +46,7 @@ class AppBarTitle extends StatelessWidget {
onLongPress: onLongPress,
child: Row(
children: [
Skeletonizer(
enabled: tab.icon == null,
child: Skeleton.replace(
replacement: const Bone.icon(size: 16),
child: RawImage(image: tab.icon?.value, height: 16, width: 16),
),
),
TabIcon(state: tab),
const SizedBox(width: 8),
Expanded(
child: Column(
@@ -0,0 +1,38 @@
import 'package:flutter/material.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:lensai/domain/services/generic_website.dart';
import 'package:lensai/features/geckoview/domain/entities/states/tab.dart';
import 'package:lensai/presentation/hooks/cached_future.dart';
import 'package:skeletonizer/skeletonizer.dart';
class TabIcon extends HookConsumerWidget {
final TabState state;
final double iconSize;
const TabIcon({super.key, required this.state, this.iconSize = 16});
@override
Widget build(BuildContext context, WidgetRef ref) {
final icon = useCachedFuture(() async {
if (state.icon != null) {
return state.icon!.value;
}
final icon = await ref
.read(genericWebsiteServiceProvider.notifier)
.getCachedIcon(state.url);
return icon?.image.value;
});
return Skeletonizer(
enabled:
icon.connectionState != ConnectionState.done && icon.data == null,
child: Skeleton.replace(
replacement: Bone.icon(size: iconSize),
child: RawImage(image: icon.data, height: iconSize, width: iconSize),
),
);
}
}
@@ -3,6 +3,7 @@ import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:lensai/features/geckoview/domain/entities/states/tab.dart';
import 'package:lensai/features/geckoview/domain/providers/tab_state.dart';
import 'package:lensai/features/geckoview/domain/repositories/tab.dart';
import 'package:lensai/features/geckoview/features/browser/presentation/widgets/tab_icon.dart';
class TabPreview extends StatelessWidget {
final TabState tab;
@@ -66,7 +67,7 @@ class TabPreview extends StatelessWidget {
Row(
children: [
const SizedBox(width: 6.0),
RawImage(image: tab.icon?.value, height: 16, width: 16),
TabIcon(state: tab),
const SizedBox(width: 6.0),
Expanded(
child: Text(