Flutter 根据不同屏幕尺寸的坐标放置标记(颤振)

Flutter 根据不同屏幕尺寸的坐标放置标记(颤振),flutter,dart,coordinates,Flutter,Dart,Coordinates,所以我有一个标记小部件,可以用来放置图像。它将使用偏移设置x和y的坐标 Offset position = Offset(0.0, 0.0); 之后,如果我想放置小部件,它将是这样的 double baseWidth = window.physicalSize.width; double baseHeight = window.physicalSize.height; double newWidth = MediaQuery.of(context).size.width; double ne

所以我有一个标记小部件,可以用来放置图像。它将使用偏移设置x和y的坐标

Offset position = Offset(0.0, 0.0);
之后,如果我想放置小部件,它将是这样的

double baseWidth = window.physicalSize.width;
double baseHeight = window.physicalSize.height;

double newWidth = MediaQuery.of(context).size.width;
double newHeight = MediaQuery.of(context).size.height;

double newX = (newWidth*630)/baseWidth;
double newY = (newHeight*380)/baseHeight;

MarkerBox(
   Offset(newX, newY,
   'Box One',
   Colors.blueAccent,
   Image.asset("assets/marker_red.png",
      height: 40, width: 40, fit: BoxFit.cover),
   width / 4.5
),

但是,如果屏幕大小不同,标记的位置也会不同。无论屏幕大小如何,如何使其在一个位置保持静止?是因为坐标受不同屏幕大小的影响吗

您可以通过以下方式获得屏幕的宽度和高度:

  • double new_width=MediaQuery.of(context).size.width
  • double new_height=MediaQuery.of(context).size.height
在那之后,你可以做一个。给定一个称为(base_x,base_y)的“基准位置”作为一个称为(base_宽度,base_高度)的“基准分辨率”,您可以获得上述代码给出的“新分辨率”的新(new_x,new_y)

  • new_x=(new_width*base_x)/base_width
  • new_y=(new_height*base_y)/base_height

很抱歉,但是如何获得(base_x,base_y)和(base_宽度,base_高度),这是您在实际分辨率(base_宽度,base_高度)下的标记位置(base_x,base_y)。您用于测试的设备具有分辨率,您可以在需要的位置设置标记(您说过您的标记是静态的)。因此,设备的分辨率是基本分辨率,标记的位置是你想要的,基于测试设备的位置是基本位置。我已经按照你提到的那样做了(参考问题),我编辑了它,但是它仍然不是静态的。我做错了吗。我已经在google pixel&galaxy选项卡上测试过了,baseWidth和baseHeight不必像这样获得。例如,假设您将使用反谷歌像素作为“基准”。那么,决议是什么?假设分辨率为480*960(只是一个示例,这不是实际分辨率)。因此,基底宽度和基底高度必须硬编码:
double baseWidth=480
双基高度=960诀窍是获得您想要在“基本”设备中的确切位置,并使用该值(基本分辨率和基本位置),将其他设备中的位置转换到您在基本设备上获得的相同位置