webview_flutter的使用

news/2025/2/9 6:18:23 标签: flutter

目录

  • 步骤
  • 示例代码

步骤

1.配置依赖。根目录下运行如下命令:

flutter pub add webview_flutter

2.所需页面导入:

import ‘package:webview_flutter/webview_flutter.dart’;

3.初始化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'));
  }

示例代码

import 'package:flutter/material.dart';
// 导入 webview_flutter 包,用于在 Flutter 应用中嵌入 WebView 来显示网页内容
import 'package:webview_flutter/webview_flutter.dart';

// 定义一个名为 RelfreshPage 的有状态组件,用于展示一个包含 WebView 的页面
class RelfreshPage extends StatefulWidget {
  // 构造函数,Key? key 是可选参数,用于在组件树中唯一标识该组件
  const RelfreshPage({Key? key}) : super(key: key);

  // 创建该组件对应的状态类实例
  
  State<RelfreshPage> createState() => _RelfreshPageState();
}

// 定义 RelfreshPage 组件对应的状态类
class _RelfreshPageState extends State<RelfreshPage> {
  // 定义一个 WebViewController 类型的变量 controller,用于控制 WebView 的行为
  // late 关键字表示该变量会在使用前被初始化
  late WebViewController controller;

  // 组件状态初始化方法,在组件创建时调用
  
  void initState() {
    // 调用父类的 initState 方法,确保父类的初始化逻辑正常执行
    super.initState();
    // 调用自定义的初始化 WebView 控制器的方法
    _initWebViewController();
  }

  // 自定义方法,用于初始化 WebView 控制器
  void _initWebViewController() {
    // 创建一个 WebViewController 实例,并对其进行一系列配置
    controller = WebViewController()
      // 设置 JavaScript 模式为 unrestricted,表示允许在 WebView 中无限制地执行 JavaScript 代码
     ..setJavaScriptMode(JavaScriptMode.unrestricted)
      // 设置 WebView 的背景颜色为透明
     ..setBackgroundColor(const Color(0x00000000))
      // 设置导航委托,用于监听 WebView 的各种导航事件
     ..setNavigationDelegate(
        NavigationDelegate(
          // 当页面加载进度发生变化时调用该回调函数,参数 progress 表示加载进度百分比
          onProgress: (int progress) {
            // 这里可以更新加载进度条,但当前代码中未实现具体逻辑
            // Update loading bar.
          },
          // 当页面开始加载时调用该回调函数,参数 url 表示要加载的页面的 URL
          onPageStarted: (String url) {},
          // 当页面加载完成时调用该回调函数,参数 url 表示已加载完成的页面的 URL
          onPageFinished: (String url) {
            // 页面加载完成后才能执行 js,当前代码中注释掉了具体执行逻辑
            // _handleBackForbid();
          },
          // 当 Web 资源加载出错时调用该回调函数,参数 error 包含错误信息
          onWebResourceError: (WebResourceError error) {},
          // 当有导航请求时调用该回调函数,参数 request 包含导航请求的信息
          // 根据具体情况返回 NavigationDecision.navigate 或 NavigationDecision.prevent 来决定是否允许导航
          onNavigationRequest: (NavigationRequest request) {
            // 允许所有导航请求
            return NavigationDecision.navigate;
          },
        ),
      )
      // 加载指定 URL 的网页
     ..loadRequest(Uri.parse('https://www.geekailab.com'));
  }

  // 构建组件的 UI 界面
  
  Widget build(BuildContext context) {
    // 返回一个 Scaffold 组件,它是 Flutter 中常用的页面布局组件
    return Scaffold(
      // 设置页面的顶部导航栏,显示标题为 'Flutter Simple Example'
      appBar: AppBar(title: const Text('Flutter Simple Example')),
      // 设置页面的主体内容,使用 WebViewWidget 组件来显示 WebView
      // 将之前初始化好的 controller 传递给 WebViewWidget,用于控制 WebView 的行为
      body: WebViewWidget(controller: controller),
    );
  }
}

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


http://www.niftyadmin.cn/n/5845686.html

相关文章

Verilog代码实例

Verilog语言学习&#xff01; 文章目录 目录 文章目录 前言 一、基本逻辑门代码设计和仿真 1.1 反相器 1.2 与非门 1.3 四位与非门 二、组合逻辑代码设计和仿真 2.1 二选一逻辑 2.2 case语句实现多路选择逻辑 2.3 补码转换 2.4 7段数码管译码器 三、时序逻辑代码设计和仿真 3.1…

k8s常见面试题1

k8s常见面试题1 Kubernetes 基础知识核心组件及作用K8S生成pod过程Pod、Deployment、Service的区别保证Pod高可用ConfigMap vs Secret网络模型与Pod通信Ingress 与 Service 的主要区别什么是 Ingressk8s中为什么要做ServiceIngress 与 Service 的区别 资源配额 Kubernetes 实践…

Golang:精通sync/atomic 包的Atomic 操作

在本指南中&#xff0c;我们将探索sync/atomic包的细节&#xff0c;展示如何编写更安全、更高效的并发代码。无论你是经验丰富的Gopher还是刚刚起步&#xff0c;你都会发现有价值的见解来提升Go编程技能。让我们一起开启原子运算的力量吧&#xff01; 理解Go中的原子操作 在快…

25/2/8 <机器人基础> 阻抗控制

1. 什么是阻抗控制&#xff1f; 阻抗控制旨在通过调节机器人与环境的相互作用&#xff0c;控制其动态行为。阻抗可以理解为一个力和位移之间的关系&#xff0c;涉及力、速度和位置的协同控制。 2. 阻抗控制的基本概念 力控制&#xff1a;根据感测的外力调节机械手的动作。位置…

【RandLA-Net】大场景语义分割网络RandLA-Net复现

【RandLA-Net】大场景语义分割网络RandLA-Net复现 文章目录 【RandLA-Net】大场景语义分割网络RandLA-Net复现0. 相关文章1. 实验条件2. 代码3. 数据集4. 环境搭建5. 训练模型6. 测试模型7. 可视化8. 参考博客 0. 相关文章 PointNet模型搭建 基于自建数据训练PointNet分割网络…

雷蛇曼巴无线版更换微动后左键失灵后续——丝血复活

本文首发于只抄博客&#xff0c;欢迎点击原文链接了解更多内容。 前言 上一期《雷蛇曼巴无线版更换左右键、侧键、DPI 键微动翻车记录》中&#xff0c;把鼠标所有的按键都更换了一遍&#xff0c;结果原本唯一正常的左键换完之后无法触发了。 经过评论区大哥指点&#xff0c;猜…

【填坑】新能源汽车三电设计之常用半导体器件系统性介绍

# 在新能源汽车的三电&#xff08;电池、电机、电控&#xff09;系统中&#xff0c;半导体器件扮演着至关重要的角色。它们如同系统的“大脑”和“神经末梢”&#xff0c;精确地控制着电能的流向与转换&#xff0c;确保新能源汽车高效、稳定且安全地运行。今天&#xff0c;就让…

6.Python函数:函数定义、函数的类型、函数参数、函数返回值、函数嵌套、局部变量、全局变量、递归函数、匿名函数

1. 函数定义 Python函数通过def关键字定义。一个函数通常包括函数名、参数列表和函数体。 def greet(name):return f"Hello, {name}!"2. 函数的类型 Python中的函数主要有以下几种类型&#xff1a; 普通函数&#xff1a;具有明确的输入参数和返回值。递归函数&am…