dismiss suggestion

This commit is contained in:
Fabian Freund
2025-05-17 20:33:48 +02:00
parent f265e4954c
commit 76bfe3658c
3 changed files with 48 additions and 12 deletions
@@ -8,6 +8,7 @@ import 'package:lensai/features/geckoview/features/search/domain/providers/engin
import 'package:lensai/presentation/hooks/listenable_callback.dart';
import 'package:lensai/presentation/widgets/auto_suggest_text_field.dart';
import 'package:lensai/utils/uri_parser.dart' as uri_parser;
import 'package:nullability/nullability.dart';
class AddressWithSuggestionsField extends HookConsumerWidget {
const AddressWithSuggestionsField({
@@ -27,15 +28,26 @@ class AddressWithSuggestionsField extends HookConsumerWidget {
final addressTextFocusNode = useFocusNode();
final suggestion = useState<String?>(null);
final lastText = useRef<String>(addressTextController.text);
useListenableCallback(addressTextController, () async {
if (addressTextController.text.isNotEmpty) {
final result = await ref
.read(engineSuggestionsProvider.notifier)
.getAutocompleteSuggestion(addressTextController.text);
if (suggestion.value.isNotEmpty &&
lastText.value.length > 1 &&
addressTextController.text ==
lastText.value.substring(0, lastText.value.length - 1)) {
suggestion.value = null;
addressTextController.text = lastText.value;
} else if (addressTextController.text != lastText.value) {
final result = await ref
.read(engineSuggestionsProvider.notifier)
.getAutocompleteSuggestion(addressTextController.text);
suggestion.value = result;
suggestion.value = result;
}
}
lastText.value = addressTextController.text;
});
return AutoSuggestTextField(
@@ -6,6 +6,7 @@ import 'package:lensai/presentation/hooks/listenable_callback.dart';
import 'package:lensai/presentation/widgets/auto_suggest_text_field.dart';
import 'package:lensai/utils/form_validators.dart';
import 'package:lensai/utils/uri_parser.dart' as uri_parser;
import 'package:nullability/nullability.dart';
class EditUrlDialog extends HookConsumerWidget {
final Uri initialUrl;
@@ -26,15 +27,26 @@ class EditUrlDialog extends HookConsumerWidget {
final addressTextFocusNode = useFocusNode();
final suggestion = useState<String?>(null);
final lastText = useRef<String>(addressTextController.text);
useListenableCallback(addressTextController, () async {
if (addressTextController.text.isNotEmpty) {
final result = await ref
.read(engineSuggestionsProvider.notifier)
.getAutocompleteSuggestion(addressTextController.text);
if (suggestion.value.isNotEmpty &&
lastText.value.length > 1 &&
addressTextController.text ==
lastText.value.substring(0, lastText.value.length - 1)) {
suggestion.value = null;
addressTextController.text = lastText.value;
} else if (addressTextController.text != lastText.value) {
final result = await ref
.read(engineSuggestionsProvider.notifier)
.getAutocompleteSuggestion(addressTextController.text);
suggestion.value = result;
suggestion.value = result;
}
}
lastText.value = addressTextController.text;
});
return Form(
@@ -8,6 +8,7 @@ import 'package:lensai/presentation/hooks/listenable_callback.dart';
import 'package:lensai/presentation/widgets/auto_suggest_text_field.dart';
import 'package:lensai/presentation/widgets/speech_to_text_button.dart';
import 'package:lensai/presentation/widgets/url_icon.dart';
import 'package:nullability/nullability.dart';
class SearchField extends HookConsumerWidget {
final TextEditingController textEditingController;
@@ -42,16 +43,27 @@ class SearchField extends HookConsumerWidget {
);
final suggestion = useState<String?>(null);
final lastText = useRef<String>(textEditingController.text);
if (showSuggestions) {
useListenableCallback(textEditingController, () async {
if (textEditingController.text.isNotEmpty) {
final result = await ref
.read(engineSuggestionsProvider.notifier)
.getAutocompleteSuggestion(textEditingController.text);
if (suggestion.value.isNotEmpty &&
lastText.value.length > 1 &&
textEditingController.text ==
lastText.value.substring(0, lastText.value.length - 1)) {
suggestion.value = null;
textEditingController.text = lastText.value;
} else if (textEditingController.text != lastText.value) {
final result = await ref
.read(engineSuggestionsProvider.notifier)
.getAutocompleteSuggestion(textEditingController.text);
suggestion.value = result;
suggestion.value = result;
}
}
lastText.value = textEditingController.text;
});
}