#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