ほしい機能がなかったからwebview_flutterをやめて、flutter_inappwebviewを使うようにした。 flutter_inappwebviewは機能がモリモリでモリモリすぎるという印象だけど、自分でモリモリ作るよりはいいだろという感じ。ちなみにflutter_inappwebviewはflutter_inappbrowerから名前が変わっている。
いくつか困ったことがあったので書いておく。
AndroidでcallHandlerがないと言われる
原因はしっかり調べていないけど、AndroidだとcallHandlerがないと言われる。
private APIは使えるので、しょうがないのでそっちを使うようにした。ちなみにiOSではprivate APIのほうがないのでprivate APIの実装だけだとエラーになる。
const message = "value"; if (window.flutter_inappwebview.callHandler) { window.flutter_inappwebview.callHandler('handlerName', message); } else { window.flutter_inappwebview._callHandler('handlerName', setTimeout(function(){}), JSON.stringify([message])); }
iOSで hot restartするとエラーになる
flutter_inappwebview 2.1.0+1 で再現する。 InAppWebViewがremoveFromSuperviewされたタイミングでsetMethodCallHandler(nil)しているのが原因
現在のmaster branch(9c7ac0d)では、removeFromSuperviewでのsetMethodCallHandler(nil)がなくなっているので再現しない。
iOSで 9c7ac0d を使うとPromiseが使えない
原因はこれ JavaScript - Object definition available before code execution on Safari - Stack Overflow
まとめ
なおしていくぞ