From cef00d0c53e3860857df34d81f6d6aa854567d91 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jes=C3=BAs=20S=20Guerrero?= Date: Mon, 7 Aug 2023 17:30:07 -0700 Subject: [PATCH] Revert "Replace TextField.canRequestFocus with TextField.focusNode.canRequestFocus" (#132104) Reverts flutter/flutter#130164 reverting because it cause internal google testing failures b/294917394 --- .../lib/src/material/dropdown_menu.dart | 23 ++----------------- .../flutter/lib/src/material/text_field.dart | 20 ++++------------ .../test/material/dropdown_menu_test.dart | 7 +++--- .../test/material/text_field_test.dart | 5 +--- 4 files changed, 11 insertions(+), 44 deletions(-) diff --git a/packages/flutter/lib/src/material/dropdown_menu.dart b/packages/flutter/lib/src/material/dropdown_menu.dart index 53003486f6..51a972a339 100644 --- a/packages/flutter/lib/src/material/dropdown_menu.dart +++ b/packages/flutter/lib/src/material/dropdown_menu.dart @@ -4,7 +4,6 @@ import 'dart:math' as math; -import 'package:flutter/foundation.dart'; import 'package:flutter/rendering.dart'; import 'package:flutter/services.dart'; import 'package:flutter/widgets.dart'; @@ -310,7 +309,6 @@ class _DropdownMenuState extends State> { int? currentHighlight; double? leadingPadding; bool _menuHasEnabledItem = false; - late final FocusNode _focusNode; @override void initState() { @@ -328,18 +326,6 @@ class _DropdownMenuState extends State> { TextSelection.collapsed(offset: _textEditingController.text.length); } refreshLeadingPadding(); - _focusNode = FocusNode( - canRequestFocus: canRequestFocus(), - ); - } - - @override - void didChangeDependencies() { - super.didChangeDependencies(); - final bool widgetCanRequestFocus = canRequestFocus(); - if (widgetCanRequestFocus != _focusNode.canRequestFocus) { - _focusNode.canRequestFocus = widgetCanRequestFocus; - } } @override @@ -367,10 +353,6 @@ class _DropdownMenuState extends State> { TextSelection.collapsed(offset: _textEditingController.text.length); } } - final bool widgetCanRequestFocus = canRequestFocus(); - if (widgetCanRequestFocus != _focusNode.canRequestFocus) { - _focusNode.canRequestFocus = widgetCanRequestFocus; - } } bool canRequestFocus() { @@ -378,7 +360,7 @@ class _DropdownMenuState extends State> { return widget.requestFocusOnTap!; } - switch (defaultTargetPlatform) { + switch (Theme.of(context).platform) { case TargetPlatform.iOS: case TargetPlatform.android: case TargetPlatform.fuchsia: @@ -610,8 +592,7 @@ class _DropdownMenuState extends State> { final Widget textField = TextField( key: _anchorKey, mouseCursor: effectiveMouseCursor, - focusNode: _focusNode, - readOnly: !canRequestFocus(), + canRequestFocus: canRequestFocus(), enableInteractiveSelection: canRequestFocus(), textAlignVertical: TextAlignVertical.center, style: effectiveTextStyle, diff --git a/packages/flutter/lib/src/material/text_field.dart b/packages/flutter/lib/src/material/text_field.dart index 7d6ea5b865..aa8f715bf9 100644 --- a/packages/flutter/lib/src/material/text_field.dart +++ b/packages/flutter/lib/src/material/text_field.dart @@ -314,10 +314,6 @@ class TextField extends StatefulWidget { this.scribbleEnabled = true, this.enableIMEPersonalizedLearning = true, this.contextMenuBuilder = _defaultContextMenuBuilder, - @Deprecated( - 'Use `focusNode` instead. ' - 'This feature was deprecated after v3.12.0-14.0.pre.', - ) this.canRequestFocus = true, this.spellCheckConfiguration, this.magnifierConfiguration, @@ -780,10 +776,6 @@ class TextField extends StatefulWidget { /// Defaults to true. If false, the text field will not request focus /// when tapped, or when its context menu is displayed. If false it will not /// be possible to move the focus to the text field with tab key. - @Deprecated( - 'Use `focusNode` instead. ' - 'This feature was deprecated after v3.12.0-14.0.pre.', - ) final bool canRequestFocus; /// {@macro flutter.widgets.undoHistory.controller} @@ -1034,9 +1026,7 @@ class _TextFieldState extends State with RestorationMixin implements if (widget.controller == null) { _createLocalController(); } - _effectiveFocusNode.canRequestFocus = widget.focusNode == null - ? widget.canRequestFocus && _isEnabled - : widget.focusNode!.canRequestFocus && _isEnabled; + _effectiveFocusNode.canRequestFocus = widget.canRequestFocus && _isEnabled; _effectiveFocusNode.addListener(_handleFocusChanged); } @@ -1044,9 +1034,7 @@ class _TextFieldState extends State with RestorationMixin implements final NavigationMode mode = MediaQuery.maybeNavigationModeOf(context) ?? NavigationMode.traditional; switch (mode) { case NavigationMode.traditional: - return widget.focusNode == null - ? widget.canRequestFocus && _isEnabled - : widget.focusNode!.canRequestFocus && _isEnabled; + return widget.canRequestFocus && _isEnabled; case NavigationMode.directional: return true; } @@ -1098,8 +1086,8 @@ class _TextFieldState extends State with RestorationMixin implements void _createLocalController([TextEditingValue? value]) { assert(_controller == null); _controller = value == null - ? RestorableTextEditingController() - : RestorableTextEditingController.fromValue(value); + ? RestorableTextEditingController() + : RestorableTextEditingController.fromValue(value); if (!restorePending) { _registerController(); } diff --git a/packages/flutter/test/material/dropdown_menu_test.dart b/packages/flutter/test/material/dropdown_menu_test.dart index 898c835f92..a721cfdb87 100644 --- a/packages/flutter/test/material/dropdown_menu_test.dart +++ b/packages/flutter/test/material/dropdown_menu_test.dart @@ -1232,7 +1232,7 @@ void main() { final Finder textFieldFinder = find.byType(TextField); final TextField result = tester.widget(textFieldFinder); - expect(result.focusNode!.canRequestFocus, false); + expect(result.canRequestFocus, false); }, variant: TargetPlatformVariant.mobile()); testWidgets('The text input field should be focused on desktop platforms ' @@ -1300,7 +1300,7 @@ void main() { final Finder textFieldFinder1 = find.byType(TextField); final TextField textField1 = tester.widget(textFieldFinder1); - expect(textField1.focusNode!.canRequestFocus, false); + expect(textField1.canRequestFocus, false); // Open the dropdown menu. await tester.tap(textFieldFinder1); await tester.pump(); @@ -1329,7 +1329,7 @@ void main() { final Finder textFieldFinder = find.byType(TextField); final TextField textField = tester.widget(textFieldFinder); - expect(textField.focusNode!.canRequestFocus, false); + expect(textField.canRequestFocus, false); final TestGesture gesture = await tester.createGesture(kind: PointerDeviceKind.mouse, pointer: 1); await gesture.moveTo(tester.getCenter(textFieldFinder)); @@ -1526,6 +1526,7 @@ void main() { // Item 5 should show up. expect(find.text('Item 5').hitTestable(), findsOneWidget); }); + } enum TestMenu { diff --git a/packages/flutter/test/material/text_field_test.dart b/packages/flutter/test/material/text_field_test.dart index 8339d81cd9..3998f97500 100644 --- a/packages/flutter/test/material/text_field_test.dart +++ b/packages/flutter/test/material/text_field_test.dart @@ -15568,7 +15568,6 @@ void main() { expect(focusNode.hasFocus, isTrue); // Set canRequestFocus to false: the text field cannot be focused when it is tapped/long pressed. - focusNode.canRequestFocus = false; await tester.pumpWidget( boilerplate( child: TextField( @@ -15750,9 +15749,7 @@ void main() { }, variant: const TargetPlatformVariant({ TargetPlatform.iOS, TargetPlatform.macOS })); testWidgets('Right clicking cannot request focus if canRequestFocus is false', (WidgetTester tester) async { - final FocusNode focusNode = FocusNode( - canRequestFocus: false, - ); + final FocusNode focusNode = FocusNode(); final UniqueKey key = UniqueKey(); await tester.pumpWidget( MaterialApp(