diff --git a/packages/flutter/lib/src/widgets/editable_text.dart b/packages/flutter/lib/src/widgets/editable_text.dart index f4b90c39a63..fa0853c9f16 100644 --- a/packages/flutter/lib/src/widgets/editable_text.dart +++ b/packages/flutter/lib/src/widgets/editable_text.dart @@ -3266,7 +3266,8 @@ class EditableTextState extends State } if (_hasInputConnection) { - if (oldWidget.obscureText != widget.obscureText) { + if (oldWidget.obscureText != widget.obscureText || + oldWidget.keyboardType != widget.keyboardType) { _textInputConnection!.updateConfig(_effectiveAutofillClient.textInputConfiguration); } } diff --git a/packages/flutter/test/widgets/editable_text_test.dart b/packages/flutter/test/widgets/editable_text_test.dart index 34718066be2..eae26cf3f38 100644 --- a/packages/flutter/test/widgets/editable_text_test.dart +++ b/packages/flutter/test/widgets/editable_text_test.dart @@ -3093,6 +3093,50 @@ void main() { expect(tester.testTextInput.setClientArgs!['obscureText'], isFalse); }); + testWidgets('Sends "updateConfig" when keyboardType is changed', (WidgetTester tester) async { + TextInputType keyboardType = TextInputType.text; + late StateSetter setState; + controller.text = 'Lorem'; + + await tester.pumpWidget( + MaterialApp( + home: StatefulBuilder( + builder: (BuildContext context, StateSetter stateSetter) { + setState = stateSetter; + return EditableText( + keyboardType: keyboardType, + controller: controller, + backgroundCursorColor: Colors.grey, + focusNode: focusNode, + style: textStyle, + cursorColor: cursorColor, + ); + }, + ), + ), + ); + + // Interact with the field to establish the input connection. + final Offset topLeft = tester.getTopLeft(find.byType(EditableText)); + await tester.tapAt(topLeft + const Offset(0.0, 5.0)); + await tester.pump(); + + expect( + (tester.testTextInput.setClientArgs!['inputType'] as Map)['name'], + 'TextInputType.text', + ); + + setState(() { + keyboardType = TextInputType.number; + }); + await tester.pump(); + + expect( + (tester.testTextInput.setClientArgs!['inputType'] as Map)['name'], + 'TextInputType.number', + ); + }); + testWidgets('Sends viewId and updates config when it changes', (WidgetTester tester) async { int viewId = 14; late StateSetter setState;