dismiss suggestion
This commit is contained in:
+16
-4
@@ -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/hooks/listenable_callback.dart';
|
||||||
import 'package:lensai/presentation/widgets/auto_suggest_text_field.dart';
|
import 'package:lensai/presentation/widgets/auto_suggest_text_field.dart';
|
||||||
import 'package:lensai/utils/uri_parser.dart' as uri_parser;
|
import 'package:lensai/utils/uri_parser.dart' as uri_parser;
|
||||||
|
import 'package:nullability/nullability.dart';
|
||||||
|
|
||||||
class AddressWithSuggestionsField extends HookConsumerWidget {
|
class AddressWithSuggestionsField extends HookConsumerWidget {
|
||||||
const AddressWithSuggestionsField({
|
const AddressWithSuggestionsField({
|
||||||
@@ -27,15 +28,26 @@ class AddressWithSuggestionsField extends HookConsumerWidget {
|
|||||||
final addressTextFocusNode = useFocusNode();
|
final addressTextFocusNode = useFocusNode();
|
||||||
|
|
||||||
final suggestion = useState<String?>(null);
|
final suggestion = useState<String?>(null);
|
||||||
|
final lastText = useRef<String>(addressTextController.text);
|
||||||
|
|
||||||
useListenableCallback(addressTextController, () async {
|
useListenableCallback(addressTextController, () async {
|
||||||
if (addressTextController.text.isNotEmpty) {
|
if (addressTextController.text.isNotEmpty) {
|
||||||
final result = await ref
|
if (suggestion.value.isNotEmpty &&
|
||||||
.read(engineSuggestionsProvider.notifier)
|
lastText.value.length > 1 &&
|
||||||
.getAutocompleteSuggestion(addressTextController.text);
|
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(
|
return AutoSuggestTextField(
|
||||||
|
|||||||
+16
-4
@@ -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/presentation/widgets/auto_suggest_text_field.dart';
|
||||||
import 'package:lensai/utils/form_validators.dart';
|
import 'package:lensai/utils/form_validators.dart';
|
||||||
import 'package:lensai/utils/uri_parser.dart' as uri_parser;
|
import 'package:lensai/utils/uri_parser.dart' as uri_parser;
|
||||||
|
import 'package:nullability/nullability.dart';
|
||||||
|
|
||||||
class EditUrlDialog extends HookConsumerWidget {
|
class EditUrlDialog extends HookConsumerWidget {
|
||||||
final Uri initialUrl;
|
final Uri initialUrl;
|
||||||
@@ -26,15 +27,26 @@ class EditUrlDialog extends HookConsumerWidget {
|
|||||||
final addressTextFocusNode = useFocusNode();
|
final addressTextFocusNode = useFocusNode();
|
||||||
|
|
||||||
final suggestion = useState<String?>(null);
|
final suggestion = useState<String?>(null);
|
||||||
|
final lastText = useRef<String>(addressTextController.text);
|
||||||
|
|
||||||
useListenableCallback(addressTextController, () async {
|
useListenableCallback(addressTextController, () async {
|
||||||
if (addressTextController.text.isNotEmpty) {
|
if (addressTextController.text.isNotEmpty) {
|
||||||
final result = await ref
|
if (suggestion.value.isNotEmpty &&
|
||||||
.read(engineSuggestionsProvider.notifier)
|
lastText.value.length > 1 &&
|
||||||
.getAutocompleteSuggestion(addressTextController.text);
|
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(
|
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/auto_suggest_text_field.dart';
|
||||||
import 'package:lensai/presentation/widgets/speech_to_text_button.dart';
|
import 'package:lensai/presentation/widgets/speech_to_text_button.dart';
|
||||||
import 'package:lensai/presentation/widgets/url_icon.dart';
|
import 'package:lensai/presentation/widgets/url_icon.dart';
|
||||||
|
import 'package:nullability/nullability.dart';
|
||||||
|
|
||||||
class SearchField extends HookConsumerWidget {
|
class SearchField extends HookConsumerWidget {
|
||||||
final TextEditingController textEditingController;
|
final TextEditingController textEditingController;
|
||||||
@@ -42,16 +43,27 @@ class SearchField extends HookConsumerWidget {
|
|||||||
);
|
);
|
||||||
|
|
||||||
final suggestion = useState<String?>(null);
|
final suggestion = useState<String?>(null);
|
||||||
|
final lastText = useRef<String>(textEditingController.text);
|
||||||
|
|
||||||
if (showSuggestions) {
|
if (showSuggestions) {
|
||||||
useListenableCallback(textEditingController, () async {
|
useListenableCallback(textEditingController, () async {
|
||||||
if (textEditingController.text.isNotEmpty) {
|
if (textEditingController.text.isNotEmpty) {
|
||||||
final result = await ref
|
if (suggestion.value.isNotEmpty &&
|
||||||
.read(engineSuggestionsProvider.notifier)
|
lastText.value.length > 1 &&
|
||||||
.getAutocompleteSuggestion(textEditingController.text);
|
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;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user