【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'));
  }
  

第四步:将WebViewController传递给WebViewWidget


  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text('Flutter Simple Example')),
      body: WebViewWidget(controller: controller),
    );
  }

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. linux docker 使用详解

    2024-04-26 13:12:03       46 阅读
  2. BackgroundWorker使用详解

    2024-04-26 13:12:03       60 阅读
  3. Mybatis使用详解

    2024-04-26 13:12:03       62 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-26 13:12:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-26 13:12:03       100 阅读
  3. 在Django里面运行非项目文件

    2024-04-26 13:12:03       82 阅读
  4. Python语言-面向对象

    2024-04-26 13:12:03       91 阅读

热门阅读

  1. 哪些情况下左联接的数据量比左表大?

    2024-04-26 13:12:03       39 阅读
  2. c# 画球

    2024-04-26 13:12:03       33 阅读
  3. 【人工智能基础】机器学习

    2024-04-26 13:12:03       36 阅读
  4. web server apache tomcat11-17-default-servlet

    2024-04-26 13:12:03       37 阅读
  5. 【KingbaseES】授权用户访问某个表

    2024-04-26 13:12:03       32 阅读
  6. 前端开发禁用F12和右键检查元素处理

    2024-04-26 13:12:03       36 阅读
  7. 数据库连接池介绍(简明扼要版)

    2024-04-26 13:12:03       33 阅读
  8. NLP(8)--利用RNN实现多分类任务

    2024-04-26 13:12:03       33 阅读
  9. (十三)PostgreSQL的扩展(extensions)

    2024-04-26 13:12:03       39 阅读