improve find in page
This commit is contained in:
@@ -1,17 +1,23 @@
|
||||
import 'package:fast_equatable/fast_equatable.dart';
|
||||
|
||||
class FindResultState with FastEquatable {
|
||||
final String? lastSearchText;
|
||||
|
||||
final int activeMatchOrdinal;
|
||||
final int numberOfMatches;
|
||||
final bool isDoneCounting;
|
||||
|
||||
bool get hasMatches => numberOfMatches > 0;
|
||||
|
||||
FindResultState({
|
||||
required this.lastSearchText,
|
||||
required this.activeMatchOrdinal,
|
||||
required this.numberOfMatches,
|
||||
required this.isDoneCounting,
|
||||
});
|
||||
|
||||
factory FindResultState.$default() => FindResultState(
|
||||
lastSearchText: null,
|
||||
activeMatchOrdinal: -1,
|
||||
numberOfMatches: 0,
|
||||
isDoneCounting: false,
|
||||
@@ -19,6 +25,7 @@ class FindResultState with FastEquatable {
|
||||
|
||||
@override
|
||||
List<Object?> get hashParameters => [
|
||||
lastSearchText,
|
||||
activeMatchOrdinal,
|
||||
numberOfMatches,
|
||||
isDoneCounting,
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user