Странное поведение Flutter Web iFrame

#flutter #dart #iframe #flutter-web #dart-html

#трепетание #dart #iframe — фрейм #флаттер-паутина #dart-html

Вопрос:

Месяц назад мой проект работал нормально, и теперь, после нескольких обновлений flutter, мой виджет iFrame имеет ложный центр в желаемом поле визуализации. Первая картинка — неправильное поведение, вторая — старая рабочая версия. Я использую плагин, который предотвращает выдачу анализатором ошибок при использовании platformViewRegistry. Ниже приведен мой код для iframe-виджета. Кто-нибудь знает, как это исправить? Я не хочу переходить на более старые версии flutter. Спасибо за любую помощь!

PS: Простой центр () не сработал

неправильное поведение
правильное поведение

Мой виджет IFrame

 // ignore: avoid_web_libraries_in_flutter
import 'dart:html';
// ignore: undefined_prefixed_name
import 'package:universal_ui/universal_ui.dart';

import 'package:flutter/material.dart';

class Iframe extends StatefulWidget {
  final String source;
  final Size size;
  Iframe(this.source, {this.size});
  @override
  _IframeState createState() => _IframeState();
}

class _IframeState extends State<Iframe> {
  Widget _iframeWidget;
  String source;
  @override
  void initState() {
    newFrame();
    super.initState();
  }

  void newFrame() async {
    print(widget.size);
    final String id = widget.source.hashCode.toString();
    final IFrameElement _iframeElement = IFrameElement();
    _iframeElement.height = widget.size?.height?.toString() ?? '500';
    _iframeElement.width = widget.size?.width?.toString() ?? '500';
    source = widget.source;
    _iframeElement.src = widget.source;
    _iframeElement.style.border = 'none';

    ui.platformViewRegistry
        .registerViewFactory(id, (int viewID) => _iframeElement);
    _iframeWidget = HtmlElementView(
      key: UniqueKey(),
      viewType: id,
    );
  }

  @override
  Widget build(BuildContext context) {
    if (source != widget.source) newFrame();
    return _iframeWidget;
  }
}
 

Использование виджета IFrame

 class ChatClientAnon extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return StreamCacheBuilder<Package>(
      stream: Database().streamPackage(),
      builder: (data) => Container(
        child: Row(
          children: [
            Expanded(child: SmartphoneClient('Anonym', isAnon: true), flex: 2),
            Expanded(
                child: LayoutBuilder(
                    builder: (_, c) =>
                        Iframe(data.source, size: c.biggest)),
                flex: 8),
          ],
        ),
      ),
    );
  }
}
 

Ответ №1:

Обновление: проблема исправлена со следующим обновлением flutter