Как остановить Flutter Web HtmlElementView от перестройки / перезапуска? - PullRequest
0 голосов
/ 22 апреля 2020

Я создал приложение для видеовызовов во Flutter, используя Agora SDK. Это доступно только для iOS / Android, поэтому для веб-сборки мне пришлось создать оболочку вокруг существующего Agora web SDK. Из-за способа, которым Flutter рендерит веб-элементы внутри теневого DOM, вы не можете получить доступ к элементам с помощью document.getElementById (), который используется в Agora SDK для добавления видеоплеера. Чтобы обойти это, я рендерим IFrame, в котором есть сценарии div и Agora SDK, связанные вместе.

Все это работает хорошо, но когда любое событие запускается в окне браузера, например, при нажатии кнопки мыши или Если щелкнуть что-либо, IFrame обновит и перестроит просмотр видео, инициализация которого занимает 1-2 секунды.

Можно ли в любом случае отсоединить IFrame от событий браузера? Я попытался пометить HtmlElementView как const и поместить его в StatefulWidget, который регистрирует представление платформы только один раз. На самом деле виджет больше не запускает метод build (), но IFrame все еще обновляется.

Код флаттера

ui.platformViewRegistry.registerViewFactory(
        'video-container',
            (int viewId) => IFrameElement()
          ..id = 'my-iframe'
          ..width = '100%'
          ..height = '100%'
          ..src = 'assets/web_elements/agora_container.html'
          ..allow = "camera; microphone"
          ..style.border = 'none');

@override
  Widget build(BuildContext context) {
    print("*****\n\n\nBuilding the web host container\n\n\n*****"); // this is only printing once
    return const HtmlElementView(
      viewType: 'video-container',
    );
  }

Код агоры

<div id="local-video"></div>
<div id="remote-video"></div>
<div id="video-canvas"></div>

<script src="scripts/AgoraSDK.js"></script>
<script src="scripts/agora_controller.js"></script>

1 Ответ

1 голос
/ 25 апреля 2020

Это одна из активных проблем с Flutter Web. Я думаю, что обходной путь к этому упоминается здесь: https://github.com/flutter/flutter/issues/53253#issuecomment -607197549

...