Flutter 获取父Widget实际长度及坐标绘图

需求是:在一张平明图上按照服务器端返回的坐标点进行绘图。

由于移动设备屏幕大小不一,展示的地图大小是自适应的,这就需要想办法获取实际的长度和高度。随后,通过比例计算出该绘图的坐标点。

1. 获取父Widget高度

我让图片的高度填满整父Widget,但比例不变。

final Image image = Image.asset('assets/123.jpeg', fit: BoxFit.fitHeight)

随后用LayoutBuilder来获取父Widget的高度信息。参考下面代码,其中constrains.maxHeight获取到Container实际的高度。

  @override
  Widget build(BuildContext context) {
    return Container(
      child: LayoutBuilder(
        builder: (context, constrains){
          if(constraints.maxWidth > 200.0) {
            return new Text('BIG');
          }
        }
      )
    );
  }
  1. 坐标绘图
    首先是一个图片Widget,坐标用到了Positioned Widget,再用一个Stack Widget将它们组合起来。
Stack(
    children: <Widget>[
      image,
      Positioned(
        left: 18.0,
        top: 20,0,
        child: Text("I am Jack"),
      ),   
    ],
)

3. 组合起来

结合前面两步组合一下,示例如下。

@override
Widget build(BuildContext context) {
  return Container(
    child: LayoutBuilder(
      builder: (context, constrains){
        return Stack(children: _list(constrains));
      }
    )
  );
}

//图片的像素大小
final imgLength = 1154.0;
final imgWidth = 720.0
 
List<Widget> _list(constrains) {
    final height = constrains.maxHeight;
    final width =  constrains.maxHeight/imgWidth * imgLength;

    List<Widget> list = new List<Widget>();
    stack.add(image);

    for(var i = 0; i< posts.length; i++){
      final item = posts[i];
      final ssid = item.ssid;
      final top = item.y * height;
      final left = item.x * width;

      stack.add(Positioned(
        top: top,
        left: left,
        child: Text(ssid),
      ));
    }
    return list;
  }

效果大致如下图。


image.png
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 前言 本文的目的是为了让读者掌握不同布局类Widget的布局特点,分享一些在实际使用过程遇到的一些问题,在《Flu...
    xqqlv阅读 5,287评论 0 18
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,136评论 1 32
  • The Graphic View 提供了一个 Surface,用于管理和交互大量定制的 2D 图形化 Item;同...
    勤劳的悄悄阅读 6,110评论 1 3
  • 1.Row 线性布局,将children排成一行,主轴为水平方向,交叉轴为垂直方向。 textDirection:...
    hxljy阅读 810评论 0 5
  • 1.好友小辰的爸爸生病住院。周末,我去医院探望。 楼梯口,恰巧几个同来探病的亲戚在和小辰说着什么。 小辰脸上的表情...
    向阳花开啦阅读 407评论 0 2