美文网首页
08. Stack层叠布局

08. Stack层叠布局

作者: A君小红红 | 来源:发表于2020-06-01 07:43 被阅读0次

    水平布局和垂直布局确实很好用,但是有一种情况是无法完成的,比如放入一个图片,图片上再写一些字或者放入容器,这时候Row和Column就力不从心了。Flutter为这种情况准备了Stack层叠布局

    层叠布局的 alignment 属性

    alignment属性是控制层叠的位置的,建议在两个内容进行层叠时使用。它有两个值X轴距离和Y轴距离,值是从0到1的,都是从上层容器的左上角开始算起的。(视频中具体演示)

    CircleAvatar组件的使用

    CircleAvatar这个经常用来作头像的,组件里边有个radius的值可以设置图片的弧度。

    现在我们准备放入一个图像,然后把弧度设置成100,形成一个漂亮的圆形,代码如下:

    new CircleAvatar(
      backgroundImage: new NetworkImage('http://jspang.com/static//myimg/blogtouxiang.jpg'),
      radius: 100.0,
    ),
    

    代码效果

    import 'package:flutter/material.dart';
    void main () => runApp(MyApp());
    
    class MyApp extends StatelessWidget{
      @override
      Widget build(BuildContext context ){
          var stack = new Stack(
            alignment: const FractionalOffset(0.5, 0.8),
            children: <Widget>[
              new CircleAvatar(
                backgroundImage: new NetworkImage('http://jspang.com/static//myimg/blogtouxiang.jpg'),
                radius: 100.0,
              ),
              new Container(
                decoration: new BoxDecoration(
                  color: Colors.lightBlue,
                ),
                padding: EdgeInsets.all(5.0),
                child: new Text('JSPang 技术胖'),
              )
            ],
          );
    
    
          return MaterialApp(
            title:'ListView widget',
    
            home:Scaffold(
              appBar:new AppBar(
                title:new Text('垂直方向布局'),
              ),
              body:Center(child:stack),
            ),
          );
      }
    }
    

    Stack 的positioned属性

    超过两个组件的层叠该如何进行定位那?今天要学的主角Positioned组件了。这个组件也叫做层叠定位组件。

    Positioned组件的属性
    • bottom: 距离层叠组件下边的距离
    • left:距离层叠组件左边的距离
    • top:距离层叠组件上边的距离
    • right:距离层叠组件右边的距离
    • width: 层叠定位组件的宽度
    • height: 层叠定位组件的高度
    demo实例

    修改上面stack的例子,文字不在放入到container组件里,而是直接放入到Positioned里,并且不再是两个组件,而是三个子组件

    import 'package:flutter/material.dart';
    void main () => runApp(MyApp());
    
    class MyApp extends StatelessWidget{
      @override
      Widget build(BuildContext context ){
          var stack = new Stack(
    
            children: <Widget>[
              new CircleAvatar(
                backgroundImage: new NetworkImage('http://jspang.com/static//myimg/blogtouxiang.jpg'),
                radius: 100.0,
              ),
              new Positioned(
                top:10.0,
                left:10.0,
                child: new Text('JSPang.com'),
              ),
              new Positioned(
                bottom:10.0,
                right:10.0,
                child: new Text('技术胖'),
              )
            ],
          );
    
    
          return MaterialApp(
            title:'ListView widget',
            home:Scaffold(
              appBar:new AppBar(
                title:new Text('层叠布局'),
              ),
              body:Center(child:stack),
            ),
          );
      }
    }
    

    相关文章

      网友评论

          本文标题:08. Stack层叠布局

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