美文网首页flutter
Flutter 获取父Widget实际长度及坐标绘图

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

作者: qingxp9 | 来源:发表于2019-04-16 14:10 被阅读0次

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

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

    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

    相关文章

      网友评论

        本文标题:Flutter 获取父Widget实际长度及坐标绘图

        本文链接:https://www.haomeiwen.com/subject/gwcbwqtx.html