• 【Flutter】webview_flutter使用详解



    前言

    webview_flutter是Flutter官方推出的一款用于Flutter上的webview插件,该插件在 iOS 用的是WKWebView 支持; 在 Android 上用的是系统WebView。

    插件地址:https://pub.dev/packages/webview_flutter


    一、如何使用

    第一步:在项目根目录下运行如下命令配置依赖

    flutter pub add webview_flutter

    第二步:导入
    在需要使用WebView的页面添加:

    import ‘package:webview_flutter/webview_flutter.dart’;

    第三步:初始化一个WebViewController

    
      void initState() {
        super.initState();
        _initWebViewController();
      }
    
      void _initWebViewController() {
        controller = WebViewController()
          ..setJavaScriptMode(JavaScriptMode.unrestricted)
          ..setBackgroundColor(const Color(0x00000000))
          ..setNavigationDelegate(
            NavigationDelegate(
              onProgress: (int progress) {
    		// Update loading bar.
              },
              onPageStarted: (String url) {},
              onPageFinished: (String url) {
    		//页面加载完成后才能执行js
                _handleBackForbid();
              },
              onWebResourceError: (WebResourceError error) {},
              onNavigationRequest: (NavigationRequest request) {
                return NavigationDecision.navigate;
              },
            ),
          )
          ..loadRequest(Uri.parse('https://www.geekailab.com'));
      }
      
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    第四步:将WebViewController传递给WebViewWidget

    
      Widget build(BuildContext context) {
        return Scaffold(
          appBar: AppBar(title: const Text('Flutter Simple Example')),
          body: WebViewWidget(controller: controller),
        );
      }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    API说明
    WebViewController提供的API

    ///是否启用JavaScript执行,默认不启用
    Future<void> setJavaScriptMode(JavaScriptMode javaScriptMode);
    ///设置webview的背景色
    Future<void> setBackgroundColor(Color color);
    /// 当WebView的导航状态发生变化时会回调此方法,在此法中可以进行跳转拦截;
    /// 这里的 NavigationDecision.prevent表示阻止路由替换,NavigationDecision.navigate表示允许路由替换
    Future<void> setNavigationDelegate(NavigationDelegate delegate);
    ///加载一个URL
    /// uri:可以通过Uri.parse(url)来将url转成uri
    /// method:支持get请求和post请求两种,默认为get
    /// headers:发起url加载是携带的header信息,根据请求的网站要求进行传递
    /// body:发起url请求是携带的body信息,可空
    Future<void> loadRequest(
    	Uri uri, {
    	LoadRequestMethod method = LoadRequestMethod.get,
    	Map<String, String> headers = const <String, String>{},
    	Uint8List? body,
    })
    ///设置WebView 是否应支持使用其屏幕缩放控件和手势进行缩放,默认支持;
    Future<void> enableZoom(bool enabled);
    ///用于设置HTTP User-Agent: 请求标头的值
    Future<void> setUserAgent(String? userAgent);
    ///返回此 WebView 的历史记录。
    /// 如果没有返回历史记录项,则这是一个无操作。
    Future<void> goBack();
    /// 返回 WebView 正在显示的当前 URL。
    /// 如果没有加载过 URL,则返回 `null`。
    Future<String?> currentUrl();
    ///运行JS代码,javaScript,要运行的JS代码
    Future<void> runJavaScript(String javaScript);
    /// 运行JS代码并接收运行结果
    /// javaScriptString:要运行的JS代码
    /// 返回:JS运行的结果
    Future<Object> runJavaScriptReturningResult(String javaScript);
    /// 重新加载当前URL
    Future<void> reload();
    /// 判断是否可以返回历史记录的上一页
    Future<bool> canGoBack();
    /// 返回历史记录的上一页
    Future<void> goBack();
    /// 判断是否可以去往历史记录的下一页
    Future<bool> canGoForward();
    ///跳转到历史记录的下一页
    Future<void> goForward();
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
  • 相关阅读:
    【等保常见问题解答】等保测评机构能帮忙做等保整改吗?
    跟着顶级科研报告IPCC学绘图:温度折线/柱图/条带/双y轴
    Django系列5-请求和响应
    成为会带团队的技术人 技术债务:如何带领团队从困境中突围而出?
    一个反序列化问题引发的思考
    如何将vue项目打包在服务器上使用nginx运行,并使用反向代理解决跨域问题
    javaEE进阶——SpringBoot与SpringMVC第一讲
    人工智能在日常生活中的应用
    推荐一款性价比高、功能完善的资产管理系统
    tcp、http、rpc和grpc得一些个人总结
  • 原文地址:https://blog.csdn.net/the_shy_faker/article/details/138174982