Skip to content
This repository was archived by the owner on Feb 25, 2025. It is now read-only.

Commit a598f23

Browse files
authored
[ios] Convert FlutterPlatformViewsController to smart pointer (#22082)
* Convert FlutterPlatformViewsController to smart pointer * have a const reference of platform views controller * change more stuff to references
1 parent 25bb31e commit a598f23

22 files changed

+61
-52
lines changed

shell/platform/darwin/ios/framework/Source/FlutterEngine.mm

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ @implementation FlutterEngine {
6363
fml::WeakPtr<FlutterViewController> _viewController;
6464
fml::scoped_nsobject<FlutterObservatoryPublisher> _publisher;
6565

66-
std::unique_ptr<flutter::FlutterPlatformViewsController> _platformViewsController;
66+
std::shared_ptr<flutter::FlutterPlatformViewsController> _platformViewsController;
6767
std::unique_ptr<flutter::ProfilerMetricsIOS> _profiler_metrics;
6868
std::unique_ptr<flutter::SamplingProfiler> _profiler;
6969

@@ -311,8 +311,8 @@ - (FlutterViewController*)viewController {
311311
- (FlutterPlatformPlugin*)platformPlugin {
312312
return _platformPlugin.get();
313313
}
314-
- (flutter::FlutterPlatformViewsController*)platformViewsController {
315-
return _platformViewsController.get();
314+
- (std::shared_ptr<flutter::FlutterPlatformViewsController>&)platformViewsController {
315+
return _platformViewsController;
316316
}
317317
- (FlutterTextInputPlugin*)textInputPlugin {
318318
return _textInputPlugin.get();

shell/platform/darwin/ios/framework/Source/FlutterEngine_Internal.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@
3838
base64Encode:(bool)base64Encode;
3939

4040
- (FlutterPlatformPlugin*)platformPlugin;
41-
- (flutter::FlutterPlatformViewsController*)platformViewsController;
41+
- (std::shared_ptr<flutter::FlutterPlatformViewsController>&)platformViewsController;
4242
- (FlutterTextInputPlugin*)textInputPlugin;
4343
- (void)launchEngine:(NSString*)entrypoint libraryURI:(NSString*)libraryOrNil;
4444
- (BOOL)createShell:(NSString*)entrypoint

shell/platform/darwin/ios/framework/Source/FlutterPlatformViews.mm

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -884,16 +884,16 @@ - (instancetype)initWithTarget:(id)target
884884
}
885885

886886
- (void)touchesBegan:(NSSet*)touches withEvent:(UIEvent*)event {
887-
[_platformViewsController.get()->getFlutterViewController() touchesBegan:touches withEvent:event];
887+
[_platformViewsController->getFlutterViewController() touchesBegan:touches withEvent:event];
888888
_currentTouchPointersCount += touches.count;
889889
}
890890

891891
- (void)touchesMoved:(NSSet*)touches withEvent:(UIEvent*)event {
892-
[_platformViewsController.get()->getFlutterViewController() touchesMoved:touches withEvent:event];
892+
[_platformViewsController->getFlutterViewController() touchesMoved:touches withEvent:event];
893893
}
894894

895895
- (void)touchesEnded:(NSSet*)touches withEvent:(UIEvent*)event {
896-
[_platformViewsController.get()->getFlutterViewController() touchesEnded:touches withEvent:event];
896+
[_platformViewsController->getFlutterViewController() touchesEnded:touches withEvent:event];
897897
_currentTouchPointersCount -= touches.count;
898898
// Touches in one touch sequence are sent to the touchesEnded method separately if different
899899
// fingers stop touching the screen at different time. So one touchesEnded method triggering does
@@ -905,8 +905,7 @@ - (void)touchesEnded:(NSSet*)touches withEvent:(UIEvent*)event {
905905
}
906906

907907
- (void)touchesCancelled:(NSSet*)touches withEvent:(UIEvent*)event {
908-
[_platformViewsController.get()->getFlutterViewController() touchesCancelled:touches
909-
withEvent:event];
908+
[_platformViewsController->getFlutterViewController() touchesCancelled:touches withEvent:event];
910909
_currentTouchPointersCount = 0;
911910
self.state = UIGestureRecognizerStateFailed;
912911
}

shell/platform/darwin/ios/framework/Source/FlutterView.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
- (flutter::Rasterizer::Screenshot)takeScreenshot:(flutter::Rasterizer::ScreenshotType)type
2121
asBase64Encoded:(BOOL)base64Encode;
2222

23-
- (flutter::FlutterPlatformViewsController*)platformViewsController;
23+
- (std::shared_ptr<flutter::FlutterPlatformViewsController>&)platformViewsController;
2424
@end
2525

2626
@interface FlutterView : UIView

shell/platform/darwin/ios/framework/Source/FlutterViewController.mm

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1332,7 +1332,7 @@ - (void)onPreferredStatusBarStyleUpdated:(NSNotification*)notification {
13321332

13331333
#pragma mark - Platform views
13341334

1335-
- (flutter::FlutterPlatformViewsController*)platformViewsController {
1335+
- (std::shared_ptr<flutter::FlutterPlatformViewsController>&)platformViewsController {
13361336
return [_engine.get() platformViewsController];
13371337
}
13381338

shell/platform/darwin/ios/framework/Source/FlutterViewController_Internal.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ extern NSNotificationName const FlutterViewControllerShowHomeIndicator;
2626

2727
@property(nonatomic, readonly) BOOL isPresentingViewController;
2828
- (fml::WeakPtr<FlutterViewController>)getWeakPtr;
29-
- (flutter::FlutterPlatformViewsController*)platformViewsController;
29+
- (std::shared_ptr<flutter::FlutterPlatformViewsController>&)platformViewsController;
3030

3131
@end
3232

shell/platform/darwin/ios/framework/Source/SemanticsObject.mm

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -557,8 +557,7 @@ - (instancetype)initWithSemanticsObject:(SemanticsObject*)object {
557557
// `accessibilityContainer` and `accessibilityElementAtIndex`.
558558
if (self = [super initWithAccessibilityContainer:object.bridge->view()]) {
559559
_semanticsObject = object;
560-
flutter::FlutterPlatformViewsController* controller =
561-
object.bridge->GetPlatformViewsController();
560+
auto controller = object.bridge->GetPlatformViewsController();
562561
if (controller) {
563562
_platformView = [[controller->GetPlatformViewByID(object.node.platformViewId) view] retain];
564563
}

shell/platform/darwin/ios/framework/Source/SemanticsObjectTest.mm

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,9 @@ void DispatchSemanticsAction(int32_t id,
3939
}
4040
void AccessibilityObjectDidBecomeFocused(int32_t id) override {}
4141
void AccessibilityObjectDidLoseFocus(int32_t id) override {}
42-
FlutterPlatformViewsController* GetPlatformViewsController() const override { return nil; }
42+
std::shared_ptr<FlutterPlatformViewsController> GetPlatformViewsController() const override {
43+
return nil;
44+
}
4345
std::vector<SemanticsActionObservation> observations;
4446

4547
private:

shell/platform/darwin/ios/framework/Source/accessibility_bridge.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ class AccessibilityBridge final : public AccessibilityBridgeIos {
5151

5252
AccessibilityBridge(FlutterViewController* view_controller,
5353
PlatformViewIOS* platform_view,
54-
FlutterPlatformViewsController* platform_views_controller,
54+
std::shared_ptr<FlutterPlatformViewsController> platform_views_controller,
5555
std::unique_ptr<IosDelegate> ios_delegate = nullptr);
5656
~AccessibilityBridge();
5757

@@ -70,7 +70,7 @@ class AccessibilityBridge final : public AccessibilityBridgeIos {
7070

7171
fml::WeakPtr<AccessibilityBridge> GetWeakPtr();
7272

73-
FlutterPlatformViewsController* GetPlatformViewsController() const override {
73+
std::shared_ptr<FlutterPlatformViewsController> GetPlatformViewsController() const override {
7474
return platform_views_controller_;
7575
};
7676

@@ -85,7 +85,7 @@ class AccessibilityBridge final : public AccessibilityBridgeIos {
8585

8686
FlutterViewController* view_controller_;
8787
PlatformViewIOS* platform_view_;
88-
FlutterPlatformViewsController* platform_views_controller_;
88+
const std::shared_ptr<FlutterPlatformViewsController> platform_views_controller_;
8989
// If the this id is kSemanticObjectIdInvalid, it means either nothing has
9090
// been focused or the focus is currently outside of the flutter application
9191
// (i.e. the status bar or keyboard)

shell/platform/darwin/ios/framework/Source/accessibility_bridge.mm

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -36,10 +36,11 @@ void PostAccessibilityNotification(UIAccessibilityNotifications notification,
3636
};
3737
} // namespace
3838

39-
AccessibilityBridge::AccessibilityBridge(FlutterViewController* view_controller,
40-
PlatformViewIOS* platform_view,
41-
FlutterPlatformViewsController* platform_views_controller,
42-
std::unique_ptr<IosDelegate> ios_delegate)
39+
AccessibilityBridge::AccessibilityBridge(
40+
FlutterViewController* view_controller,
41+
PlatformViewIOS* platform_view,
42+
std::shared_ptr<FlutterPlatformViewsController> platform_views_controller,
43+
std::unique_ptr<IosDelegate> ios_delegate)
4344
: view_controller_(view_controller),
4445
platform_view_(platform_view),
4546
platform_views_controller_(platform_views_controller),
@@ -126,7 +127,7 @@ void PostAccessibilityNotification(UIAccessibilityNotifications notification,
126127
}
127128

128129
if (object.node.IsPlatformViewNode()) {
129-
FlutterPlatformViewsController* controller = GetPlatformViewsController();
130+
auto controller = GetPlatformViewsController();
130131
if (controller) {
131132
object.platformViewSemanticsContainer = [[[FlutterPlatformViewSemanticsContainer alloc]
132133
initWithSemanticsObject:object] autorelease];

0 commit comments

Comments
 (0)