Flutter鸿蒙next 中如何实现 WebView【跳、显、适、反】等一些基础问题

✅近期推荐:求职神器

https://bbs.csdn.net/topics/619384540


🔥欢迎大家订阅系列专栏:flutter_鸿蒙next
💬淼学派语录:只有不断的否认自己和肯定自己,才能走出弯曲不平的泥泞路,因为平坦的大路,太tm无趣了!

目录

写在前面

1. 添加依赖

2. 配置平台权限

3. 创建 WebView 页面

4. 从 Flutter 项目跳转到 WebView 页面

5. 适配不同机型

6. 从 WebView 返回携带参数

7. 测试与调试

写在最后


写在前面

在 Flutter 中集成 WebView 是一种常见需求,可以用于展示网页或进行在线操作。以下是如何在 Flutter 项目中实现 WebView,适配不同机型,并处理页面间参数传递的详细步骤。

1. 添加依赖

首先,在 pubspec.yaml 中添加 webview_flutter 插件:

dependencies:flutter:sdk: flutterwebview_flutter: ^latest_version

然后,运行 flutter pub get 安装依赖。

2. 配置平台权限

鸿蒙nextOS:鸿蒙应用中设置并使用网络权限。可以在 

module.json5

 文件中声明网络权限。

{"permissions": ["ohos.permission.INTERNET"]
}

Android: 在 AndroidManifest.xml 中,添加网络权限:

<uses-permission android:name="android.permission.INTERNET"/>

iOS: 在 Info.plist 中,添加以下配置以允许访问网络:

<key>NSAppTransportSecurity</key>
<dict><key>NSAllowsArbitraryLoads</key><true/>
</dict>
3. 创建 WebView 页面

在你的 Flutter 项目中创建一个 WebView 页面。例如:

import 'package:flutter/material.dart';
import 'package:webview_flutter/webview_flutter.dart';class WebViewPage extends StatefulWidget {final String url;WebViewPage({required this.url});@override_WebViewPageState createState() => _WebViewPageState();
}class _WebViewPageState extends State<WebViewPage> {late WebViewController _controller;bool _isLoading = true;@overrideWidget build(BuildContext context) {return Scaffold(appBar: AppBar(title: Text('WebView Example'),),body: Stack(children: [WebView(initialUrl: widget.url,javascriptMode: JavascriptMode.unrestricted,onWebViewCreated: (WebViewController webViewController) {_controller = webViewController;},onPageFinished: (String url) {setState(() {_isLoading = false;});},),if (_isLoading)Center(child: CircularProgressIndicator()),],),);}
}
4. 从 Flutter 项目跳转到 WebView 页面

在 Flutter 的主页面或其他地方,可以通过 Navigator 跳转到 WebView 页面:

Navigator.push(context,MaterialPageRoute(builder: (context) => WebViewPage(url: 'https://flutter.dev'),),
);
5. 适配不同机型

为了确保 WebView 在不同机型上的适配,使用 MediaQuery 获取屏幕尺寸并设置 WebView 的高度和宽度:

final screenWidth = MediaQuery.of(context).size.width;
final screenHeight = MediaQuery.of(context).size.height;WebView(initialUrl: widget.url,javascriptMode: JavascriptMode.unrestricted,// 这里可以根据需要调整高度和宽度
);
6. 从 WebView 返回携带参数

要从 WebView 返回到 Flutter 页面并携带参数,可以在 WebView 中使用 JavaScript 与 Flutter 进行交互。可以通过 evaluateJavascript 传递数据:

// 在 WebView 中调用
final result = await _controller.evaluateJavascript("someFunction()");
Navigator.pop(context, result);

在 Flutter 中接收参数:

final result = await Navigator.push(context,MaterialPageRoute(builder: (context) => WebViewPage(url: 'https://your-url.com'),),
);
if (result != null) {// 处理返回的参数print(result);
}
7. 测试与调试

在不同设备上进行测试,确保 WebView 的显示效果和功能正常。使用 Flutter 的热重载功能可以快速查看更改。

写在最后

通过上述步骤,你可以在 Flutter 项目中有效实现 WebView,适配不同机型,并实现页面间的数据传递。这样的实现不仅丰富了应用的功能,也提升了用户体验。通过调试和优化,确保 WebView 的性能和稳定性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/457601.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【计算机操作系统】课程 作业二 进程与线程 408考研

作业二 进程与线程 1.根据下图&#xff0c;回答问题。&#xff08;共65分&#xff09; &#xff08;1&#xff09; 请简述进程发生状态变迁1、3、4、6、7的原因。&#xff08;每条5分.共25分&#xff09; 1表示操作系统把处于创建状态的进程移入就绪队列&#xff1b;3表示进程…

.Net 8 Web API CRUD 操作

本次介绍分为3篇文章&#xff1a; 1&#xff1a;.Net 8 Web API CRUD 操作https://blog.csdn.net/hefeng_aspnet/article/details/143228383 2&#xff1a;在 .Net 8 API 中实现 Entity Framework 的 Code First 方法https://blog.csdn.net/hefeng_aspnet/article/details/1…

【LeetCode:264. 丑数 II + 小根堆】

在这里插入代码片 &#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕…

stm32 使用J-Link RTT Viewer打印日志

文章目录 stm32 使用J-Link RTT Viewer一、RTT功能简介二、准备工作安装J-Link软件驱动&#xff1a;获取RTT驱动文件&#xff1a;配置工程&#xff1a; 三、使用RTT打印日志初始化RTT&#xff1a;打印日志&#xff1a;查看日志&#xff1a; 四、高级功能封装print_log函数&…

021、深入解析前端请求拦截器

目录 深入解析前端请求拦截器&#xff1a; 1. 引言 2. 核心实现与基础概念 2.1 基础拦截器实现 2.2 响应拦截器配置 3. 实际应用场景 3.1 完整的用户认证系统 3.2 文件上传系统 3.3 API请求缓存系统 3.4 请求重试机制 3.5 国际化处理 4. 性能优化实践 4.1 请求合并…

三周精通FastAPI:15 请求文件和同时请求表单+文件

官网文档&#xff1a;请求文件 - FastAPI 请求文件 File 用于定义客户端的上传文件。 from fastapi import FastAPI, File, UploadFileapp FastAPI()app.post("/files/") async def create_file(file: bytes File()):return {"file_size": len(file)}…

直播系统源码技术搭建部署流程及配置步骤

系统环境要求 PHP版本&#xff1a;5.6、7.3 Mysql版本&#xff1a;5.6&#xff0c;5.7需要关闭严格模式 Nginx&#xff1a;任何版本 Redis&#xff1a;需要给所有PHP版本安装Redis扩展&#xff0c;不需要设置Redis密码 最好使用面板安装&#xff1a;宝塔面板 - 简单好用的…

Kafka消费者故障,出现活锁问题如何解决?

大家好&#xff0c;我是锋哥。今天分享关于【Kafka消费者故障&#xff0c;出现活锁问题如何解决&#xff1f;】面试题&#xff1f;希望对大家有帮助&#xff1b; Kafka消费者故障&#xff0c;出现活锁问题如何解决&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资…

【C++】string类 (模拟实现详解 下)

我们接着上一篇【C】string类 &#xff08;模拟实现详解 上&#xff09;-CSDN博客继续对string模拟实现。从这篇内容开始&#xff0c;string相关函数的实现就要声明和定义分离了。 1.reserve、push_back和append 在string.h的string类里进行函数的声明。 void reserve(size_…

Maven项目报错:invalid LOC header (bad signature)

文章目录 Maven项目报错&#xff1a;invalid LOC header (bad signature)1. Maven项目加载或Pom.Xml刷新后仍出现如下错误2. 解决方法 Maven项目报错&#xff1a;invalid LOC header (bad signature) 1. Maven项目加载或Pom.Xml刷新后仍出现如下错误 错误提示&#xff1a; in…

【Spring MVC】请求参数的获取

我的主页 1. 获取 URL 中的参数 获取 URL 中的参数是通过 PathVariable 注解实现的 RequestMapping("/article/{articleId}") public String method12(PathVariable("articleId") String articleId){return "接收到参数articleId: " articleI…

书生第四期作业:L0G4000 任务作业

模型下载 在github-codespace 登录codespace安装依赖&#xff1a; 运行下载的py文件&#xff0c;下载模型配置文件&#xff0c; 下载完成 在intern-studio开发机 下载配置文件 下载完成

2024系统架构师---真题考试知识点

1.逻辑地址的构成是“逻辑地址&页内地址”&#xff0c;而物理地址的构成“物理块号&页内地址”&#xff0c;因此只要找出逻辑地址中那几位表示逻辑页号基本就完成了。页内大小4k4*2的10次方2的12次方&#xff0c;可以得出页内地址占12位&#xff0c;因此1B1AH的后12位&…

群控系统服务端开发模式-系统架构图

一、开发服务(1.0版本)&#xff1a; 平台前端服务、平台api接口服务、国外api处理服务&#xff1b; 二、开发服务(2.0版本)&#xff1a; 国内客户端前端服务、国内客户端api接口服务、国外客户端前端服务、国外客户端api接口服务&#xff1b; 三、运行服务(1.0版本)&#xff…

JavaWeb合集22-Apache POI

二十二、Apache POI Apache POI是一个处理Miscrosoft Office各种文件格式的开源项目。简单来说就是&#xff0c;我们可以使用POI在Java 序中对Miscrosoft Office各种文件进行读写操作。一般情况下&#xff0c;POI都是用于操作Excel文件。 使用场景&#xff1a;银行网银系统导出…

【Android】Kotlin教程(2)

文章目录 1.空安全2.let安全调用3.非空断言操作符!!4.空合并操作符 ?:5.异常6.先决条件函数7.substring8.split函数9.replace10.字符串比较11.安全转换函数12.标准库函数1.apply2.run3.with4.also5.takeIf6.takeUnless 1.空安全 为了避免NullPointerException&#xff0c;Kot…

【2024|滑坡数据集论文解读3】CAS滑坡数据集:用于深度学习滑坡检测的大规模多传感器数据集

【2024|滑坡数据集论文解读3】CAS滑坡数据集&#xff1a;用于深度学习滑坡检测的大规模多传感器数据集 【2024|滑坡数据集论文解读3】CAS滑坡数据集&#xff1a;用于深度学习滑坡检测的大规模多传感器数据集 文章目录 【2024|滑坡数据集论文解读3】CAS滑坡数据集&#xff1a;用…

计算机网络(十二) —— 高级IO

#1024程序员节 | 征文# 目录 一&#xff0c;预备 1.1 重新理解IO 1.2 五种IO模型 1.3 非阻塞IO 二&#xff0c;select 2.1 关于select 2.2 select接口参数解释 2.3 timeval结构体和fd_set类型 2.4 socket就绪条件 2.5 select基本工作流程 2.6 简单select的服务器代…

c++编解码封装

多态版编解码 对服务器和客户端的结构体进行序列化然后对数据进行反序列化 案例分析 代码demo Codec.h #pragma once #include <iostream>class Codec { public:Codec();virtual std::string encodeMsg();//string是标准库的string类virtual void* decodeMsg();virtu…

西瓜书《机器学习》符号表KaTex表示

写这篇post的缘故是最近整理机器学习的相关公式&#xff0c;经常要用到KaTex, 但网络上搜索到的西瓜书符号表的表示有些并不准确或不严谨&#xff0c;本着严谨治学的态度&#xff0c;整理了一下符号表的KaTex表示&#xff0c;希望有所帮助,整理过程中参考了《南瓜书》和 KaTex官…