Flutter Web 加载html的填坑记录

flutter web 加载html内容,请看这里https://juejin.im/post/6844904094725849095,本文不再详述加载html的方法,主要讲述在加载html过程中遇到的问题和解决方案。

问题1:dart:ui 无法找到platformViewRegistry方法

ui.platformViewRegistry.registerViewFactory

异常提示:

The name 'platformViewRegistry' is being referenced through the prefix 'ui', but it isn't defined in any of the libraries imported using that prefix.

分析:该问题是因为flutter sdk 1.19在迁移 flutter_web_ui 到dart:ui过程中,没有把该方法允许外部调用,导致了该问题。

解决方案:

首先确认当前flutter channel 为beta、develop、master 其中之一 

方案一

自己定义platformViewRegistry.registerViewFactory方法,动态引入该方法。

class platformViewRegistry {

static registerViewFactory(String viewId, dynamic cb) {}

}

import 'ui_fake.dart' if (dart.library.html)'dart:ui' as ui;

方案二

在yaml文件中设置,忽略该错误(不推荐使用)

analyzer:

errors:

 undefined_prefixed_name: ignore


问题2:首次打开加载html页面正常展示内容,第二次开始进入页面,展示异常提示

错误示例:

import'dart:ui'as ui;

ui.platformViewRegistry.registerViewFactory('hello-world-html', (int viewId) => HtmlElement();

HtmlElementView( viewType: 'hello-world-html',)

异常提示:

TypeError: Cannot read property 'd8' of null

分析:这个问题是因为registerViewFactory不能重复注册视图,而视图的区分,是根据viewType作为标识来区分视图类型,所以一直使用"hello-world-html”作为标识,第二进入页面时,就会出现重复注册问题。

解决方案:

viewType =DateTime.now().toIso8601String();

问题3:setState()无法重新加载html内容

解决方案:

在build方法中调用ui.platformViewRegistry.registerViewFactory

你可能感兴趣的:(Flutter Web 加载html的填坑记录)