@@ -13,7 +13,7 @@ import 'package:flutter/material.dart';
1313import 'package:path_provider/path_provider.dart' ;
1414import 'package:webview_flutter/webview_flutter.dart' ;
1515
16- void main () => runApp (MaterialApp (home: WebViewExample ()));
16+ void main () => runApp (const MaterialApp (home: WebViewExample ()));
1717
1818const String kNavigationExamplePage = '''
1919<!DOCTYPE html><html>
@@ -71,6 +71,10 @@ const String kTransparentBackgroundPage = '''
7171''' ;
7272
7373class WebViewExample extends StatefulWidget {
74+ const WebViewExample ({this .cookieManager});
75+
76+ final CookieManager ? cookieManager;
77+
7478 @override
7579 _WebViewExampleState createState () => _WebViewExampleState ();
7680}
@@ -96,42 +100,38 @@ class _WebViewExampleState extends State<WebViewExample> {
96100 // This drop down menu demonstrates that Flutter widgets can be shown over the web view.
97101 actions: < Widget > [
98102 NavigationControls (_controller.future),
99- SampleMenu (_controller.future),
103+ SampleMenu (_controller.future, widget.cookieManager ),
100104 ],
101105 ),
102- // We're using a Builder here so we have a context that is below the Scaffold
103- // to allow calling Scaffold.of(context) so we can show a snackbar.
104- body: Builder (builder: (BuildContext context) {
105- return WebView (
106- initialUrl: 'https://flutter.dev' ,
107- javascriptMode: JavascriptMode .unrestricted,
108- onWebViewCreated: (WebViewController webViewController) {
109- _controller.complete (webViewController);
110- },
111- onProgress: (int progress) {
112- print ('WebView is loading (progress : $progress %)' );
113- },
114- javascriptChannels: < JavascriptChannel > {
115- _toasterJavascriptChannel (context),
116- },
117- navigationDelegate: (NavigationRequest request) {
118- if (request.url.startsWith ('https://www.youtube.com/' )) {
119- print ('blocking navigation to $request }' );
120- return NavigationDecision .prevent;
121- }
122- print ('allowing navigation to $request ' );
123- return NavigationDecision .navigate;
124- },
125- onPageStarted: (String url) {
126- print ('Page started loading: $url ' );
127- },
128- onPageFinished: (String url) {
129- print ('Page finished loading: $url ' );
130- },
131- gestureNavigationEnabled: true ,
132- backgroundColor: const Color (0x00000000 ),
133- );
134- }),
106+ body: WebView (
107+ initialUrl: 'https://flutter.dev' ,
108+ javascriptMode: JavascriptMode .unrestricted,
109+ onWebViewCreated: (WebViewController webViewController) {
110+ _controller.complete (webViewController);
111+ },
112+ onProgress: (int progress) {
113+ print ('WebView is loading (progress : $progress %)' );
114+ },
115+ javascriptChannels: < JavascriptChannel > {
116+ _toasterJavascriptChannel (context),
117+ },
118+ navigationDelegate: (NavigationRequest request) {
119+ if (request.url.startsWith ('https://www.youtube.com/' )) {
120+ print ('blocking navigation to $request }' );
121+ return NavigationDecision .prevent;
122+ }
123+ print ('allowing navigation to $request ' );
124+ return NavigationDecision .navigate;
125+ },
126+ onPageStarted: (String url) {
127+ print ('Page started loading: $url ' );
128+ },
129+ onPageFinished: (String url) {
130+ print ('Page finished loading: $url ' );
131+ },
132+ gestureNavigationEnabled: true ,
133+ backgroundColor: const Color (0x00000000 ),
134+ ),
135135 floatingActionButton: favoriteButton (),
136136 );
137137 }
@@ -140,8 +140,7 @@ class _WebViewExampleState extends State<WebViewExample> {
140140 return JavascriptChannel (
141141 name: 'Toaster' ,
142142 onMessageReceived: (JavascriptMessage message) {
143- // ignore: deprecated_member_use
144- Scaffold .of (context).showSnackBar (
143+ ScaffoldMessenger .of (context).showSnackBar (
145144 SnackBar (content: Text (message.message)),
146145 );
147146 });
@@ -152,19 +151,24 @@ class _WebViewExampleState extends State<WebViewExample> {
152151 future: _controller.future,
153152 builder: (BuildContext context,
154153 AsyncSnapshot <WebViewController > controller) {
155- if (controller.hasData) {
156- return FloatingActionButton (
157- onPressed: () async {
158- final String url = (await controller.data! .currentUrl ())! ;
159- // ignore: deprecated_member_use
160- Scaffold .of (context).showSnackBar (
161- SnackBar (content: Text ('Favorited $url ' )),
162- );
163- },
164- child: const Icon (Icons .favorite),
165- );
166- }
167- return Container ();
154+ return FloatingActionButton (
155+ onPressed: () async {
156+ String ? url;
157+ if (controller.hasData) {
158+ url = (await controller.data! .currentUrl ())! ;
159+ }
160+ ScaffoldMessenger .of (context).showSnackBar (
161+ SnackBar (
162+ content: Text (
163+ controller.hasData
164+ ? 'Favorited $url '
165+ : 'Unable to favorite' ,
166+ ),
167+ ),
168+ );
169+ },
170+ child: const Icon (Icons .favorite),
171+ );
168172 });
169173 }
170174}
@@ -186,10 +190,11 @@ enum MenuOptions {
186190}
187191
188192class SampleMenu extends StatelessWidget {
189- SampleMenu (this .controller);
193+ SampleMenu (this .controller, CookieManager ? cookieManager)
194+ : cookieManager = cookieManager ?? CookieManager ();
190195
191196 final Future <WebViewController > controller;
192- final CookieManager cookieManager = CookieManager () ;
197+ late final CookieManager cookieManager;
193198
194199 @override
195200 Widget build (BuildContext context) {
@@ -315,8 +320,7 @@ class SampleMenu extends StatelessWidget {
315320 WebViewController controller, BuildContext context) async {
316321 final String cookies =
317322 await controller.runJavascriptReturningResult ('document.cookie' );
318- // ignore: deprecated_member_use
319- Scaffold .of (context).showSnackBar (SnackBar (
323+ ScaffoldMessenger .of (context).showSnackBar (SnackBar (
320324 content: Column (
321325 mainAxisAlignment: MainAxisAlignment .end,
322326 mainAxisSize: MainAxisSize .min,
@@ -332,8 +336,7 @@ class SampleMenu extends StatelessWidget {
332336 WebViewController controller, BuildContext context) async {
333337 await controller.runJavascript (
334338 'caches.open("test_caches_entry"); localStorage["test_localStorage"] = "dummy_entry";' );
335- // ignore: deprecated_member_use
336- Scaffold .of (context).showSnackBar (const SnackBar (
339+ ScaffoldMessenger .of (context).showSnackBar (const SnackBar (
337340 content: Text ('Added a test entry to cache.' ),
338341 ));
339342 }
@@ -348,8 +351,7 @@ class SampleMenu extends StatelessWidget {
348351 Future <void > _onClearCache (
349352 WebViewController controller, BuildContext context) async {
350353 await controller.clearCache ();
351- // ignore: deprecated_member_use
352- Scaffold .of (context).showSnackBar (const SnackBar (
354+ ScaffoldMessenger .of (context).showSnackBar (const SnackBar (
353355 content: Text ('Cache cleared.' ),
354356 ));
355357 }
@@ -360,8 +362,7 @@ class SampleMenu extends StatelessWidget {
360362 if (! hadCookies) {
361363 message = 'There are no cookies.' ;
362364 }
363- // ignore: deprecated_member_use
364- Scaffold .of (context).showSnackBar (SnackBar (
365+ ScaffoldMessenger .of (context).showSnackBar (SnackBar (
365366 content: Text (message),
366367 ));
367368 }
@@ -375,7 +376,7 @@ class SampleMenu extends StatelessWidget {
375376
376377 Future <void > _onSetCookie (
377378 WebViewController controller, BuildContext context) async {
378- await CookieManager () .setCookie (
379+ await cookieManager .setCookie (
379380 const WebViewCookie (
380381 name: 'foo' , value: 'bar' , domain: 'httpbin.org' , path: '/anything' ),
381382 );
@@ -466,8 +467,7 @@ class NavigationControls extends StatelessWidget {
466467 if (await controller! .canGoBack ()) {
467468 await controller.goBack ();
468469 } else {
469- // ignore: deprecated_member_use
470- Scaffold .of (context).showSnackBar (
470+ ScaffoldMessenger .of (context).showSnackBar (
471471 const SnackBar (content: Text ('No back history item' )),
472472 );
473473 return ;
@@ -482,8 +482,7 @@ class NavigationControls extends StatelessWidget {
482482 if (await controller! .canGoForward ()) {
483483 await controller.goForward ();
484484 } else {
485- // ignore: deprecated_member_use
486- Scaffold .of (context).showSnackBar (
485+ ScaffoldMessenger .of (context).showSnackBar (
487486 const SnackBar (
488487 content: Text ('No forward history item' )),
489488 );
0 commit comments