Skip to content

Commit 78885ec

Browse files
authored
Provide default method call handler for SystemChannels.textInput (#101087)
1 parent d647755 commit 78885ec

File tree

3 files changed

+15
-0
lines changed

3 files changed

+15
-0
lines changed

packages/flutter/lib/src/services/binding.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import 'message_codec.dart';
1717
import 'raw_keyboard.dart';
1818
import 'restoration.dart';
1919
import 'system_channels.dart';
20+
import 'text_input.dart';
2021

2122
/// Listens for platform messages and directs them to the [defaultBinaryMessenger].
2223
///
@@ -36,6 +37,7 @@ mixin ServicesBinding on BindingBase, SchedulerBinding {
3637
SystemChannels.system.setMessageHandler((dynamic message) => handleSystemMessage(message as Object));
3738
SystemChannels.lifecycle.setMessageHandler(_handleLifecycleMessage);
3839
SystemChannels.platform.setMethodCallHandler(_handlePlatformMessage);
40+
TextInput.ensureInitialized();
3941
readInitialLifecycleStateFromNativeWindow();
4042
}
4143

packages/flutter/lib/src/services/text_input.dart

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1575,6 +1575,12 @@ class TextInput {
15751575
TextInputAction.emergencyCall,
15761576
];
15771577

1578+
/// Ensure that a [TextInput] instance has been set up so that the platform
1579+
/// can handle messages on the text input method channel.
1580+
static void ensureInitialized() {
1581+
_instance; // ignore: unnecessary_statements
1582+
}
1583+
15781584
/// Begin interacting with the text input control.
15791585
///
15801586
/// Calling this function helps multiple clients coordinate about which one is

packages/flutter/test/services/binding_test.dart

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,4 +107,11 @@ void main() {
107107
await rootBundle.loadString('test_asset2');
108108
expect(flutterAssetsCallCount, 4);
109109
});
110+
111+
test('initInstances sets a default method call handler for SystemChannels.textInput', () async {
112+
final ByteData message = const JSONMessageCodec().encodeMessage(<String, dynamic>{'method': 'TextInput.requestElementsInRect', 'args': null})!;
113+
await ServicesBinding.instance.defaultBinaryMessenger.handlePlatformMessage('flutter/textinput', message, (ByteData? data) {
114+
expect(data, isNotNull);
115+
});
116+
});
110117
}

0 commit comments

Comments
 (0)