반응형
https://docs.flutter.dev/platform-integration/android/platform-views
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 |
댓글