Я разрабатываю пакет flutter, в котором я визуализирую математические формулы с помощью Mathjax и Katex для веб-поддержки. Я использую IFrameElement для визуализации страницы HTML из таких ресурсов, как
ui.platformViewRegistry.registerViewFactory(
viewId.toString(),
(int id) => html.IFrameElement()
..width = MediaQuery.of(context).size.width.toString()
..height = MediaQuery.of(context).size.height.toString()
..src =
"path/to/index.html"
..id = '$viewId'
..style.border = 'none');
, а затем вызываю javascript функция от Dart для загрузки данных в index.html
.
js.context.callMethod('initWebView', [viewId, getRawData()]);
Вот мой код функции JS.
function initWebView(id, rawData) {
var initiated = false;
document.querySelectorAll("flt-platform-view").forEach(function (platformView) {
var view = platformView.shadowRoot.children[1];
if (view.id === id) {
var iframe = view.contentWindow;
myView = iframe.document.getElementById('MyView');
initiated = true;
myView.appendChild(createView(JSON.parse(rawData)))
}
}
);
if (!initiated) setTimeout(function () {
initWebView(id, rawData)
}, 250);
}
Все работает нормально, как и ожидалось, но когда Я пытаюсь восстановить виджет в дротике, все исчезает в сети, например, если я запускаю setState
, все исчезает на странице, даже если я наведу курсор на кнопку «Назад», он сделает то же самое. В консоли нет информации. Вот Live Demo , после открытия любой опции подождите немного, чтобы загрузить его.
Полный исходный код для My Package и Упомянутого файла Dart .