1- [ ![ pub package] ( https://img.shields.io/pub/v/flutter_webview_plugin.svg )] ( https://pub.dartlang.org/packages/flutter_webview_plugin )
1+ <img src="https://img.shields.io/badge/Flutter%20Communityflutter__webview__plugin-blue.svg?style=for-the-badge&logo=data:image/png;base64,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" width="800">
22
3+ [ Flutter Community] ( https://github.com/fluttercommunity/community )
34
4- # flutter_webview_plugin
5+ # Flutter WebView Plugin
56
6- Plugin that allow Flutter to communicate with a native WebView.
7+ [ ![ pub package ] ( https://img.shields.io/pub/v/flutter_webview_plugin.svg )] ( https://pub.dartlang.org/packages/flutter_webview_plugin )
78
8- *** Warning:***
9+ Plugin that allows Flutter to communicate with a native WebView.
10+
11+ ** _ Warning:_ **
912The webview is not integrated in the widget tree, it is a native view on top of the flutter view.
1013you won't be able to use snackbars, dialogs ...
1114
@@ -21,24 +24,57 @@ For help getting started with Flutter, view our online [documentation](http://fl
2124new MaterialApp(
2225 routes: {
2326 "/": (_) => new WebviewScaffold(
24- url: "https://www.google.com",
25- appBar: new AppBar(
26- title: new Text("Widget webview"),
27- ),
28- )
27+ url: "https://www.google.com",
28+ appBar: new AppBar(
29+ title: new Text("Widget webview"),
30+ ),
31+ ),
2932 },
3033 );
3134```
3235
36+ Optional parameters ` hidden ` and ` initialChild ` are available so that you can show something else while waiting for the page to load.
37+ If you set ` hidden ` to true it will show a default CircularProgressIndicator. If you additionally specify a Widget for initialChild
38+ you can have it display whatever you like till page-load.
39+
40+ e.g. The following will show a read screen with the text 'waiting.....'.
41+ ``` dart
42+ return new MaterialApp(
43+ title: 'Flutter WebView Demo',
44+ theme: new ThemeData(
45+ primarySwatch: Colors.blue,
46+ ),
47+ routes: {
48+ '/': (_) => const MyHomePage(title: 'Flutter WebView Demo'),
49+ '/widget': (_) => new WebviewScaffold(
50+ url: selectedUrl,
51+ appBar: new AppBar(
52+ title: const Text('Widget webview'),
53+ ),
54+ withZoom: true,
55+ withLocalStorage: true,
56+ hidden: true,
57+ initialChild: Container(
58+ color: Colors.redAccent,
59+ child: const Center(
60+ child: Text('Waiting.....'),
61+ ),
62+ ),
63+ ),
64+ },
65+ );
66+ ```
67+
3368` FlutterWebviewPlugin ` provide a singleton instance linked to one unique webview,
3469so you can take control of the webview from anywhere in the app
3570
3671listen for events
72+
3773``` dart
3874final flutterWebviewPlugin = new FlutterWebviewPlugin();
3975
4076flutterWebviewPlugin.onUrlChanged.listen((String url) {
41-
77+
4278});
4379```
4480
@@ -62,7 +98,7 @@ Note: Do note there is a slight difference is scroll distance between ios and an
6298#### Hidden WebView
6399
64100```dart
65- final flutterWebviewPlugin = new FlutterWebviewPlugin();
101+ final flutterWebviewPlugin = new FlutterWebviewPlugin();
66102
67103flutterWebviewPlugin.launch(url, hidden: true);
68104```
@@ -76,58 +112,98 @@ flutterWebviewPlugin.close();
76112#### Webview inside custom Rectangle
77113
78114``` dart
79- final flutterWebviewPlugin = new FlutterWebviewPlugin();
115+ final flutterWebviewPlugin = new FlutterWebviewPlugin();
80116
81117flutterWebviewPlugin.launch(url,
82- fullScreen: false,
83- rect: new Rect.fromLTWH(
84- 0.0,
85- 0.0,
86- MediaQuery.of(context).size.width,
87- 300.0));
118+ fullScreen: false,
119+ rect: new Rect.fromLTWH(
120+ 0.0,
121+ 0.0,
122+ MediaQuery.of(context).size.width,
123+ 300.0,
124+ ),
125+ );
88126```
89127
90128### Webview Events
91129
92130- ` Stream<Null> ` onDestroy
93131- ` Stream<String> ` onUrlChanged
94132- ` Stream<WebViewStateChanged> ` onStateChanged
133+ - ` Stream<double> ` onScrollXChanged
134+ - ` Stream<double> ` onScrollYChanged
95135- ` Stream<String> ` onError
96136
97- *** Don 't forget to dispose webview * **
137+ ** _ Don 't forget to dispose webview _ **
98138` flutterWebviewPlugin.dispose() `
99139
100140### Webview Functions
101141
102142``` dart
103- Future<Null> launch(String url,
104- {Map<String, String> headers: null,
105- bool withJavascript: true,
106- bool clearCache: false,
107- bool clearCookies: false,
108- bool hidden: false,
109- bool enableAppScheme: true,
110- Rect rect: null,
111- String userAgent: null,
112- bool withZoom: false,
113- bool withLocalStorage: true,
114- bool scrollBar: true});
143+ Future<Null> launch(String url, {
144+ Map<String, String> headers: null,
145+ bool withJavascript: true,
146+ bool clearCache: false,
147+ bool clearCookies: false,
148+ bool hidden: false,
149+ bool enableAppScheme: true,
150+ Rect rect: null,
151+ String userAgent: null,
152+ bool withZoom: false,
153+ bool withLocalStorage: true,
154+ bool withLocalUrl: true,
155+ bool scrollBar: true,
156+ bool supportMultipleWindows: false,
157+ bool appCacheEnabled: false,
158+ bool allowFileURLs: false,
159+ });
115160```
161+
116162``` dart
117163Future<String> evalJavascript(String code);
118164```
165+
119166``` dart
120167Future<Map<String, dynamic>> getCookies();
121168```
169+
170+ ``` dart
171+ Future<Null> cleanCookies();
172+ ```
173+
122174``` dart
123175Future<Null> resize(Rect rect);
124176```
177+
125178``` dart
126179Future<Null> show();
127180```
181+
128182``` dart
129183Future<Null> hide();
130184```
185+
131186``` dart
132187Future<Null> reloadUrl(String url);
133188```
189+
190+ ``` dart
191+ Future<Null> close();
192+ ```
193+
194+ ``` dart
195+ Future<Null> reload();
196+ ```
197+
198+ ``` dart
199+ Future<Null> goBack();
200+ ```
201+
202+ ``` dart
203+ Future<Null> goForward();
204+ ```
205+
206+ ``` dart
207+ Future<Null> stopLoading();
208+ ```
209+
0 commit comments