在CentOS系统下,使用Flutter进行UI布局主要依赖于Dart语言和Flutter框架提供的各种布局组件。以下是一些基本的UI布局组件和示例代码,帮助你在Flutter中创建用户界面。
Row组件用于水平排列子组件。
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('Row Layout'),
),
body: Center(
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Container(
width: 50,
height: 50,
color: Colors.red,
),
Container(
width: 50,
height: 50,
color: Colors.green,
),
Container(
width: 50,
height: 50,
color: Colors.blue,
),
],
),
),
),
);
}
}
Column组件用于垂直排列子组件。
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('Column Layout'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Container(
width: 50,
height: 50,
color: Colors.red,
),
Container(
width: 50,
height: 50,
color: Colors.green,
),
Container(
width: 50,
height: 50,
color: Colors.blue,
),
],
),
),
),
);
}
}
Stack组件用于将多个子组件堆叠在一起。
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('Stack Layout'),
),
body: Center(
child: Stack(
children: <Widget>[
Container(
width: 100,
height: 100,
color: Colors.red,
),
Container(
width: 100,
height: 100,
color: Colors.green,
alignment: Alignment.center,
child: Text('Green'),
),
Container(
width: 100,
height: 100,
color: Colors.blue,
alignment: Alignment.bottomRight,
child: Text('Blue'),
),
],
),
),
),
);
}
}
Flutter提供了多种布局约束来控制子组件的大小和位置。
Expanded组件用于在Row或Column中分配剩余空间。
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('Expanded Layout'),
),
body: Center(
child: Row(
children: <Widget>[
Expanded(
flex: 1,
child: Container(
color: Colors.red,
),
),
Expanded(
flex: 2,
child: Container(
color: Colors.green,
),
),
],
),
),
),
);
}
}
Flexible组件与Expanded类似,但提供了更多的灵活性。
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('Flexible Layout'),
),
body: Center(
child: Row(
children: <Widget>[
Flexible(
fit: FlexFit.loose,
child: Container(
color: Colors.red,
),
),
Flexible(
fit: FlexFit.loose,
child: Container(
color: Colors.green,
),
),
],
),
),
),
);
}
}
Flutter提供了多种方式来实现响应式布局,例如使用MediaQuery获取屏幕尺寸,使用LayoutBuilder根据父组件的约束来构建子组件。
MediaQuery可以获取屏幕的尺寸、方向等信息。
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('MediaQuery Example'),
),
body: Center(
child: Container(
color: Colors.blue,
child: Text(
'Screen Width: ${MediaQuery.of(context).size.width}',
style: TextStyle(color: Colors.white),
),
),
),
),
);
}
}
LayoutBuilder可以根据父组件的约束来构建子组件。
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('LayoutBuilder Example'),
),
body: Center(
child: LayoutBuilder(
builder: (context, constraints) {
if (constraints.maxWidth < 300) {
return Container(
color: Colors.red,
child: Center(child: Text('Small Screen')),
);
} else {
return Container(
color: Colors.blue,
child: Center(child: Text('Large Screen')),
);
}
},
),
),
),
);
}
}
通过这些基本的布局组件和技巧,你可以在CentOS系统下使用Flutter创建各种复杂的用户界面。希望这些示例对你有所帮助!