From d513661bf319a54c8a1017b1e6ce2e790918b127 Mon Sep 17 00:00:00 2001 From: Matej Knopp Date: Fri, 27 Jan 2023 17:46:11 +0100 Subject: [PATCH] Reland "[macos] Move TextInputPlugin outside of visible area" --- .../framework/Source/FlutterTextInputPlugin.mm | 5 +++-- .../Source/FlutterTextInputPluginTest.mm | 17 +++++++++++++++++ 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/shell/platform/darwin/macos/framework/Source/FlutterTextInputPlugin.mm b/shell/platform/darwin/macos/framework/Source/FlutterTextInputPlugin.mm index c5bdca27ce986..09b7f7a7c232f 100644 --- a/shell/platform/darwin/macos/framework/Source/FlutterTextInputPlugin.mm +++ b/shell/platform/darwin/macos/framework/Source/FlutterTextInputPlugin.mm @@ -303,8 +303,9 @@ @implementation FlutterTextInputPlugin { } - (instancetype)initWithViewController:(FlutterViewController*)viewController { - // The view needs a non-zero frame. - self = [super initWithFrame:NSMakeRect(0, 0, 1, 1)]; + // The view needs an empty frame otherwise it is visible on dark background. + // https://github.com/flutter/flutter/issues/118504 + self = [super initWithFrame:NSZeroRect]; if (self != nil) { _flutterViewController = viewController; _channel = [FlutterMethodChannel methodChannelWithName:kTextInputChannel diff --git a/shell/platform/darwin/macos/framework/Source/FlutterTextInputPluginTest.mm b/shell/platform/darwin/macos/framework/Source/FlutterTextInputPluginTest.mm index 1efc461b08436..3bf1bef6457f9 100644 --- a/shell/platform/darwin/macos/framework/Source/FlutterTextInputPluginTest.mm +++ b/shell/platform/darwin/macos/framework/Source/FlutterTextInputPluginTest.mm @@ -1778,4 +1778,21 @@ - (bool)testSelectorsAreForwardedToFramework { ASSERT_FALSE(window.firstResponder == viewController.textInputPlugin); } +TEST(FlutterTextInputPluginTest, HasZeroSize) { + id engineMock = flutter::testing::CreateMockFlutterEngine(@""); + id binaryMessengerMock = OCMProtocolMock(@protocol(FlutterBinaryMessenger)); + OCMStub( // NOLINT(google-objc-avoid-throwing-exception) + [engineMock binaryMessenger]) + .andReturn(binaryMessengerMock); + + FlutterViewController* viewController = [[FlutterViewController alloc] initWithEngine:engineMock + nibName:@"" + bundle:nil]; + + FlutterTextInputPlugin* plugin = + [[FlutterTextInputPlugin alloc] initWithViewController:viewController]; + + ASSERT_TRUE(NSIsEmptyRect(plugin.frame)); +} + } // namespace flutter::testing