首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在flutter web中动态改变iframe的src?

如何在flutter web中动态改变iframe的src?
EN

Stack Overflow用户
提问于 2021-03-02 16:42:50
回答 2查看 536关注 0票数 1

我正在尝试设置新的URL(即HTML字符串),每次src更改时我都会解析它。但是使用这段代码,我只能显示第一个src,并且它不会改变,并且每次都显示相同的输出src。

类IframeView扩展了StatefulWidget { String url;

代码语言:javascript
运行
复制
frameView(this.url);

@override
_IframeViewState createState() => _IframeViewState(url);
}

class _IframeViewState extends State<IframeView> {
String url;
_IframeViewState(this.url);
final html.IFrameElement _iframeElement = html.IFrameElement();

 Widget _iframeWidget;


 @override
 void initState() {
 _iframeElement.height = '500';
_iframeElement.width = '500';
_iframeElement.srcdoc = widget.url;
_iframeElement.style.border = 'none';

// print("src printing");
// print(_iframeElement.srcdoc);
// print("widget url");
// print(widget.url);



ui.platformViewRegistry.registerViewFactory('iframeElement', (int viewId) {
  return _iframeElement;
});

_iframeWidget = HtmlElementView(
  key: UniqueKey(),
  viewType: 'iframeElement',
);

super.initState();
}

@override
void didUpdateWidget(IframeView oldWidget) {
super.didUpdateWidget(oldWidget);
print("from did update widget");
print(_iframeElement.srcdoc);
_iframeElement.srcdoc = widget.url;
}

@override
Widget build(BuildContext context) {
return Container(
  margin: EdgeInsets.only(top: 50),
  child: _iframeWidget,
);
}
}
EN

回答 2

Stack Overflow用户

发布于 2021-04-12 22:37:34

我使用_iframeElement.src = widget.url (而不是.srcdoc),并使用重画函数进行更新。

代码语言:javascript
运行
复制
static redraw(String newLink, String newTitle) {
IFrameElement element = document.getElementById('contentz');
element.src = newLink;

}

票数 1
EN

Stack Overflow用户

发布于 2022-03-04 19:33:51

这对我很有效:

代码语言:javascript
运行
复制
Widget buildVideoView(Key key) {
    String? videoFileUrl;
    String iFrameId = <some id defined in this stateful class>;

    if (<default url flag>) {
      videoFileUrl = <defaultVideoUrl>;
    } else {
            videoFileUrl = <new url>;
      IFrameElement element = document.getElementById(iFrameId) as IFrameElement;
      element.src = videoFileUrl;
    }

    html.IFrameElement _iframeElement;
    Widget _iframeWidget;
    _iframeElement = html.IFrameElement();
    _iframeElement.id = iFrameId; << this is important
    _iframeElement.height = '100%';
    _iframeElement.width = '100%';
    _iframeElement.allow = 'accelerometer; gyroscope;';
    _iframeElement.allowFullscreen = true;
    _iframeElement.src = videoFileUrl;
    _iframeElement.style.border = 'none';

    // ignore: undefined_prefixed_name
    ui.platformViewRegistry.registerViewFactory(
      'iframeElement',
      (int viewId) => _iframeElement,
    );
    _iframeWidget = HtmlElementView(
      key: key, << also important to prevent flicker/jitter/restart on rebuild
      viewType: 'iframeElement',
    );
    return _iframeWidget;
  }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66435988

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档