From 91eb8d226d75bbb0ff3b92cae6a742a8d9315b0a Mon Sep 17 00:00:00 2001 From: Thomas Hareau Date: Thu, 3 Oct 2024 20:14:51 +0200 Subject: [PATCH] Add autocorrect and enableSuggestions to SearchDelegate (#154932) Add `autocorrect` and `enableSuggestions` to `SearchDelegate`, so that autocompletion can be disabled in search. *List which issues are fixed by this PR. You must list at least one issue. An issue is not required if the PR fixes something trivial like a typo.* * https://github.com/flutter/flutter/issues/98241 *If you had to change anything in the [flutter/tests] repo, include a link to the migration guide as per the [breaking change policy].* --- packages/flutter/lib/src/material/search.dart | 10 ++++ .../flutter/test/material/search_test.dart | 46 ++++++++++++++++++- 2 files changed, 54 insertions(+), 2 deletions(-) diff --git a/packages/flutter/lib/src/material/search.dart b/packages/flutter/lib/src/material/search.dart index 6a09cdb6b6..6f2c814d51 100644 --- a/packages/flutter/lib/src/material/search.dart +++ b/packages/flutter/lib/src/material/search.dart @@ -155,6 +155,8 @@ abstract class SearchDelegate { this.searchFieldDecorationTheme, this.keyboardType, this.textInputAction = TextInputAction.search, + this.autocorrect = true, + this.enableSuggestions = true, }) : assert(searchFieldStyle == null || searchFieldDecorationTheme == null); /// Suggestions shown in the body of the search page while the user types a @@ -365,6 +367,12 @@ abstract class SearchDelegate { /// Defaults to the default value specified in [TextField]. final TextInputType? keyboardType; + /// {@macro flutter.widgets.editableText.autocorrect} + final bool autocorrect; + + /// {@macro flutter.services.TextInputConfiguration.enableSuggestions} + final bool enableSuggestions; + /// The text input action configuring the soft keyboard to a particular action /// button. /// @@ -619,6 +627,8 @@ class _SearchPageState extends State<_SearchPage> { focusNode: focusNode, style: widget.delegate.searchFieldStyle ?? theme.textTheme.titleLarge, textInputAction: widget.delegate.textInputAction, + autocorrect: widget.delegate.autocorrect, + enableSuggestions: widget.delegate.enableSuggestions, keyboardType: widget.delegate.keyboardType, onSubmitted: (String _) => widget.delegate.showResults(context), decoration: InputDecoration(hintText: searchFieldLabel), diff --git a/packages/flutter/test/material/search_test.dart b/packages/flutter/test/material/search_test.dart index d32c7bf7eb..b7c71871f6 100644 --- a/packages/flutter/test/material/search_test.dart +++ b/packages/flutter/test/material/search_test.dart @@ -579,10 +579,50 @@ void main() { expect(hintText.style?.fontSize, delegate.searchFieldStyle?.fontSize); expect(textField.style?.color, delegate.searchFieldStyle?.color); expect(textField.style?.fontSize, delegate.searchFieldStyle?.fontSize); - }); - testWidgets('keyboard show search button by default', (WidgetTester tester) async { + testWidgets('Default autocorrect and enableSuggestions value', (WidgetTester tester) async { + final _TestSearchDelegate delegate = _TestSearchDelegate(); + addTearDown(() => delegate.dispose()); + + await tester.pumpWidget(TestHomePage(delegate: delegate)); + await tester.tap(find.byTooltip('Search')); + await tester.pumpAndSettle(); + + final TextField textField = tester.widget(find.byType(TextField)); + + expect(textField.autocorrect, isTrue); + expect(textField.enableSuggestions, isTrue); + }); + + testWidgets('Custom autocorrect value', (WidgetTester tester) async { + final _TestSearchDelegate delegate = _TestSearchDelegate(autocorrect: false); + addTearDown(() => delegate.dispose()); + + await tester.pumpWidget(TestHomePage(delegate: delegate)); + await tester.tap(find.byTooltip('Search')); + await tester.pumpAndSettle(); + + final TextField textField = tester.widget(find.byType(TextField)); + + expect(textField.autocorrect, isFalse); + }); + + testWidgets('Custom enableSuggestions value', (WidgetTester tester) async { + final _TestSearchDelegate delegate = _TestSearchDelegate(enableSuggestions: false); + addTearDown(() => delegate.dispose()); + + await tester.pumpWidget(TestHomePage(delegate: delegate)); + await tester.tap(find.byTooltip('Search')); + await tester.pumpAndSettle(); + + final TextField textField = tester.widget(find.byType(TextField)); + + expect(textField.enableSuggestions, isFalse); + }); + + testWidgets('keyboard show search button by default', + (WidgetTester tester) async { final _TestSearchDelegate delegate = _TestSearchDelegate(); addTearDown(() => delegate.dispose()); @@ -1299,6 +1339,8 @@ class _TestSearchDelegate extends SearchDelegate { super.searchFieldStyle, String? searchHint, super.textInputAction, + super.autocorrect, + super.enableSuggestions, }) : super( searchFieldLabel: searchHint, );