# web_plugin **Repository Path**: QZYOS/web_plugin ## Basic Information - **Project Name**: web_plugin - **Description**: 对webview_flutter进行优化 监听URL变化 - **Primary Language**: Dart - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2020-12-29 - **Last Updated**: 2022-07-01 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # web_plugin #### 介绍 ``` - 使用方式 webview_flutter: git: url: https://gitee.com/QZYOS/web_plugin.git path: webview_flutter ``` ### 用法 ``` dart import 'dart:async'; import 'dart:convert'; import 'dart:io'; import 'package:flutter/foundation.dart'; import 'package:flutter/gestures.dart'; import 'package:flutter/material.dart'; import 'package:webview_flutter/webview_flutter.dart'; class WSSummarizeWebPage extends StatefulWidget { String navTitle; String urlStr; WSSummarizeWebPage({ @required this.urlStr, this.navTitle = "", }); @override _WSSummarizeWebPageState createState() => _WSSummarizeWebPageState(); } class _WSSummarizeWebPageState extends State { final Completer _controller = Completer(); @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text(widget.navTitle), leading: IconButton( icon: Icon( Icons.arrow_back, size: 24, ), onPressed: () { _controller.future.then((vc) async { if (await vc.canGoBack()) { await vc.goBack(); } else { Navigator.of(context).pop(); } }); }), ), backgroundColor: Colors.white54, body: _body(), ); } _body() { return WebView( initialUrl: widget.urlStr, javascriptMode: JavascriptMode.unrestricted, gestureRecognizers: >[ Factory(() => EagerGestureRecognizer()) ].toSet(), onWebViewCreated: (WebViewController webViewController) { _controller.complete(webViewController); }, javascriptChannels: [ _toasterJavascriptChannel(context), ].toSet(), navigationDelegate: (NavigationRequest request) { if (Platform.isIOS) { _javascriptModeH5ToNative(request.url); } return NavigationDecision.navigate; }, onUrlChange: _onUrlChange, onPageFinished: (String url) { if (Platform.isAndroid) { _javascriptModeH5ToNative(url); } }, ); } _javascriptModeH5ToNative(String url) async { print(url); } _onUrlChange(String url) async { print("_onUrlChange $url"); } JavascriptChannel _toasterJavascriptChannel(BuildContext context) { return JavascriptChannel( name: 'NativeJavascriptChannel', onMessageReceived: (JavascriptMessage message) { print(message.message); }); } } ```