-
Notifications
You must be signed in to change notification settings - Fork 0
Description
Flutter 1.12 버전 이후 Plugin 제작시 유의점
최초 Flutter Plugin을 만들게 되면 FlutterPlugin을 구현하는 기본 클래스에 두가지 method가 기본으로 정의되어 있다. 하나는 static method 인 registerWith와 instance method인 onAttachedToEngine 이 두가지이다.
Flutter Engine 1.12 이전 버전에서 많은 플로그인을 사용하는 플러터 프로젝트의 안드로이드 모듈을 열어보면 MainActivity에 수많은 플러그인 등록 코드들이 쓰여져있다. 이는 모두 이전버전의 registerWith 함수를 부르는 코드들이다. 즉, 따지고 보면 일일히 하나씩 연결하는 셈이다.
그러나 Flutter Engine 1.12 이후 버전에서는 모든 플러그인들의 static method를 직접 명시하는 것이 아니라, FlutterPlugin인터페이스에 구현된 onAttachedToEngine와 onDetachedFromEngine 를 통해서 Flutter Engine이 Android 모듈과의 연결 상황이 변경될때 (연결/해지) Callback
공식문서에서 버전별 호환을 위해 두가지 방법 모두에서 코드를 적용하라고 명시하고 있다.
이전 버전 플러터를 쓰면 이동될 수도 있다는데 한번도 그런적이 없다.
Flutter 1.12 이전 버전의 경우
static method인 registerWith가 호출된다. registerWith 의 경우에 인자로 Registrar 객체가 전달된다. 그리고 Registrar 객체를 통해서 context 또는 activity를 참조한다.
mApplicationContext = registrar.context();
mActivity = registrar.activity();이후 선택사항으로 activity의 Lifecycle을 등록해주기 위해서는 Application.ActivityLifecycleCallbacks을 구현하고 activity객체를 이용해서 등록이 가능하다. 또한 일반적으로 'MethodChannel'을 만들고 핸들러를 등록하는 과정까지 진행하게 된다.
YourCustomPlugin instance = new YourCustomPlugin();
mActivity = registrar.activity();
// 라이프사이클 콜백 등록. 이를 위해서 플러그인 인스턴스가
// Application.ActivityLifecycleCallbacks 를 구현해야 한다.
mActivity.getApplication().registerActivityLifecycleCallbacks(instance);
// channel 생성후 콜백 등록
mMethodChannel = new MethodChannel(registrar.messenger(), CHANNEL_NAME);
mMethodChannel.setMethodCallHandler(instance);Flutter 1.12 이후 버전의 경우
override method인 onAttachedToEngine이 호출된다. onAttachedToEngine 의 경우에 인자로 FlutterPluginBinding 객체가 전달된다. 그리고 'FlutterPluginBinding'객체를 통해서 context를 참조한다.
mApplicationContext = flutterPluginBinding.getApplicationContext();
FlutterPedometerPlugin instance = new FlutterPedometerPlugin();
mMethodChannel = new MethodChannel(flutterPluginBinding.getBinaryMessenger(), CHANNEL_NAME);
mMethodChannel.setMethodCallHandler(instance);그렇다면 Activity에는 어떻게 접근해야하는가??
답은 ActivityAware interface이다.
abstract method of ActivityAware
onAttachedToActivityonDetachedFromActivityForConfigChangesonReattachedToActivityForConfigChangesonDetachedFromActivity
이중에서 onAttachedToActivity는 액티비티와 연결될때 호출되는 콜백이며 인자로 ActivityPluginBinding가 전달된다. 이를 통해서 activity를 참조하고 라이프 사이클을 등록할 수 있다.
mActivity = binding.getActivity();
mActivity.getApplication().registerActivityLifecycleCallbacks(this);