当前位置: 首页 > article >正文

webview_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.kler.cn/a/538515.html

相关文章:

  • Redis的数据过期策略和数据淘汰策略
  • 保姆级AI开发环境搭建
  • redis项目
  • 开源模型应用落地-CodeQwen模型小试-SQL专家测试(二)
  • 【场景题】架构优化 - 解耦Redis缓存与业务逻辑
  • 设计模式 ->模板方法模式(Template Method Pattern)
  • Vite 代理下的 POST 请求跨域问题排查与解决方案
  • 搭建linux qt5.6环境
  • RabbitMQ 从入门到精通:从工作模式到集群部署实战(五)
  • vue封装组件进阶
  • Visual Basic语言的区块链
  • Unity做2D小游戏2------创建地形和背景
  • Spring Boot的常用注解
  • 光伏-报告显示,假期内,硅料端签单顺序发货相对稳定。若3月份下游存提产,则不排除硅料价格有上调预期。
  • Java怎么记录网络安全情报 java转网络安全
  • 微服务日志查询难解决方案-EFK
  • 增加工作台菜单页面,AI问答应用支持上下文设置,数据库表索引优化,zyplayer-doc 2.4.8 发布啦!
  • deepseek+kimi自动生成ppt
  • 【信奥赛CSP-J 需要掌握的STL知识有哪些?】
  • 【HarmonyOS NEXT】systemDateTime 时间戳转换为时间格式 Date,DateTimeFormat
  • C# ASP.NET程序与 Web services 编程介绍
  • Python实现机器学习小项目教程案例
  • Ollama 部署 DeepSeek-R1 及Open-WebUI
  • 响应式编程库Reactor(一)
  • USB枚举过程及Linux下U盘识别流程
  • DeepSeek-V3 论文解读:大语言模型领域的创新先锋与性能强者