Flutterにおけるストレージのパス取得のためのプラグインpath_provider
がAndroidで動作しない問題でハマったので解決策をメモしておきます。
事象
path_providerプラグインのgetTemporaryDirectory()
などのメソッドをAndroidで実行すると、以下の例外が発生していました。
MissingPluginException(No implementation found for method getTemporaryDirectory on channel plugins.flutter.io/path_provider)
解決策
該当プロジェクトでは、ネイティブのUIをそのまま組み込むことができるPlatformViewを利用していますが、AndroidのネイティブコードにおけるPlatformViewを登録する場所で、overrideしたメソッドの親メソッドを呼び出していないことが原因でした。
MainActivity.kt
class MainActivity: FlutterActivity() {
override fun configureFlutterEngine(@NonNull flutterEngine: FlutterEngine) {
// 以下1行を記述していなかった
super.configureFlutterEngine(flutterEngine)
flutterEngine
.platformViewsController
.registry
.registerViewFactory("<platform-view-type>", NativeViewFactory())
}
}
補足
公式のPlatformViewのサンプルには、super
メソッドの呼び出しが記述されていないので、そのままコピペすると発生してしまいます。
詳しい原因は調べられていないですが、親メソッドの呼び出しがスキップされることで、プラグインで利用するネイティブ側のメソッド登録が実行されないために、事象が発生してしまうと考えられます。