FlutterでWebviewを表示する

by dicekest,

webview_flutterがpublishされたのでwebviewを表示してみたいと思います。 versionは v0.0.1

導入

pubspec.yamlに下記を追加

  webview_flutter: ^0.3.0

ios/Runner/Info.plistに下記を追加

	<key>io.flutter.embedded_views_preview</key>
	<true/>

実装例

import 'package:flutter/material.dart';
import 'package:webview_flutter/webview_flutter.dart';

void main() => runApp(MaterialApp(home:WebViewExample()));

class WebViewExample extends StatefulWidget {
  @override
  State<StatefulWidget> createState() => _WebViewExampleState();
}

class _WebViewExampleState extends State<WebViewExample> {
  WebViewController _controller;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(
          title: Text('Webview Demo'),
          actions: <Widget>[
            IconButton(
              icon: Icon(Icons.refresh),
              onPressed: () {
                _controller.loadUrl('https://www.twitch.tv/');
              },
            ),
            IconButton(
              icon: Icon(Icons.add_comment),
              onPressed: () {
                showDialog(context: context, builder: (context) {
                  return AlertDialog(title: Text('webviewの上に表示'),);
                });
              },
            ),
          ],
        ),
        body: WebView(
          initialUrl: 'https://youtube.com',
          javascriptMode: JavascriptMode.unrestricted,
          onWebViewCreated: (WebViewController controller) {
            _controller = controller;
          },
        ),
    );
  }
}

Webviewでページを表示する

initialUrlで設定したページを表示することができます。 また、JavaScriptを有効にする場合にはunrestrictedを設定します。 デフォルトだと無効になっているので注意。

initialUrl: 'https://youtube.com',
javaScriptMode: JavaScriptMode.unrestricted,

任意のページを読み込む

webviewを作成した際にwebviewを操作するControllerを受け取ることができます。

onWebViewCreated: (WebViewController controller) {
  _controller = controller;
},

このControllerを利用してボタンをタップした際にページを読み込むようにしてみます。

            IconButton(
              icon: Icon(Icons.refresh),
              onPressed: () {
                _controller.loadUrl('https://www.twitch.tv/');
              },
            ),

Webviewの上にWidgetを表示する

おそらくflutterではメジャーなこちらのflutter_webview_pluginだとwebviewが最前面のレイヤーに表示されるため、 webviewの上にwidgetを表示することができませんでした。 webview_flutterを使えばダイアログもwebviewの上に表示することができます。

flutter-webview.gif

まだちょっと機能不足ではありますがwebviewを使う場合は選択肢に入れてもいいかなと思います。