Flutter 使用iFrame[Flatter web]计算颤振中的页面转换

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

我想包括在我自己的网站另一个网站。 为此,我想注册一个回调来跟踪站点转换(即,用户单击嵌入站点上的链接并被重定向到不同的url/子url(?)。我目前使用iframelement来嵌入站点,这在理论上允许注册事件侦听器,但我找不到任何相关文档

我的主要目标是统计页面转换的数量。这是我当前的代码:

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,
    );
  }
}