Flutter 中使用 WebViewWidget 使用js回调高度定义父控件高度 过高直接崩溃是为什么

不会编程的小白... 不会编程的小白... 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区

渲染的HTML中JS 主要代码

// 用 ResizeObserver 监听 document.body 大小变化,动态上报高度
        setTimeout(function() {
          // 检查 flutter_invoke 是否存在
          if (window.flutter_invoke) {
            const resizeObserver = new ResizeObserver(() => {
              const height = document.body.scrollHeight;
              window.flutter_invoke.postMessage("Height:" + height);
            });
            resizeObserver.observe(document.body);
            
            // 立即发送一次高度
            window.flutter_invoke.postMessage("Height:" + document.body.scrollHeight);
          } else {
            console.warn('flutter_invoke not found, using fallback');
            
            // 更好的兜底方案
            function sendHeight() {
              if (window.flutter_invoke) {
                window.flutter_invoke.postMessage("Height:" + document.body.scrollHeight);
              }
            }
            
            // 监听load和resize事件
            window.addEventListener('load', sendHeight);
            window.addEventListener('resize', sendHeight);
            
            // 尝试在稍后再次检查
            setTimeout(sendHeight, 1000);
          }
        }, 200);

Flutter 中接收回调

if (msg.startsWith('Height:')) {
      final heightStr = msg.substring(7).trim();
      final height = double.tryParse(heightStr);
      if (height != null) {
        widget.onHeightReport?.call(height);
      }
    }

高度设置

if(_controller.currentContent.isNotEmpty)
   SizedBox(
     height: currentWebViewHeight,
     child: (() {
         //存在HTML则进行解析
         if (_controller.currentContent.contains("<html>")) {
             return WebViewHtmlWeight(
             htmlContent: _controller.currentContent,
             onJsMessage: (msg) {
                print("全部 JS 消息:$msg");
             },
             onHeightReport: (height) {
                 double adjustedHeight = min(8000, max(height, 500));
                 setState(() {
                     currentWebViewHeight = adjustedHeight;
                 });
             print("触发回调 页面实际渲染高度:$adjustedHeight px");
         },
  );

遇到5000以上的回调高度渲染就直接闪退了,有没有大佬知道怎么回事


错误日志

D/ImageReader_JNI(25369): ImageReader_close: ctx[0xb400007c000281b0], 1440x200, HalFormat[34]
I/PlatformViewsController(25369): Hosting view in view hierarchy for platform view: 96
I/PlatformViewsController(25369): PlatformView is using SurfaceProducer backend
D/ImageReader_JNI(25369): ImageReader_init: ctx[0xb400007c000281b0], 1x1, HalFormat[34], maxImages[5], ndkUsage[256], consumerUsage[256]
W/libc    (25369): Access denied finding property "vendor.display.enable_optimal_refresh_rate"
D/ImageReader_JNI(25369): ImageReader_init: ctx[0xb400007c00020490], 1440x27588, HalFormat[34], maxImages[5], ndkUsage[256], consumerUsage[256]
W/libc    (25369): Access denied finding property "vendor.display.enable_optimal_refresh_rate"
D/ImageReader_JNI(25369): ImageReader_init: ctx[0xb400007c00031d70], 1440x200, HalFormat[34], maxImages[5], ndkUsage[256], consumerUsage[256]
W/libc    (25369): Access denied finding property "vendor.display.enable_optimal_refresh_rate"
E/chromium(25369): [ERROR:skia_output_surface_impl.cc(1296)] 
E/chromium(25369):   surface_size=1440x27588
E/chromium(25369):   format=4
E/chromium(25369):   color_type=4
E/chromium(25369):   backend_format.isValid()=1
E/chromium(25369):   backend_format.backend()=0
E/chromium(25369):   GrBackendFormats::AsGLFormat(backend_format)=1
E/chromium(25369):   backend_format.asVkFormat()=0
E/chromium(25369):   backend_format.asVkFormat() vk_format=0
E/chromium(25369):   sample_count=1
E/chromium(25369):   surface_origin=1
E/chromium(25369):   willGlFBO0=1
F/crashpad(31006): -----BEGIN CRASHPAD MINIDUMP-----
F/crashpad(31006): -----BEGIN CRASHPAD MINIDUMP-----
F/crashpad(31006): )iyJ**g8,n,x>sKyq5HZa-(vg=kVc=GBw=WBAt/n>:?+U&;Jbex'7THAqD@tG?Bim>8P3T^|I2~Vb/|uy<WRVs#X~'0CMKR}5bDUplyF`I&Rj-`6V6-kplJl6D05Lg:DifP+qc4iWN:"c*MW=m|]c])$K=K.u+Q_>X(!K)MWs/3:("G(7<Xde#-+uKmy1"}E=C+&u+0!{j-ew@GSv$KVU8)Rd2TY'!__o0QIk6+l8<]C]xZ&rGv_ps'!U$-GJ'1I!pF`0#a5_,A+3(g''7QW&XdW.Xp-LNTJ,vUJ]Nc2;6G,qAsFm#MM0xwgb&9Z'LP1q#Jg4Na7?7X9=-zmgDglqaeSZs2x{68MwgZ&(CQhJ-g'bMO,pd_@T&K#jMy7G7n#zm0H]O+B?,%hP1Y}*%eCCB^w01c.={)N/yS1tr-7:<e27$EGEG1?!7FO'C{m3:c&[z-M1p5t)t{M,vM7$Bgl/(={BMkb)Mm.e0H>EBa1s2-;i!E&8,jF~.n6vf[L/Zn,
...

 

...全文

相关推荐

Flutter WebView Windows避坑指南:常见问题与性能优化技巧

本文深入探讨了在Flutter Windows桌面应用中集成WebView2时遇到的核心挑战与解决方案。针对内存泄漏、性能卡顿、JavaScript通信及安全配置等常见问题,提供了从生命周期管理、启动加速、渲染优化到安全策略的实战避坑指南与性能优化技巧,帮助开发者构建更稳定高效的混合应用。

数据分析师

论文复现基于变频与移相协同控制的全桥LLC变换器模式切换平滑性优化(Simulink仿真实现)

内容概要:本文针对“基于变频与移相协同控制的全桥LLC变换器模式切换平滑性优化”这一主题,开展Simulink仿真实现与技术复现研究。通过构建全桥LLC谐振变换器的详细仿真模型,深入探讨在不同负载工况(如轻载、重载、待机与运行模式切换)下,如何结合变频控制(FM)与移相控制(PSM)的协同策略,优化系统动态响应的平稳性与效率。研究重点在于设计合理的控制逻辑,解决模式切换过程中可能出现的电压电流冲击问题,提升系统的稳定性和电能质量。文中系统阐述了控制策略的设计原理、关键参数的整定方法,并通过仿真结果验证了该协同控制方案在抑制瞬态扰动、实现无缝切换方面的有效性,完整复现了高水平学术论文中的核心技术路线,为电力电子变换器的先进控制提供了可复现的实践范例。; 适合人群:电力电子、电气工程及其自动化等相关专业的研究生、科研人员及从事开关电源、新能源变流器开发的工程师,尤其适合具备一定Simulink仿真经验与电力电子拓扑分析能力的专业人士; 使用场景及目标:①深入理解全桥LLC变换器在多模式运行下的变频与移相协同控制机理;②掌握在Simulink中对复杂谐振变换器进行建模、控制算法实现与仿真验证的全流程方法;③为学术论文写作、科研项目申报或高性能电源产品的工程开发提供可靠的技术参考与仿真基础; 阅读建议:建议结合所提供的Simulink模型文件与技术文档进行同步实践,重点关注变频与移相控制的切换逻辑、参数配合关系及过渡过程的动态特性,可通过调整负载条件观察系统的响应变化,以深化对模式切换平滑性实现机制的理解。

大龙不吃小鱼干

高校技术转移办公室人员如何高效完成科技成果全周期管理?.docx

科易网基于40亿+科创知识图谱数据库,深度探索AI技术在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,研究科技创新领域的AI+数智化解决方案,推动科技创新与产业创新智能化发展。

BIZKEEN

可视化原型素材ppt格式

可视化原型素材ppt格式

clhqianqi

氢氟醚:绿色高效的氟化解决方案.docx

氢氟醚:绿色高效的氟化解决方案.docx

行业报告QY
评论
收藏 已收藏
分享
返回顶部