Flutter 是一个流行的跨平台移动应用开发框架,近年来越来越多的开发者开始转向 Flutter。在 UI 编程中,布局是重中之重。本文将讨论如何在 Flutter 中实现 match_parent 和 wrap_content。
首先,我们来搭建一个基础界面。以下是代码:
```dart
import 'package:flutter/material.dart';
void main() {
runApp(MaterialApp(
debugShowCheckedModeBanner: false,
home: Scaffold(
appBar: AppBar(title: const Text('match&wrap')),
body: Container(
color: Colors.redAccent.shade100,
),
),
));
}
```
这段代码创建了一个具有淡红色背景的基础界面。接下来,我们将在这个淡红色框里放一个宽高为 200 的蓝色方框,并设置其颜色。为了实现这一点,我们需要修改 Container 的宽度和高度属性。以下是修改后的代码:
```dart
Container(
width: double.infinity, // 或者使用 null
height: 200,
color: Colors.blue,
)
```
这样,我们就得到了一个宽高为 200 的蓝色方框。但是,我们发现淡红色背景消失了。这是因为我们直接使用了默认的 Container。为了解决这个问题,我们需要修改 Container 的宽度和高度属性。以下是修改后的代码:
```dart
Container(
width: double.infinity, // 或者使用 null
height: double.infinity, // 或者使用 null
color: Colors.blue,
)
```
现在,我们得到了一个宽高为 200 的蓝色方框,且淡红色背景仍然存在。这就是如何使用 match_parent 实现固定宽高的容器。
接下来,我们将展示如何使用 wrap_content 实现固定高的容器。以下是修改后的代码:
```dart
Container(
width: double.infinity, // 或者使用 null
height: wrap_content, // 或者使用 null
color: Colors.blue,
)
```
通过将高度设置为 wrap_content,我们得到了一个宽高自适应的蓝色方框。这就是如何使用 wrap_content 实现固定高的容器。
```dart
Container(
color: Colors.red,
child: const Text('Flutter', style: TextStyle(fontSize: 45)),
)
Container(
width: double.infinity,
color: Colors.orange,
child: const Text('Flutter', style: TextStyle(fontSize: 45)),
)
Expanded(
child: Container(
color: Colors.purpleAccent,
child: const Text('Flutter', style: TextStyle(fontSize: 45)),
),
)
Expanded(
child: Container(
width: double.infinity,
color: Colors.lightBlueAccent,
child: const Text('Flutter', style: TextStyle(fontSize: 45)),
),
)
```
以下是重构后的代码:
```dart
import 'package:flutter/material.dart';
void main() {
runApp(MaterialApp(
debugShowCheckedModeBanner: false,
home: Scaffold(
appBar: AppBar(title: const Text('match&wrap')),
body: Column(
children: [
Container(
color: Colors.red,
child: const Text('Flutter', style: TextStyle(fontSize: 45))),
Container(
width: double.infinity,
color: Colors.orange,
child: const Text('Flutter', style: TextStyle(fontSize: 45))),
Expanded(
child: Container(
color: Colors.purpleAccent,
child: const Text('Flutter', style: TextStyle(fontSize: 45)))),
Expanded(
child: Container(
width: double.infinity,
color: Colors.lightBlueAccent,
child: const Text('Flutter', style: TextStyle(fontSize: 45)))),
],
),
),
));
}
```
结果如下图所示
Wrap具有自适应宽高的效果,参考如下代码:
```dart
import 'package:flutter/material.dart';
void main() {
runApp(MaterialApp(
debugShowCheckedModeBanner: false,
home: Scaffold(
appBar: AppBar(title: const Text('match&wrap')),
body: Container(
alignment: Alignment.topLeft,
color: Colors.redAccent.shade100,
child: Container(
color: Colors.blue,
child: const Wrap(
direction: Axis.vertical,
children: [
Text('ABCDEFG'),
Text('好好学习天天向上'),
Text('前途无量'),
Text('hello world'),
],
),
),
),
),
));
}
```