Flutter 使用iFrame[Flatter web]计算颤振中的页面转换
我想包括在我自己的网站另一个网站。 为此,我想注册一个回调来跟踪站点转换(即,用户单击嵌入站点上的链接并被重定向到不同的url/子url(?)。我目前使用iframelement来嵌入站点,这在理论上允许注册事件侦听器,但我找不到任何相关文档 我的主要目标是统计页面转换的数量。这是我当前的代码:Flutter 使用iFrame[Flatter web]计算颤振中的页面转换,flutter,iframe,flutter-web,Flutter,Iframe,Flutter Web,我想包括在我自己的网站另一个网站。 为此,我想注册一个回调来跟踪站点转换(即,用户单击嵌入站点上的链接并被重定向到不同的url/子url(?)。我目前使用iframelement来嵌入站点,这在理论上允许注册事件侦听器,但我找不到任何相关文档 我的主要目标是统计页面转换的数量。这是我当前的代码: import 'package:flutter/material.dart'; import 'package:wikipoker/widgets/my_iframe.dart'; import 'pa
import 'package:flutter/material.dart';
import 'package:wikipoker/widgets/my_iframe.dart';
import 'package:wikipoker/widgets/player_tab.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Wikipedia Poker',
theme: ThemeData(
primarySwatch: Colors.blue,
visualDensity: VisualDensity.adaptivePlatformDensity,
),
home: MyHomePage(title: 'Game of Wikipedia Poker'),
);
}
}
class MyHomePage extends StatefulWidget {
MyHomePage({Key key, this.title}) : super(key: key);
final String title;
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: LayoutBuilder(
builder: (BuildContext context, BoxConstraints constraints) {
return Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
buildIFrame(constraints.maxHeight, constraints.maxWidth),
],
);
},
),
);
}
String _youtube = 'https://www.youtube.com/embed/RQzhAQlg2JQ';
String _wiki = 'https://de.wikipedia.org/wiki/Hunde';
Widget buildIFrame(double height, double width) {
return Column(
children: [
IFrameWidget(
_wiki,
height,
width * (4 / 5),
),
],
);
}
}
导入“包装:颤振/材料.省道”;
导入“package:wikipoker/widgets/my_iframe.dart”;
导入“package:wikipoker/widgets/player_tab.dart”;
void main(){
runApp(MyApp());
}
类MyApp扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回材料PP(
标题:“维基百科扑克”,
主题:主题数据(
主样本:颜色。蓝色,
视觉密度:视觉密度。自适应平台密度,
),
主页:我的主页(标题:“维基百科扑克游戏”),
);
}
}
类MyHomePage扩展StatefulWidget{
MyHomePage({Key,this.title}):超级(Key:Key);
最后的字符串标题;
@凌驾
_MyHomePageState createState()=>\u MyHomePageState();
}
类_MyHomePageState扩展状态{
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(
标题:文本(widget.title),
),
正文:布局生成器(
生成器:(BuildContext上下文,BoxConstraints){
返回行(
mainAxisAlignment:mainAxisAlignment.spaceBetween,
儿童:[
buildIFrame(constraints.maxHeight,constraints.maxWidth),
],
);
},
),
);
}
字符串(u)https://www.youtube.com/embed/RQzhAQlg2JQ';
字符串https://de.wikipedia.org/wiki/Hunde';
Widget buildIFrame(双高、双宽){
返回列(
儿童:[
IFrameWidget(
_维基,
高度,
宽度*(4/5),
),
],
);
}
}
导入'dart:html';
将“dart:ui”导入为ui;
进口“包装:颤振/cupertino.dart”;
类IFrameWidget扩展了StatefulWidget{
最终字符串url;
双倍高度=500;
双倍宽度=500;
IFrameWidget(此._url,此._高度,此._宽度);
@凌驾
State createState()=>\u IFrameWidgetState();
}
类_IFrameWidgetState扩展状态{
Widget _iframeWidget;
@凌驾
void initState(){
super.initState();
最终IFrameElement _IFrameElement=IFrameElement();
//_iframelement.height='500';
//_iframelement.width='500';
//修复我这个不加载。
//_iframelement.addEventListener('onLoad',(事件){
//设置状态(){
//_iframeWidget=文本(“Lol”);
// });
// });
_iframelement.src=widget.\u url;
_iframelement.style.border='none';
//忽略:未定义的\u前缀\u名称
ui.platformViewRegistry.registerViewFactory(
“iframeElement”,
(int viewId)=>\u iframeElement,
);
_iframeWidget=HtmlElementView(
键:UniqueKey(),
viewType:“iframeElement”,
);
}
@凌驾
小部件构建(构建上下文){
返回大小框(
高度:小部件。\u高度,
宽度:小部件。\u宽度,
child:_iframeWidget,
);
}
}
iframelement
有一些字段和方法,看起来它们可能很有用。
addEventListener
需要一种类型的事件,但没有关于可能是什么的概述。
这方面的文档非常不完整,我不知道我想注册哪个活动。
我的希望是,我可以使用本机html iframe中的事件来实现这一点
iFrame的文档:我需要完全相同的东西,你有什么进展吗?我能捕捉到的唯一事件是
\u frameElement。addEventListener('load',(event){
我需要完全相同的东西,你有什么进展吗?我能捕捉到的唯一事件是\u frameElement.addEventListener('load',(event){
import 'dart:html';
import 'dart:ui' as ui;
import 'package:flutter/cupertino.dart';
class IFrameWidget extends StatefulWidget {
final String _url;
double _height = 500;
double _width = 500;
IFrameWidget(this._url, this._height, this._width);
@override
State<StatefulWidget> createState() => _IFrameWidgetState();
}
class _IFrameWidgetState extends State<IFrameWidget> {
Widget _iframeWidget;
@override
void initState() {
super.initState();
final IFrameElement _iframeElement = IFrameElement();
// _iframeElement.height = '500';
// _iframeElement.width = '500';
// FIXME This does not load.
// _iframeElement.addEventListener('onLoad', (event) {
// setState(() {
// _iframeWidget = Text("Lol");
// });
// });
_iframeElement.src = widget._url;
_iframeElement.style.border = 'none';
// ignore: undefined_prefixed_name
ui.platformViewRegistry.registerViewFactory(
'iframeElement',
(int viewId) => _iframeElement,
);
_iframeWidget = HtmlElementView(
key: UniqueKey(),
viewType: 'iframeElement',
);
}
@override
Widget build(BuildContext context) {
return SizedBox(
height: widget._height,
width: widget._width,
child: _iframeWidget,
);
}
}