반응형
https://docs.flutter.dev/platform-integration/android/platform-views
Hosting native Android views in your Flutter app with Platform Views
Learn how to host native Android views in your Flutter app with Platform Views.
docs.flutter.dev
1. 공식문서를 보기 전에 알아야 할 사실
위 링크의 공식문서는 네이티브 뷰를 호스팅하는 내용이다. 허나 한 가지 알아야할 사실이 있다.
저 링크의 내용은 네이티브 액티비티나 뷰 컨트롤러를 호출하는 것이 아닌, 플러터의 액티비티 or 뷰컨트롤러에 네이티브 뷰를 삽입하는 것이다.
한마디로 예를 들면, 안드로이드의 텍스트뷰를 플러터에다가 넣어준다는 뜻.
2. 엥 나는 액티비티나 뷰컨트롤러를 띄우고 싶은데 어떻게 해야하지?
방법은 메소드채널을 뚫어서 startActivity같은 방식으로 액티비티나 뷰컨트롤러를 띄워주어야 한다.
iOS
스토리보드에서 NavigationViewController를 추가하거나 AppDelegate에서 앱을 초기화 할 때 코드로 NavigationViewController를 추가해주어야 한다
override func application(
_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
let FlutterViewController : FlutterViewController = window?.rootViewController as! FlutterViewController
let channel = FlutterMethodChannel(name: channelName,
binaryMessenger: FlutterViewController.binaryMessenger)
let navigationController = UINavigationController(rootViewController: FlutterViewController)
navigationController.setNavigationBarHidden(true, animated: false)
self.window!.rootViewController = navigationController
self.window!.makeKeyAndVisible()
channel.setMethodCallHandler({
(call: FlutterMethodCall, result: @escaping FlutterResult) -> Void in
switch call.method {
case self.SHOW_CAMERA_VIEW:
let 다른스토리보드 = UIStoryboard(name: "다른스토리보드", bundle: nil)
let 호출할네이티브뷰컨트롤러 = 다른스토리보드.instantiateInitialViewController()!
navigationController.pushViewController(호출할네이티브뷰컨트롤러, animated: true)
break
default:
break
}
})
return super.application(application, didFinishLaunchingWithOptions: launchOptions)
}
여기서 중요한점은 navigationController생성작업을 메소드 핸들러에서 하면 안된다. 왜냐하면 application 메소드가 끝나버리면 스토리보드 hierachy가 다 구성이 완료되고, 그상태에서 무언가를 바꾸려하다가 에러가 나기 때문
반응형
'Flutter' 카테고리의 다른 글
CustomPaint에서 drawPath가 안그려 질 때 (0) | 2023.12.19 |
---|---|
CustomPainter사용시 주의사항 RepaintBoundary (0) | 2023.12.19 |
Flutter개발중 안드로이드 개발자를 위한 iOS에 관한 기초지식들 (1) | 2023.11.01 |
Flutter에서 long running isolate 사용하기 (0) | 2023.10.25 |
cloud_firestore 추가 후 빌드속도 향상시키기 (0) | 2023.10.20 |
댓글