概要
FlutterでWebViewをダイアログ表示するのに苦労したので残します。
今回の要件は、Firebase Hostingを用いてホスティングしたHTML文書をダイアログ内のWebViewで表示することです。
- FlutterのWebView表示にはflutter_inappbrowserを使いました
- flutter_webview_pluginはダイアログ表示ができない
- Flutter公式のwebview_flutterはHTMLの読み込みでバグがある
詳細
FlutterのWebView表示にはflutter_inappbrowserを使いました
使い方は簡単です。
/// これでWebViewが表示できる
InAppWebView(initialUrl: url);
/// ダイアログ内で表示する場合
showDialog(
context: context,
builder: (BuildContext context) {
return InAppWebView(initialUrl: url);
}
)
flutter_webview_pluginはダイアログ表示ができない
https://github.com/fluttercommunity/flutter_webview_plugin/issues/69
こちらのIssueで言及されていますが、このプラグインはFlutterのWidgetTree内に描画しているのではなくScaffoldの一番上に表示されてしまうため、Dialogのようなコンテナ内に表示できません。
実際にダイアログ内に入れて動かしてみたところ、ダイアログからはみ出るような形で描画されてしまいました。
Flutter公式のwebview_flutterはHTMLの読み込みでバグがある
https://github.com/flutter/flutter/issues/29446
こちらのプラグインを使用したところ、ホスティングしたHTML文書を読み込んだ際に上記Issueと同様のエラーが発生しました。
コメントを見たところ、どうやら元を辿ればChomiumのバグのようです。
https://github.com/flutter/plugins/pull/1360
2019年3月27日現在、どうやら上記のプルリクエストでIssueの修正がされたようですが、こちらのIssueコメントによるとまだ修正しきれていないようで再オープンとなっています。