在CentOS下进行Flutter UI布局,需先安装Flutter开发环境,再通过代码实现布局。以下是基础步骤和常用布局组件示例:
安装Flutter:
flutter --version
开发工具:
Flutter通过Widget树构建界面,以下是基础布局组件及用法:
Container(
width: 200,
height: 100,
color: Colors.blue,
child: Text('Hello', style: TextStyle(color: Colors.white)),
)
mainAxisAlignment
控制对齐方式(如spaceBetween
均匀分布)。Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [Text('Item 1'), Text('Item 2'), Text('Item 3')],
)
crossAxisAlignment
控制垂直对齐(如center
居中)。Column(
crossAxisAlignment: CrossAxisAlignment.center,
children: [Text('Top'), Text('Middle'), Text('Bottom')],
)
flex
设置比例。Row(
children: [
Expanded(flex: 2, child: Container(color: Colors.red)),
Expanded(flex: 1, child: Container(color: Colors.green)),
],
)
Positioned
控制位置(需配合Alignment
或具体坐标)。Stack(
alignment: Alignment.center,
children: [
Container(width: 200, height: 200, color: Colors.blue),
Positioned(top: 20, left: 20, child: Text('Stacked Text')),
],
)
ListView(
children: List.generate(10, (index) => ListTile(title: Text('Item $index'))),
)
crossAxisCount
设置列数。GridView.count(
crossAxisCount: 2,
children: List.generate(4, (index) => Container(color: Colors.amber)),
)
以下是一个综合布局示例(含标题、内容区、按钮):
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(title: Text('Flutter Layout Demo')),
body: Column(
children: [
// 标题栏(水平布局)
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text('Title', style: TextStyle(fontSize: 20)),
Icon(Icons.menu),
],
),
// 内容区(垂直布局+弹性扩展)
Expanded(
child: Container(
padding: EdgeInsets.all(16),
color: Colors.grey[200],
child: Column(
children: [
Text('Main Content Here', style: TextStyle(fontSize: 16)),
SizedBox(height: 20),
// 按钮(水平布局)
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
ElevatedButton(onPressed: () {}, child: Text('Button 1')),
SizedBox(width: 10),
ElevatedButton(onPressed: () {}, child: Text('Button 2')),
],
),
],
),
),
],
),
),
);
}
}
constraints
限制子组件大小,子组件根据约束决定自身尺寸。const
构造函数提升渲染效率。更多细节可参考Flutter官方布局文档。