flutter web 加載html內(nèi)容臣缀,請(qǐng)看這里https://juejin.im/post/6844904094725849095,本文不再詳述加載html的方法,主要講述在加載html過(guò)程中遇到的問(wèn)題和解決方案。
問(wèn)題1:dart:ui 無(wú)法找到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.
分析:該問(wèn)題是因?yàn)閒lutter sdk 1.19在遷移 flutter_web_ui 到dart:ui過(guò)程中,沒(méi)有把該方法允許外部調(diào)用,導(dǎo)致了該問(wèn)題。
解決方案:
首先確認(rèn)當(dāng)前flutter channel 為beta尺棋、develop、master 其中之一?
方案一
自己定義platformViewRegistry.registerViewFactory方法绵跷,動(dòng)態(tài)引入該方法膘螟。
class platformViewRegistry {
static registerViewFactory(String viewId, dynamic cb) {}
}
import 'ui_fake.dart' if (dart.library.html)'dart:ui' as ui;
方案二
在yaml文件中設(shè)置,忽略該錯(cuò)誤(不推薦使用)
analyzer:
errors:
?undefined_prefixed_name: ignore
問(wèn)題2:首次打開(kāi)加載html頁(yè)面正常展示內(nèi)容碾局,第二次開(kāi)始進(jìn)入頁(yè)面荆残,展示異常提示
錯(cuò)誤示例:
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
分析:這個(gè)問(wèn)題是因?yàn)閞egisterViewFactory不能重復(fù)注冊(cè)視圖,而視圖的區(qū)分净当,是根據(jù)viewType作為標(biāo)識(shí)來(lái)區(qū)分視圖類(lèi)型内斯,所以一直使用"hello-world-html”作為標(biāo)識(shí),第二進(jìn)入頁(yè)面時(shí)像啼,就會(huì)出現(xiàn)重復(fù)注冊(cè)問(wèn)題俘闯。
解決方案:
viewType =DateTime.now().toIso8601String();
問(wèn)題3:setState()無(wú)法重新加載html內(nèi)容
解決方案:
在build方法中調(diào)用ui.platformViewRegistry.registerViewFactory