简单效果实现
在页面中垂直水平居中
使用Center
Widget
Center
widget可以使其子widget在父widget中居中显示。这是实现居中最简单的方法:
使用Column
和MainAxisAlignment
当你有多个widget需要垂直居中时,可以使用Column
结合MainAxisAlignment.center
:
使用Row
和CrossAxisAlignment
对于需要水平居中的情况,可以使用Row
结合CrossAxisAlignment.center
:
结合Container
使用
如果你想要更多的控制,比如设置页面的大小或背景色,可以将Center
、Column
或Row
放在Container
中:
使用Align
Widget
Align
widget也可以实现居中效果,通过设置其alignment
属性:
使用Scaffold
和Center
在实际应用中,页面通常包含在Scaffold
中,你可以这样来居中内容:
布局技巧
column中让子元素撑满
可以使用Spacer填充,实现flex:1 的效果
Container 设置最低高度,内容会撑开最小高度
通过设置 constraints
来为 Container
定义一个最小高度,同时让其高度根据内容自适应:
Container(
constraints: BoxConstraints(
minHeight: 100.0, // 设置最低高度
),
padding: EdgeInsets.all(16.0), // 可选:为内容添加内边距
child: Text(
'这是一个内容自适应高度的 Container。',
style: TextStyle(fontSize: 16.0),
),
),
状态栏沉浸式且背景与顶部的header融为一体
banner固定不跟随滑动
import 'package:flutter/services.dart';
import 'package:flutter_app/common.dart';
import 'package:get/get.dart';
import 'package:flutter/material.dart';
class AboutPage extends GetView {
Widget build(BuildContext context) {
SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle.dark);
return Scaffold(
body: AnnotatedRegion<SystemUiOverlayStyle>(
value: SystemUiOverlayStyle.dark,
child: Stack(
children: [
Container(
width: double.infinity,
height: 400,
color: BaseColor.errorColor,
child: Text('data2'),
),
SafeArea(
child: SingleChildScrollView(
child: Container(
width: double.infinity,
padding: const EdgeInsets.only(top: 20),
child: Column(children: [
Text('data'),
SizedBox(
height: 250,
),
Text('data'),
SizedBox(
height: 250,
),
Text('data'),
SizedBox(
height: 250,
),
Text('data'),
SizedBox(
height: 250,
)
])
)
),
),
]
),)
);
}
}
跟随滚动条滑动版本
Widget _buildBannerBg() {
return Container(
width: double.infinity,
height: 310.h,
decoration: BoxDecoration(
image: DecorationImage(
image: AssetImage(ImgPath.home.bannerBg),
fit: BoxFit.fitWidth,
)
),
child: SafeArea(child: Text('2998')),
);
}
Widget _buildView() {
return AnnotatedRegion<SystemUiOverlayStyle>(
value: SystemUiOverlayStyle(
statusBarColor: Colors.transparent,
statusBarIconBrightness: Brightness.light,
statusBarBrightness: Brightness.light,
),
child: SingleChildScrollView(
child: Column(
mainAxisSize: MainAxisSize.max,
children: [
_buildBannerBg(),
XTextWidget.h1('text'),
XTextWidget.h1('text'),
XTextWidget.h1('text'),
SizedBox(height: 100.h,),
XTextWidget.h1('text'),
SizedBox(height: 100.h,),
XTextWidget.h1('text'),
SizedBox(height: 100.h,),
XTextWidget.h1('text'),
SizedBox(height: 100.h,),
XTextWidget.h1('text'),
SizedBox(height: 100.h,),
// Container(
// width: double.infinity,
// height: 300,
// color: Colors.yellow,
// )
],
),
),
);
}
Widget build(BuildContext context) {
return GetBuilder<HomeLogic>(builder: (controller) {
return Scaffold(
// 让内容延伸到状态栏下方
extendBodyBehindAppBar: true,
body: _buildView()
);
});
}