flutter 布局

本文详细介绍了Flutter中的布局组件,包括Row的不灵活和灵活水平布局,Column的基本用法及其主轴和副轴的概念,以及Stack层叠布局的alignment属性和CircleAvatar组件的使用。通过实例展示了如何利用Expanded属性实现灵活布局,以及如何通过Positioned组件进行多组件层叠定位。最后,提到了卡片组件布局在制作收获地址列表中的应用。

水平布局Row的使用

Flutter中的row控件就是水平控件,它可以让Row里边的子元素进行水平排列。

Row控件可以分为灵活排列和非灵活排列两种,这两种模式都需要熟练掌握,等经验丰富后可根据需求进行使用。

不灵水平布局

从字面上就可以理解到,不灵活就是根据Row子元素的大小,进行布局。如果子元素不足,它会留有空隙,如果子元素超出,它会警告。

比如现在我们要制作三个按钮,并让三个按钮同时在一排。我们写下了如下代码,但发现效果并不理想。

import 'package:flutter/material.dart';
void main () => runApp(MyApp());

class MyApp extends StatelessWidget{
   
   
  
  Widget build(BuildContext context ){
   
   
      return MaterialApp(
        title:'ListView widget',

        home:Scaffold(
          appBar:new AppBar(
            title:new Text('水平方向布局'),
          ),
          body:new Row(
            children: <Widget>[
              new RaisedButton(
                onPressed: (){
   
   

                },
                color:Colors.redAccent,
                child:new Text('红色按钮')
              ),
              new RaisedButton(
                onPressed: (){
   
   

                },
                color:Colors.orangeAccent,
                child: new Text('黄色按钮'),
              ),  
              new RaisedButton(
                onPressed: (){
   
   

                },
                color:Colors.pinkAccent,
                child:new Text('粉色按钮')
              )
            ],
          )
        ),
      );
  }
}

这时候你会发现的页面已经有了三个按钮,但这三个按钮并没有充满一行,而是出现了空隙。这就是不灵活横向排列造成的。它根据子元素的大小来进行排列。如果想实现充满一行的效果,就要使用灵活水平布局了。

灵活水平布局

解决上面有空隙的问题,可以使用 Expanded来进行解决,也就是灵活布局。我们在按钮的外边加入Expanded就可以了,代码如下:

使用 RaisedButton 按钮 我们要在文件上面写 // ignore_for_file: deprecated_member_use

// ignore_for_file: deprecated_member_use

import 'package:flutter/material.dart';
void main () => runApp(MyApp());

class MyApp extends StatelessWidget{
   
   
  
  Widget build(BuildContext context ){
   
   
      return MaterialApp(
        title:'ListView widget',

        home:Scaffold(
          appBar: AppBar(
            title: Text('水平方向布局'),
          ),
          body: Row(
            children: <Widget>[
              Expanded(child: RaisedButton(
                onPressed: (){
   
            
                },
                color:Colors.redAccent,
                child: Text('红色按钮')
              )),
              Expanded(child: RaisedButton(
                onPressed: (){
   
   
                  },
                  color:Colors.orangeAccent,
                  child:  Text('黄色按钮'),
                )

              ),
              Expanded(child: RaisedButton(
                onPressed: (
<think>好的,用户想了解Flutter布局的相关知识和解决布局问题,特别是教程和示例。我需要先整理已有的引用内容,看看哪些信息可以直接帮助用户。 根据提供的引用,引用[3]提到了Flutter的线性布局,使用Row和Column,类似于Android的LinearLayout,还提到主轴和纵轴的概念。引用[4]介绍了Alignment类,可能和布局的对齐方式有关。引用[5]强调了Flutter用代码构建UI,Widget是基本单元,组合现有Widget来创建复杂界面。 用户可能需要基础的布局概念,比如Row、Column,以及更复杂的布局组件如Stack、Expanded、Flexible等。可能需要解释主轴和交叉轴,这对理解布局排列很重要。此外,示例代码会有帮助,比如如何组合这些Widgets。 引用中有提到Flutter Gallery作为官方示例应用,引用[1]和[2],可以推荐用户参考这些资源。另外,布局构建的实践步骤可能需要分点说明,比如从线性布局到弹性布局再到层叠布局,然后讨论对齐和嵌套组合。 需要确保回答结构清晰,分步骤讲解,并包含示例代码。同时,根据用户可能的后续问题,生成相关问题,比如性能优化、常见问题解决、复杂布局实现等。 需要检查引用的正确性,比如引用[3]详细说明了Row和Column,引用[4]关于Alignment的信息是否足够。如果有不足的地方,可能需要补充,但根据现有引用,应该足够覆盖基础布局知识。 最后,确保使用中文回答,LaTeX格式正确,行内公式用$...$,独立公式用$$...$$,但看起来布局部分可能不需要数学公式,所以可能用不上。但需要遵循其他格式要求,如代码块和引用标识。</think>### Flutter布局核心教程 Flutter布局体系基于Widget组合,主要通过以下四类基础布局实现界面构建: 一、**线性布局体系** 1. `Row/Column`组件实现水平/垂直排列 ```dart Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, // 主轴对齐 crossAxisAlignment: CrossAxisAlignment.center, // 交叉轴对齐 children: [Widget1, Widget2], ) ``` 2. `Expanded`组件实现弹性空间分配 ```dart Row( children: [ Expanded(flex: 2, child: WidgetA), // 占2/3空间 Expanded(flex: 1, child: WidgetB), // 占1/3空间 ] ) ``` 二、**弹性布局体系** 1. `Flex`组件配合`Flexible`实现动态布局 ```dart Flex( direction: Axis.vertical, children: [ Flexible(fit: FlexFit.tight, child: TopSection()), Flexible(fit: FlexFit.loose, child: BottomSection()) ] ) ``` 三、**层叠布局体系** 1. `Stack`组件实现元素叠加 ```dart Stack( alignment: Alignment.bottomRight, // 子组件对齐方式[^4] children: [ BackgroundWidget(), Positioned( top: 10, left: 20, child: FloatingButton() ) ] ) ``` 四、**约束布局体系** 1. `ConstrainedBox`设置尺寸约束 ```dart ConstrainedBox( constraints: BoxConstraints( minWidth: 100, maxHeight: 200 ), child: CustomWidget() ) ``` **布局调试技巧**: - 使用`DebugPaintSizeEnabled`可视化布局边框 - 通过`LayoutBuilder`获取父级约束条件 - 使用`AspectRatio`保持特定宽高比 **推荐学习路径**: 1. 通过Flutter Gallery[^1]查看官方布局示例 2. 在Flutter-examples[^2]仓库中实践布局组合 3. 使用DevTools实时预览布局结构
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值