Flutter学习(7)Stack组件
一.Stack组件

demo
class LayoutDemo extends StatelessWidget { @override Widget build(BuildContext context) { return Stack(children: <Widget>[ Container( height: 400, width: 300, color: Colors.red, ), Text("如果不是Stack组件,那么这行文本应该显示在Container的下面") ]); } }效果

再往上堆叠一些东西
比如文本
import 'package:flutter/material.dart'; void main() => runApp(MyApp()); class MyApp extends StatelessWidget { const MyApp({Key? key}) : super(key: key); @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 Stack(children: <Widget>[ Container( height: 400, width: 300, color: Colors.red, ), Text("如果不是Stack组件,那么这行文本应该显示在Container的下面"), Text("文本堆在文本上面") ]); } }
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
@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: Stack(
alignment: Alignment.center,
children: <Widget>[
Container(
height: 400,
width: 300,
color: Colors.red,
),
Text('我是一个文本', style: TextStyle(fontSize: 40, color: Colors.white))
],
),
);
}
}

如果把Text和Container的顺序换一下,Text就被盖住了
class LayoutDemo extends StatelessWidget { @override Widget build(BuildContext context) { return Center( child: Stack( alignment: Alignment.center, children: <Widget>[ Text('我是一个文本', style: TextStyle(fontSize: 40, color: Colors.white)), Container( height: 400, width: 300, color: Colors.red, ), ], ), ); } }
Text恢复回去
修改Alignment为alignment: Alignment.bottomLeft,效果如下

Alignment指定参数
使用Alignment的构造函数
class LayoutDemo extends StatelessWidget { @override Widget build(BuildContext context) { return Center( child: Stack( alignment: Alignment(0, 0), children: <Widget>[ Container( height: 400, width: 300, color: Colors.red, ), Text('我是一个文本', style: TextStyle(fontSize: 10, color: Colors.white)) ], ), ); } }

(0,0)是居中
二.Flutter Stack Align

当里面有多个组件仍然用Stack组件的Alignment属性来控制的话,所有的组件都会到同一个方位,仍然会重叠
class LayoutDemo extends StatelessWidget { @override Widget build(BuildContext context) { return Center( child: Container( height: 400, width: 300, color: Colors.red, child: Stack( alignment: Alignment.center, children: <Widget>[ Icon(Icons.home, size: 40, color: Colors.white), Icon(Icons.search_off, size: 30, color: Colors.cyanAccent), Icon(Icons.send, size: 50, color: Colors.black) ], ), )); } }
此时可以用Align组件控制每一个组件的位置
class LayoutDemo extends StatelessWidget { @override Widget build(BuildContext context) { return Center( child: Container( height: 400, width: 300, color: Colors.red, child: Stack( children: <Widget>[ Align( alignment: Alignment.center, child: Icon(Icons.home, size: 40, color: Colors.white), ), Align( alignment: Alignment.topLeft, child: Icon(Icons.search_off, size: 30, color: Colors.cyanAccent), ), Align( alignment: Alignment.bottomLeft, child: Icon(Icons.send, size: 50, color: Colors.black)) ], ), )); } }
三、Flutter Stack Positioned

没写的属性值默认为0
class LayoutDemo extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Center(
child: Container(
height: 400,
width: 300,
color: Colors.red,
child: Stack(
children: <Widget>[
Positioned(
left: 100,
child: Icon(Icons.home, size: 40, color: Colors.white),
),
Positioned(
bottom: 10,
child: Icon(Icons.search_off, size: 30, color: Colors.cyanAccent),
),
Positioned(
top: 304,
right: 10,
child: Icon(Icons.send, size: 50, color: Colors.black))
],
),
));
}
}

版权声明:本文为qq_52431436原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。