improve find in page

This commit is contained in:
Fabian Freund
2025-05-05 14:32:19 +02:00
parent 53bba6e633
commit 98191f38d3
10 changed files with 274 additions and 73 deletions
@@ -9,9 +9,11 @@ import 'package:lensai/features/geckoview/domain/entities/states/security.dart';
import 'package:lensai/features/geckoview/domain/entities/states/tab.dart';
import 'package:lensai/features/geckoview/domain/providers.dart';
import 'package:lensai/features/geckoview/domain/providers/selected_tab.dart';
import 'package:lensai/features/geckoview/features/find_in_page/domain/repositories/find_in_page.dart';
import 'package:lensai/features/geckoview/utils/image_helper.dart';
import 'package:riverpod/riverpod.dart';
import 'package:riverpod_annotation/riverpod_annotation.dart';
import 'package:rxdart/rxdart.dart';
part 'tab_state.g.dart';
@@ -105,19 +107,24 @@ class TabStates extends _$TabStates {
void _onFindResultsChange(FindResultsEvent event) {
final FindResultsEvent(:tabId, :results) = event;
final current = state[tabId] ?? TabState.$default(tabId);
if (results.isNotEmpty) {
final result = results.last;
final current = state[tabId] ?? TabState.$default(tabId);
state = {...state}
..[tabId] = current.copyWith.findResultState(
FindResultState(
lastSearchText: ref.read(findInPageRepositoryProvider(tabId)),
activeMatchOrdinal: result.activeMatchOrdinal,
numberOfMatches: result.numberOfMatches,
isDoneCounting: result.isDoneCounting,
),
);
} else if (current.findResultState.hasMatches) {
state = {
...state,
}..[tabId] = current.copyWith.findResultState(FindResultState.$default());
}
}
@@ -144,9 +151,11 @@ class TabStates extends _$TabStates {
eventService.readerableEvents.listen((event) {
_onReaderableStateChange(event);
}),
eventService.findResultsEvent.listen((event) {
_onFindResultsChange(event);
}),
eventService.findResultsEvent
.debounceTime(const Duration(milliseconds: 25))
.listen((event) {
_onFindResultsChange(event);
}),
];
ref.listen(fireImmediately: true, engineReadyStateProvider, (
@@ -160,7 +160,7 @@ final selectedTabStateProvider = AutoDisposeProvider<TabState?>.internal(
@Deprecated('Will be removed in 3.0. Use Ref instead')
// ignore: unused_element
typedef SelectedTabStateRef = AutoDisposeProviderRef<TabState?>;
String _$tabStatesHash() => r'3a906aec8c4e650de8d5d2461ff45a99b8a0a3b9';
String _$tabStatesHash() => r'f0b7b4fbfab633695b3e7e7457a6f84bc6e81b88';
/// See also [TabStates].
@ProviderFor(TabStates)