mirror of
https://github.com/flutter/flutter.git
synced 2026-02-20 02:29:02 +08:00
macOS: add stubs for PlatformView gesture handling (flutter/engine#50630)
Adds method handler stubs for acceptGesture and rejectGesture channel method invocations. This avoids error messages being logged and puts in place the scaffolding for the implementation. Issue: https://github.com/flutter/flutter/issues/124492 [C++, Objective-C, Java style guides]: https://github.com/flutter/engine/blob/main/CONTRIBUTING.md#style
This commit is contained in:
parent
50ee337979
commit
932ecf69e0
@ -116,11 +116,45 @@
|
||||
NSNumber* arg = [call arguments];
|
||||
int64_t viewId = [arg longLongValue];
|
||||
[self onDisposeWithViewID:viewId result:result];
|
||||
} else if ([[call method] isEqualToString:@"acceptGesture"]) {
|
||||
[self handleAcceptGesture:call result:result];
|
||||
} else if ([[call method] isEqualToString:@"rejectGesture"]) {
|
||||
[self handleRejectGesture:call result:result];
|
||||
} else {
|
||||
result(FlutterMethodNotImplemented);
|
||||
}
|
||||
}
|
||||
|
||||
- (void)handleAcceptGesture:(FlutterMethodCall*)call result:(FlutterResult)result {
|
||||
NSDictionary<NSString*, id>* args = [call arguments];
|
||||
NSAssert(args && args[@"id"], @"id argument is required");
|
||||
int64_t viewId = [args[@"id"] longLongValue];
|
||||
if (_platformViews.count(viewId) == 0) {
|
||||
result([FlutterError errorWithCode:@"unknown_view"
|
||||
message:@"trying to set gesture state for an unknown view"
|
||||
details:[NSString stringWithFormat:@"view id: '%lld'", viewId]]);
|
||||
return;
|
||||
}
|
||||
|
||||
// TODO(cbracken): Implement. https://github.com/flutter/flutter/issues/124492
|
||||
result(nil);
|
||||
}
|
||||
|
||||
- (void)handleRejectGesture:(FlutterMethodCall*)call result:(FlutterResult)result {
|
||||
NSDictionary<NSString*, id>* args = [call arguments];
|
||||
NSAssert(args && args[@"id"], @"id argument is required");
|
||||
int64_t viewId = [args[@"id"] longLongValue];
|
||||
if (_platformViews.count(viewId) == 0) {
|
||||
result([FlutterError errorWithCode:@"unknown_view"
|
||||
message:@"trying to set gesture state for an unknown view"
|
||||
details:[NSString stringWithFormat:@"view id: '%lld'", viewId]]);
|
||||
return;
|
||||
}
|
||||
|
||||
// TODO(cbracken): Implement. https://github.com/flutter/flutter/issues/124492
|
||||
result(nil);
|
||||
}
|
||||
|
||||
- (void)disposePlatformViews {
|
||||
if (_platformViewsToDispose.empty()) {
|
||||
return;
|
||||
|
||||
@ -161,4 +161,120 @@ TEST(FlutterPlatformViewController, TestDisposeOnMissingViewId) {
|
||||
EXPECT_TRUE(errored);
|
||||
}
|
||||
|
||||
TEST(FlutterPlatformViewController, TestAcceptGesture) {
|
||||
FlutterPlatformViewController* platformViewController =
|
||||
[[FlutterPlatformViewController alloc] init];
|
||||
[platformViewController registerViewFactory:[TestFlutterPlatformViewFactory alloc]
|
||||
withId:@"MockPlatformView"];
|
||||
|
||||
// Create the PlatformView.
|
||||
const NSNumber* viewId = [NSNumber numberWithLongLong:2];
|
||||
FlutterMethodCall* methodCallOnCreate = [FlutterMethodCall
|
||||
methodCallWithMethodName:@"create"
|
||||
arguments:@{@"id" : viewId, @"viewType" : @"MockPlatformView"}];
|
||||
__block bool created = false;
|
||||
FlutterResult resultOnCreate = ^(id result) {
|
||||
// If a platform view is successfully created, the result is nil.
|
||||
if (result == nil) {
|
||||
created = true;
|
||||
}
|
||||
};
|
||||
[platformViewController handleMethodCall:methodCallOnCreate result:resultOnCreate];
|
||||
|
||||
// Call acceptGesture.
|
||||
FlutterMethodCall* methodCallAcceptGesture =
|
||||
[FlutterMethodCall methodCallWithMethodName:@"acceptGesture" arguments:@{@"id" : viewId}];
|
||||
__block bool acceptGestureCalled = false;
|
||||
FlutterResult resultAcceptGesture = ^(id result) {
|
||||
// If a acceptGesture is successful, the result is nil.
|
||||
if (result == nil) {
|
||||
acceptGestureCalled = true;
|
||||
}
|
||||
};
|
||||
[platformViewController handleMethodCall:methodCallAcceptGesture result:resultAcceptGesture];
|
||||
|
||||
EXPECT_TRUE(created);
|
||||
EXPECT_TRUE(acceptGestureCalled);
|
||||
}
|
||||
|
||||
TEST(FlutterPlatformViewController, TestAcceptGestureOnMissingViewId) {
|
||||
FlutterPlatformViewController* platformViewController =
|
||||
[[FlutterPlatformViewController alloc] init];
|
||||
[platformViewController registerViewFactory:[TestFlutterPlatformViewFactory alloc]
|
||||
withId:@"MockPlatformView"];
|
||||
|
||||
// Call rejectGesture.
|
||||
FlutterMethodCall* methodCallAcceptGesture =
|
||||
[FlutterMethodCall methodCallWithMethodName:@"acceptGesture" arguments:@{
|
||||
@"id" : @20
|
||||
}];
|
||||
__block bool errored = false;
|
||||
FlutterResult result = ^(id result) {
|
||||
if ([result isKindOfClass:[FlutterError class]]) {
|
||||
errored = true;
|
||||
}
|
||||
};
|
||||
[platformViewController handleMethodCall:methodCallAcceptGesture result:result];
|
||||
|
||||
EXPECT_TRUE(errored);
|
||||
}
|
||||
|
||||
TEST(FlutterPlatformViewController, TestRejectGesture) {
|
||||
FlutterPlatformViewController* platformViewController =
|
||||
[[FlutterPlatformViewController alloc] init];
|
||||
[platformViewController registerViewFactory:[TestFlutterPlatformViewFactory alloc]
|
||||
withId:@"MockPlatformView"];
|
||||
|
||||
// Create the PlatformView.
|
||||
const NSNumber* viewId = [NSNumber numberWithLongLong:2];
|
||||
FlutterMethodCall* methodCallOnCreate = [FlutterMethodCall
|
||||
methodCallWithMethodName:@"create"
|
||||
arguments:@{@"id" : viewId, @"viewType" : @"MockPlatformView"}];
|
||||
__block bool created = false;
|
||||
FlutterResult resultOnCreate = ^(id result) {
|
||||
// If a platform view is successfully created, the result is nil.
|
||||
if (result == nil) {
|
||||
created = true;
|
||||
}
|
||||
};
|
||||
[platformViewController handleMethodCall:methodCallOnCreate result:resultOnCreate];
|
||||
|
||||
// Call rejectGesture.
|
||||
FlutterMethodCall* methodCallRejectGesture =
|
||||
[FlutterMethodCall methodCallWithMethodName:@"rejectGesture" arguments:@{@"id" : viewId}];
|
||||
__block bool rejectGestureCalled = false;
|
||||
FlutterResult resultRejectGesture = ^(id result) {
|
||||
// If a rejectGesture is successful, the result is nil.
|
||||
if (result == nil) {
|
||||
rejectGestureCalled = true;
|
||||
}
|
||||
};
|
||||
[platformViewController handleMethodCall:methodCallRejectGesture result:resultRejectGesture];
|
||||
|
||||
EXPECT_TRUE(created);
|
||||
EXPECT_TRUE(rejectGestureCalled);
|
||||
}
|
||||
|
||||
TEST(FlutterPlatformViewController, TestRejectGestureOnMissingViewId) {
|
||||
FlutterPlatformViewController* platformViewController =
|
||||
[[FlutterPlatformViewController alloc] init];
|
||||
[platformViewController registerViewFactory:[TestFlutterPlatformViewFactory alloc]
|
||||
withId:@"MockPlatformView"];
|
||||
|
||||
// Call rejectGesture.
|
||||
FlutterMethodCall* methodCallRejectGesture =
|
||||
[FlutterMethodCall methodCallWithMethodName:@"rejectGesture" arguments:@{
|
||||
@"id" : @20
|
||||
}];
|
||||
__block bool errored = false;
|
||||
FlutterResult result = ^(id result) {
|
||||
if ([result isKindOfClass:[FlutterError class]]) {
|
||||
errored = true;
|
||||
}
|
||||
};
|
||||
[platformViewController handleMethodCall:methodCallRejectGesture result:result];
|
||||
|
||||
EXPECT_TRUE(errored);
|
||||
}
|
||||
|
||||
} // namespace flutter::testing
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user