WebView 加载 Html 字符串

1.添加依赖

在项目的 pubspec.yaml 文件中添加 webview_flutter 插件的依赖:

dependencies:
webview_flutter: ^3.0.0

2.引入webView

在需要加载的页面引入webView头文件

import 'package:webview_flutter/webview_flutter.dart';

3.加载富文本

在需要加载的页面引入webView头文件

WebView(javascriptMode: JavascriptMode.unrestricted,onWebViewCreated: (WebViewController controller){if(htmlStr.isNotEmpty){controller.loadHtmlString(htmlStr);}},),

4.富文本适配

富文本如果没有头部的话,会出现字体过小,宽高不适应手机屏幕的现象。需要加入额外的样式修饰

String htmlStr = """<html><head><meta charset='UTF-8'><title>${data.title}</title><style type=text/css> body {font-size:20px; line-height:40px;background-color: transparent;}p {font-size:30px; line-height:40px;background-color: transparent;}div {font-size:25px; line-height:40px;background-color: transparent;text-align:center;color:#333333;}</style></head><body style='padding-left: 15px;padding-right: 15px;padding-top: 15px;'><div style='color:#FF0000;font-size:40px; line-height:80px;background-color: transparent;text-align:center;font-weight: bold;'>${data.title}<div><div>来源:${data.publishName} 发布时间:${data.publishTime}<div>${data.content}</body> </html>""";

除此之外,loadHtmlString 还有一个可选参数 baseUrl ,作用是当 html 字符串中使用到了相对路径的 url 时,设置了 baseUrl 后 WebView 加载 html 请求相应 url 时就会带上 baseUrl,如 html 字符串中有显示图片,图片地址写的是相对路径,此时就可以使用 baseUrl 参数来解决,如下

WebView(javascriptMode: JavascriptMode.unrestricted,onWebViewCreated: (WebViewController controller){controller.loadHtmlString(htmlStr, baseUrl: baseUrl);},
)

5.WebView 高度自适应

WebView 默认无法做到高度自适应,即根据 html 内容高度自适应,当在 Column 等控件中使用 WebView 而不手动设置固定高度时则会报错。
如果要做到高度自适应,则需要用到 js 方法,在 html 中通过 js 监听页面大小的变化,然后获取页面高度再将高度传递到 Flutter 中,在 Flutter 中获取到高度后再动态改变 WebView 的高度。
实现步骤如下:

给 WebView 添加一个 JavascriptChannel 用于 js 与 Flutter 通信
在 html 中添加 script 使用 ResizeObserver 监听 body 元素的大小变化,在变化回调里调用上一步添加的 JavascriptChannel 发送页面高度的消息
在 Flutter 中接收到消息时,获取 js 发送过来的高度值,然后更新 WebView 的高度
代码如下:

String html = """<!DOCTYPE html><html><head><meta name="viewport" content="width=device-width, initial-scale=1.0"></head><body><p> Hello WebView</p><img src="https://image.baidu.com/search/detail?z=0&word=宠物图片&hs=0&pn=0&spn=0&di=&pi=227259&tn=baiduimagedetail&is=&ie=utf-8&oe=utf-8&cs=4162611394%2C4275913936&os=&simid=&adpicid=0&lpn=0&fr=albumsdetail&fm=&ic=0&sme=&cg=&bdtype=&oriquery=&objurl=https%3A%2F%2Ft7.baidu.com%2Fit%2Fu%3D4162611394%2C4275913936%26fm%3D193%26f%3DGIF&fromurl=ipprf_z2C%24qAzdH3FAzdH3Fooo_z%26e3Bejj6_z%26e3Bv54AzdH3Fri5p5AzdH3Fnan0m9c8n%3F7p4_f576vj%3Dkwt17%267p4_4j1t74%3Dt4w2jfjw6vi%26vit1%3Dlad&gsm=0&islist=&querylist=&album_tab=动物&album_id=688"/></body></html><script>const resizeObserver = new ResizeObserver(entries =>Resize.postMessage(document.documentElement.scrollHeight.toString()) )resizeObserver.observe(document.body)</script>""";SizedBox(height: webViewHeight,child: WebView(javascriptMode: JavascriptMode.unrestricted,onWebViewCreated: (WebViewController controller){controller.loadHtmlString(html, baseUrl:bsaeUrl);},javascriptChannels: {JavascriptChannel(name: "Resize", onMessageReceived: (JavascriptMessage message) {double height = double.parse(message.message);setState(() {webViewHeight = height;});})}),
)

如上,给 WebView 外面包了一层 SizeBox 用于限制 WebView 的高度,同时给 WebView 添加了名为 Resize 的 JavascriptChannel , 在 html 字符串中添加了 script 使用 js 的 ResizeObserver 监听页面元素大小变化,在变化回调里获取元素的 scrollHeight 值并将其发送到 Flutter,在 Flutter 的 JavascriptChannel 消息回调里获取高度值并更新 SizeBox 的高度。从而实现了 WebView 的高度自适应。

Flutter webView加载html富文本相关推荐

  1. android webview 样式解析不正确,解决Android Webview加载Html富文本,h5字体样式不起作用问题...

    问题起因:WebView作为整个页面的一个部分展示,展示的是一段H5片段(Html中body标签中的部分) 问题描述:H5前端设置好的字体大小,在WebView中展示时不起作用,导致字体大小都一样 问 ...

  2. Flutter webview加载视频无法全屏

    Flutter webview加载视频无法全屏 先上个github的链接吧:https://github.com/flutter/flutter/issues/27101#issuecomment-5 ...

  3. android 加载显示富文本——TextView显示富文本和WebView显示富文本,WebView显示图片适配屏幕宽度

    TextView加载显示 添加依赖 implementation 'com.zzhoujay.richtext:richtext:3.0.8' implementation 'com.zzhoujay ...

  4. Flutter ------- WebView加载网页

    在Flutter 加载网页?也是有WebView的哦,和Android一样 1.添加依赖 dependencies: flutter_webview_plugin: ^0.2.1+2 2.导入库 im ...

  5. flutter webview加载http图片失败处理

    1.简介 开始接手flutter项目,项目flutter版本2.5.3,目前最新2.10.3. 项目中使用webview为 flutter_webview_pro 1.0.0 源码修改版,已经支持we ...

  6. 微信小程序开发加载html富文本数据

    最近项目上遇到在微信小程序里需要显示新闻内容,新闻内容是通过接口读取的服务器中的富文本内容,是html格式的,小程序默认是不支持html格式的内容显示的,那我们需要显示html内容的时候,就可以通过w ...

  7. ios label html图片,iOS UILabel与UITextView加载图片富文本点击看大图

    背景: 功能:回复列表 要求:界面按UI给的效果图 收到的数据:带各种标签的html格式的字符串(包括web端的表情图片) 如果只是想简单的加载HTML(包括图片),点击这里. 解决方案:UILabe ...

  8. 用UIWebview、UILabeL、UITextView加载html富文本,图片太大显示不全的解决

    (1)用UIWebview加载 // 自适应尺寸大小 - (NSString *)autoWebAutoImageSize:(NSString *)html{//搜索标签文本中的<img> ...

  9. html 页面怎么加载富文本,UILabel加载html富文本

    本文主要解决html标签之外文本属性设置 当APP里面有搜索的需求的时候,产品可能会要求关键字显示特殊颜色或者字体.其中一种可能性是服务器返回的数据是带有html标签的字符串,那么该怎么解决?当标签之 ...

最新文章

  1. Py之basemap:python库之basemap的简介、安装、使用方法之详细攻略
  2. java oracle rs.next_使用jsp连接oracle时,rs.next()值始终为false,表中存在数据
  3. java 分布式编译_linux分布式编译distcc和ccache的部署
  4. linux复制后权限变了,linux系统(centos debian freebsd等)如何拷贝数据并保持原来的属性(权限 属主)不变?...
  5. java中布局管理器的作用_使用Java布局管理器的目的是什么?
  6. Java队列Queue
  7. php apc缓存以及与redis的对比
  8. JAVA编程思想——读书笔记 类再生
  9. vue中常用的事件修饰符
  10. java的split的正则_Java正则表达式之split()方法实例详解
  11. 职称计算机 将计算机broad_1下的e盘映射为k盘网络驱动器,职称计算机考试(网络基础)试题及答案操作..doc...
  12. mysql网吧管理系统_网吧收银系统 网吧的收费管理系统 - 下载 - 搜珍网
  13. springBoot整合ElasticSearch【代码直接复制可用】(超级详细)
  14. PTA 乙级 1003 我要通过! (20 分) C++
  15. Unity模拟毛笔字效果
  16. 小姜技术博客开通啦!
  17. php 修改图片dpi,PHP修改PNG图片DPI
  18. php 腾讯云 短信验证码发送
  19. 男人心中理想女友的职业排行榜
  20. 如何通过云终端,让一台电脑能多台使用?

热门文章

  1. Spring Boot做后端框架遇到的一些问题
  2. linux修改ssh端口失败
  3. Linux中sh文件的执行方法
  4. 详解全局变量,全局变量与静态变量的区别
  5. 安卓市场和安智市场_安卓应用如何快速上架应用市场?
  6. 达观数据王文广:如何玩转自然语言理解和深度学习实践?
  7. 用react写一个图片上传(或文件上传)
  8. 同等价格是选择Pro基础版还是Air高配版
  9. kali系统安装docke(最新)
  10. postman传参后乱码