Dart 语言 Row 水平布局示例

Dart阿木 发布于 2025-06-19 6 次阅读


Dart 语言 Row 水平布局示例详解

在Flutter和Dart开发中,布局是构建用户界面的重要组成部分。`Row` 是Flutter中用于创建水平布局的一个常用Widget。本文将围绕Dart语言的`Row`水平布局进行详细讲解,包括其基本用法、属性、组合以及一些高级技巧。

基本用法

`Row` Widget 是一个线性布局,其子Widget将按照水平方向排列。以下是一个简单的`Row`布局示例:

dart

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 Example'),


),


body: Center(


child: Row(


children: <Widget>[


Icon(Icons.home),


Text('Home'),


Icon(Icons.business),


Text('Business'),


Icon(Icons.school),


Text('School'),


],


),


),


),


);


}


}


在这个例子中,`Row` 包含了四个子Widget:两个`Icon`和两个`Text`。这些子Widget将按照从左到右的顺序水平排列。

属性详解

`Row` Widget 提供了一系列属性来控制其子Widget的布局和行为。以下是一些常用的属性:

mainAxisAlignment

`mainAxisAlignment` 属性定义了子Widget在主轴(水平轴)上的对齐方式。以下是一些常用的值:

- `MainAxisAlignment.start`:子Widget从行的起始位置开始排列。

- `MainAxisAlignment.end`:子Widget排列在行的末尾。

- `MainAxisAlignment.center`:子Widget居中对齐。

- `MainAxisAlignment.spaceBetween`:子Widget平均分布,两端对齐。

- `MainAxisAlignment.spaceAround`:子Widget平均分布,两端和中间都有间隔。

- `MainAxisAlignment.spaceEvenly`:子Widget平均分布,间隔相等。

以下是一个使用`spaceEvenly`的示例:

dart

Row(


mainAxisAlignment: MainAxisAlignment.spaceEvenly,


children: <Widget>[


Icon(Icons.home),


Text('Home'),


Icon(Icons.business),


Text('Business'),


Icon(Icons.school),


Text('School'),


],


),


crossAxisAlignment

`crossAxisAlignment` 属性定义了子Widget在交叉轴(垂直轴)上的对齐方式。以下是一些常用的值:

- `CrossAxisAlignment.start`:子Widget从行的起始位置开始排列。

- `CrossAxisAlignment.end`:子Widget排列在行的末尾。

- `CrossAxisAlignment.center`:子Widget居中对齐。

- `CrossAxisAlignment.stretch`:子Widget拉伸以填满整个交叉轴。

- `CrossAxisAlignment.fill`:子Widget填充整个交叉轴,但不超过其最大尺寸。

以下是一个使用`stretch`的示例:

dart

Row(


crossAxisAlignment: CrossAxisAlignment.stretch,


children: <Widget>[


Icon(Icons.home),


Text('Home'),


Icon(Icons.business),


Text('Business'),


Icon(Icons.school),


Text('School'),


],


),


mainAxisSize

`mainAxisSize` 属性定义了`Row`在主轴方向上的大小。以下是一些常用的值:

- `MainAxisSize.min`:`Row`的大小取决于其子Widget的大小。

- `MainAxisSize.max`:`Row`的大小被限制为其父Widget的大小。

以下是一个使用`max`的示例:

dart

Row(


mainAxisSize: MainAxisSize.max,


children: <Widget>[


Icon(Icons.home),


Text('Home'),


Icon(Icons.business),


Text('Business'),


Icon(Icons.school),


Text('School'),


],


),


children

`children` 属性是一个Widget列表,包含了`Row`中的所有子Widget。

组合使用

`Row` 可以与其他布局Widget组合使用,以创建复杂的布局。以下是一些常见的组合方式:

与 `Column` 组合

dart

Column(


children: <Widget>[


Row(


mainAxisAlignment: MainAxisAlignment.center,


children: <Widget>[


Icon(Icons.home),


Text('Home'),


],


),


Row(


mainAxisAlignment: MainAxisAlignment.center,


children: <Widget>[


Icon(Icons.business),


Text('Business'),


],


),


],


),


与 `Expanded` 组合

`Expanded` Widget 可以使子Widget填满可用空间。

dart

Row(


children: <Widget>[


Icon(Icons.home),


Expanded(


child: Text('Home'),


),


Icon(Icons.business),


Expanded(


child: Text('Business'),


),


],


),


与 `Flexible` 组合

`Flexible` Widget 可以使子Widget根据可用空间进行弹性伸缩。

dart

Row(


children: <Widget>[


Icon(Icons.home),


Flexible(


child: Text('Home'),


),


Icon(Icons.business),


Flexible(


child: Text('Business'),


),


],


),


高级技巧

使用 `Row` 创建导航栏

在Flutter应用中,`Row` 经常用于创建导航栏。以下是一个简单的示例:

dart

AppBar(


title: Text('App Title'),


actions: <Widget>[


IconButton(


icon: Icon(Icons.search),


onPressed: () {},


),


IconButton(


icon: Icon(Icons.account_circle),


onPressed: () {},


),


],


),


使用 `Row` 创建按钮组

`Row` 可以用来创建按钮组,使按钮水平排列。

dart

Row(


mainAxisAlignment: MainAxisAlignment.center,


children: <Widget>[


ElevatedButton(


onPressed: () {},


child: Text('Button 1'),


),


SizedBox(width: 10),


ElevatedButton(


onPressed: () {},


child: Text('Button 2'),


),


],


),


总结

`Row` 是Flutter和Dart中一个强大的布局Widget,可以用来创建水平布局。通过合理使用其属性和与其他Widget的组合,可以构建出丰富的用户界面。本文详细介绍了`Row`的基本用法、属性、组合以及一些高级技巧,希望对您的Flutter和Dart开发有所帮助。