如何在Flutter应用中的任何设备上的任何屏幕上找到任何元素的确切绝对位置

时间:2018-10-22 10:26:13

标签: android flutter flutter-layout

出于演示目的,我有一个应用,该应用现在在其中心有一个容器,在我的容器中,我有一个文本“ O”,整个容器都包裹在GestureDetector小部件下,并且我使用onVerticalDragDown方法来查找找出文字“ O”的确切位置。然后点击文本,它将在终端上打印一些内容。我知道我可以使用Inkwell小部件在Text上使用on tap方法,但是如果要有图像,并且在图像中,我想使特定的部分成为可轻敲的。 现在的问题是,Android Nexus 5的位置与iPhone X不同,这很明显,如您所见 对于Android: For Android

For iPhone X

现在,我在启动功能中对位置进行了硬编码,以打印“已轻按” 声明。 现在来问我一个问题,如何在任何设备android或ios或任何设备上使用屏幕的位置使文本“ O”可点击? 这是我的代码:

import 'package:flutter/material.dart';

void main() => runApp(new MyApp());
Offset _startPos;

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return new MaterialApp(
      title: 'Flutter Demo',
      theme: new ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: new MyHomePage(),
    );
  }
}

launch() {
  if ((_startPos.dx >= 180.5 && _startPos.dx < 182.0) &&
      (_startPos.dy >= 335.0 && _startPos.dx < 340.0)) {
    print("Tapped");
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => new _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(
          title: Text("Demo"),
        ),
        body: GestureDetector(
            onVerticalDragDown: (details) {
              _startPos = details.globalPosition;
              print(_startPos);
            },
            onTap: () {
              launch();
            },
            child: Center(
              child: Container(
                width: 100.0,
                height: 100.0,
                color: Colors.cyan,
                child: Text(
                  "O",
                  style: TextStyle(fontSize: 25.0),
                ),
                alignment: Alignment(0.0, 0.0),
              ),
            )));
  }
}

我的屏幕:

iPhone

For Nexus

0 个答案:

没有答案