zoukankan      html  css  js  c++  java
  • flutter页面布局二

    Stack

    在flutter中,Stack表示堆的意思,可以用来实现页面的定位布局。

    Stack组件接收两个可选参数:

    • alignment:配置所有子元素的显示位置
    • children:子组件

      

    在上面的Stack组件里面定义了一个Container和两个Text组件,我们会发现这三个组件实现了重叠,并且后定义的在上层,这就是所谓的堆效果,

    import 'package:flutter/material.dart';
    
    void main() => runApp(MyApp());
    
    class MyApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        // TODO: implement build
        return MaterialApp(
            home: Scaffold(
          appBar: AppBar(title: Text('FlutterDemo')),
          body: LayoutDemo(),
        ));
      }
    }
    
    class LayoutDemo extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        // TODO: implement build
        return Center(
          child: Stack(
            alignment: Alignment.center,
            children: <Widget>[              
              Container(
                height: 400,
                 300,
                color: Colors.red,
              ),
              Text('我是一个文本',style: TextStyle(
                fontSize: 40,
                color: Colors.white
              ))           
            ],
          ),
        );
      }
    }

    在上面的例子中,我们给alignment的值是Alignment.center,除此之外,还有Alignment.topLeft等,另外,它也可以接收两个double类型的值,介于-1到1之间:(0,0)表示中心点,(1,1)表示右下角,(-1,-1)表示左上角。

    Stack Align 

    Stack 组件中结合 Align 组件可以控制每个子元素的显示位置 。
      

    和上面的例子一样,当我们在Stack组件里面定义了多个子元素的时候,会发生重叠,即使使用了alignment进行了定位,也是对所有的元素统一定位,这个时候就可以借助Align来控制每个子元素的位置。

     Align也有两个可选参数属性:

    • alignment :配置所有子元素的显示位置 
    • child :子组件

    现在,我们可以这样修改上面的例子:

    import 'package:flutter/material.dart';
    
    void main() => runApp(MyApp());
    
    class MyApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        // TODO: implement build
        return MaterialApp(
            home: Scaffold(
          appBar: AppBar(title: Text('FlutterDemo')),
          body: LayoutDemo(),
        ));
      }
    }
    
    class LayoutDemo extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        // TODO: implement build
        return Center(
          child:  Container(
                height: 400,
                 300,
                color: Colors.red,
                child: Stack(
                  // alignment: Alignment.center,
                  children: <Widget>[
                    Align(
                      alignment: Alignment(1,-0.2),
                      child: Icon(Icons.home,size: 40,color: Colors.white),
                    ),
                    Align(
                      alignment: Alignment.center,
                      child: Icon(Icons.search,size: 30,color: Colors.white),
                    ),
                    Align(
                      alignment: Alignment.bottomRight,
                      child: Icon(Icons.settings_applications,size: 30,color: Colors.white),
                    )
                  ],
                ),
          ),
        );
      }
    }

     Stack Positioned 

    Stack 组件中结合 Positioned 组件也可以控制每个子元素的显示位置 。Positioned 有多个可选参数属性:
    • top :子元素距离顶部的距离 
    • bottom
    • left 
    • right 
    • child 
     我们也可以使用Positioned来实现上面Align的效果:

     
    class LayoutDemo extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        // TODO: implement build
        return Center(
          child:  Container(
                height: 400,
                 300,
                color: Colors.red,
                child: Stack(
                  // alignment: Alignment.center,
                  children: <Widget>[
                    Positioned(
                    //  left: 10,
                      child: Icon(Icons.home,size: 40,color: Colors.white),
                    ),
                    Positioned(
                     bottom: 0,
                     left: 100,
                      child: Icon(Icons.search,size: 30,color: Colors.white),
                    ),
                    Positioned(
                      right: 0,
                      child: Icon(Icons.settings_applications,size: 30,color: Colors.white),
                    )
                  ],
                ),
          ),
        );
      }
    }

  • 相关阅读:
    JavaWeb
    Network
    JavaWeb
    Maven
    IDEA
    Maven
    Network
    JavaWeb
    JavaWeb
    JavaWeb
  • 原文地址:https://www.cnblogs.com/yuyujuan/p/10976429.html
Copyright © 2011-2022 走看看