flutter_inappwebview超长富文本 Android crash问题记录
flutter android 超长文本 crash 问题及解决过程
需求
原生支持富文本编辑,能插入图文视频,支持预览
问题
flutter inappwebview嵌入后由于富文本过长导致app crash
原本实现方案
使用webview + 本地html 实现富文本编辑,预览使用flutter加载webview动态注入富文本内容
Android: https://github.com/wasabeef/richeditor-android
iOS:https://github.com/cjwirth/RichEditorView
预览(flutter):https://github.com/pichillilorenzo/flutter_inappwebview/tree/master/example
富文本生成
编辑的过程,主要通过模版html指定 <div class="editor"></div> 设置可编辑,插入图片时,通过
evaluateJavascript 执行预先写好的 js 函数,进行动态插入,并在页面变动时进行数据回调,主要通过 window.location.href 进行数据回传到native ,详细代码 可以参考 richeditor
富文本渲染
渲染过程,就是一个注入html的过程,写好模版html ,配置必备的注入js函数
容器
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body style='"margin: 0; padding: 0;'>
<div id="containerId">
</div>
</body>
</html>
注入函数
// 插入内容到容器 (需要原生调用 )
function insertHtml(content){
$("#containerId").html(content);
}
flutter调用,主要通过js接口执行注入函数
_controller.evaluateJavascript(source: "window.insertHtml('$richHtml}');");
问题
小米6加载超长文本,出现crash问题,也有华为手机偶发crash
日志
InAppWebView not displayed becaused it is too large to fit into software layer (or drawing cache),need 79144560 bytes,only 9849600 available
猜测可能原因 js原生交互接口 数据限制,可以使用类似jsoup对于html进行解析并按长度拆分,分段传输和加载,最终定位问题为inappwebview限制了webview长度
最终解决方案,限定webview长度最高为屏幕高度,并通过滑动监听对于webview offset进行调整实现
参考自
Flutter 嵌套滚动的 WebView_东方睡衣的博客-CSDN博客_flutter webview 滑动
最终调整flutter页面布局解决
更多推荐
所有评论(0)