Flutter 层叠布局

1、StackWidget布局

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), //对齐位置,类似position
      children: <Widget>[
        new CircleAvatar(
          backgroundImage: new NetworkImage('https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1576492247347&di=a523e85022ec91f8b5c84e75b277600b&imgtype=0&src=http%3A%2F%2Fb.hiphotos.baidu.com%2Fimage%2Fpic%2Fitem%2F908fa0ec08fa513db777cf78376d55fbb3fbd9b3.jpg'),
          radius: 100.0,
        ),
        new Container(
          decoration: new BoxDecoration(
            color: Colors.blue,
          ),
          padding: EdgeInsets.all(5.0),
          child: Text('图片介绍'),
        )
      ],
    );
    return MaterialApp(
      title: 'Demo',
      home: Scaffold(
        appBar: new AppBar(title: new Text('垂直方向布局')),
        body: new Center(
          child:stack,

        ),
        
      ),
    );
  }
}

2、PositionedWidget布局

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('https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1576492247347&di=a523e85022ec91f8b5c84e75b277600b&imgtype=0&src=http%3A%2F%2Fb.hiphotos.baidu.com%2Fimage%2Fpic%2Fitem%2F908fa0ec08fa513db777cf78376d55fbb3fbd9b3.jpg'),
          radius: 100.0,
        ),
        new Positioned(
          bottom:10.0,
          left: 70.0,
          child: new Text(
            '图片介绍',
            style: new TextStyle(
              color: Colors.white,
              backgroundColor: Colors.red,
            ),
          ),
        )
      ],
    );
    return MaterialApp(
      title: 'Demo',
      home: Scaffold(
        appBar: new AppBar(title: new Text('垂直方向布局')),
        body: new Center(
          child:stack,

        ),
        
      ),
    );
  }
}

3、Align布局

import 'dart:io';

import 'package:flutter/material.dart';

void main() => runApp(new MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('FlutterDemo'),
        ),
        body: LayoutDemo(),
      ),
    );
  }
}

class LayoutDemo extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Center(
      child: Container(
        height: 400,
        width: 300,
        color: Colors.blue,
        child: Stack(
          children: <Widget>[
            Align(
              alignment: Alignment.topCenter,
              child: Icon(Icons.home,size:60,color:Colors.white),
            ),
            Align(
              alignment: Alignment.center,
              child: Icon(Icons.search,size:60,color:Colors.white),
            ),
            Align(
              alignment: Alignment.bottomCenter,
              child: Icon(Icons.send,size:60,color:Colors.white),
            ),
          ],
        ),
      ),
    );
  }
}

4、Positioned 布局

import 'dart:io';

import 'package:flutter/material.dart';

void main() => runApp(new MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('FlutterDemo'),
        ),
        body: LayoutDemo(),
      ),
    );
  }
}

class LayoutDemo extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Center(
      child: Container(
        height: 400,
        width: 300,
        color: Colors.blue,
        child: Stack(
          children: <Widget>[
            Positioned(
              left: 10,
              child: Icon(Icons.home,size:60,color:Colors.white),
            ),
            Positioned(
              bottom: 0,
              left: 100,
              child: Icon(Icons.search,size:60,color:Colors.white),
            ),
            Positioned(
              right: 0,
              child: Icon(Icons.send,size:60,color:Colors.white),
            ),
          ],
        ),
      ),
    );
  }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值