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

flutter web 中嵌入一个html

介绍

flutter web 支持使用 HtmlElementView嵌入html

import 'dart:html';
import 'dart:ui' as ui;
import 'package:flutter/cupertino.dart';

class WebWidget extends StatelessWidget {
  const WebWidget({super.key});

  @override
  Widget build(BuildContext context) {
    DivElement frame = DivElement();
    IFrameElement iframe = IFrameElement()
    ..style.width = '100%'
    ..style.height = '100%'
    ..src = 'https://www.baidu.com'
    ..style.border = 'none';
    frame.append(iframe);
    // //设置token
    // StyleElement sFrame = StyleElement();
    // String script = """localStorage.setItem('token',token)""";
    // sFrame.innerHtml = script;
    // frame.append(sFrame);
    //ignore: undefined_prefixed_name
    ui.platformViewRegistry.registerViewFactory(
        'hello-world',
            (int viewId) => frame);
    return SizedBox(
      height: 300,
      child: HtmlElementView(viewType: "hello-world",),
    );
  }
}

遇到的问题:

1. dart.ui找不到platformViewRegistry

ui.platformViewRegistry.registerViewFactory报错

通过2种方案解除报错

1.在代码上方添加注释来接触报错

2.在analysis_options里添加设置忽略该错误(不推荐,影响范围大)

2.dart.html报错

dart.html,IFrame,ScriptFrame都是flutter web下的类,如果要以app的方式运行会报错,运行不起来。

解决方案:条件导包

写一个默认的widget在app环境下导入,HtmlElementView在web环境下导入

导致的问题(带来的影响)

触摸事件被HtmlElementView消费了,导致覆盖在HtmlElementView上层的widget响应不了点击事件,直白一点的说就是覆盖在HtmlElementView的button点击不了

解决方案:

有个pointer_interceptor的库专门就是解决这个问题的pointer_interceptor,用PointerInterceptor包裹有需要响应点击的widget

思路是给需要响应点击的widget包裹一个HtmlElementView,覆盖在本身的那个HtmlElementView,以此来阻隔本身的HtmlElementView的点击事件

引用:

Flutter Web 加载html的填坑记录 - 简书

flutter - html editor enhanced alert dialog not working when the dialog placed on editor - Stack Overflow


http://www.kler.cn/a/132464.html

相关文章:

  • 代码随想录算法训练营第五十一天|Day51 图论
  • 联通光猫(烽火通信设备)改桥接教程
  • C# 异常处理、多个异常、自定义异常处理
  • Qt桌面应用开发 第五天(常用控件)
  • 贪心算法入门(三)
  • 鸿蒙实现 web 传值
  • 基于单片机体温脉搏检测控制系统及源程序
  • 【OpenGauss源码学习 —— 执行算子(Append算子)】
  • 【Linux】vimrc 配置方案
  • springboot项目中没有识别到yml文件解决办法
  • 【机器学习】朴素贝叶斯算法:多项式、高斯、伯努利,实例应用(心脏病预测)
  • AlphaControls控件TsDBCombobox出错:访问违规
  • 腾讯云服务器怎么买便宜?腾讯云服务器新人专享限时特惠购买链接
  • 为RabbitMQ配置SSL
  • 【10套模拟】【6】
  • Linux 终端 Ctrl + C 无法终止当前程序(详细解决步骤)
  • Java声明式事务实战!工作中用这几种就够了!
  • 设计模式 - 概览
  • UE4动作游戏实例RPG Action解析四:装备系统
  • 【C++】类和对象(6)--运算符重载
  • PyCharm 远程连接服务器并使用服务器的 Jupyter 环境
  • C++ 递增/递减运算符重载
  • QT基础入门【QSS】继承、命名空间中的小部件、QObject 属性介绍
  • 从0开始学习JavaScript--JavaScript 循环与迭代详解
  • Git企业开发级讲解(四)
  • 使用 Stable Diffusion Img2Img 生成、放大、模糊和增强