热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

浅尝flutter中的flex布局

假设你已经掌握了flutter的一些基础知识,比如环境搭建,简单的dart语法,及flutter组件化思想。那么你适合阅读本篇教程

假设你已经掌握了flutter的一些基础知识,比如环境搭建,简单的dart语法,及flutter组件化思想。那么你适合阅读本篇教程,本教程演示一些flutter中的flex用法的简单示例.

在不懂height: 170.0,width:100.0如何适配不同分辨率的时候,只能用flex搞事情,所以咱看看flex如何在flutter中搞事情。

先看效果图:

分析一下需求:

整个布局最外层是一个Row,左边是一个Column里面再嵌套一个Row,代码实现如下:

import 'package:flutter/material.dart';
class FluterFlex extends StatelessWidget {@overrideWidget build(BuildContext context){ return new Center(child: new Row(children: [new Column(children: [new Text("为什么说Flutter是革命性的1",style: new TextStyle(fontSize: 18.0),), new Row(children: [new Text('央视网',), new Text('2018-03-11',), ],), ],),new Image.asset('images/head.jpg',height: 100.0,fit: BoxFit.cover,),],), );}
}

这只是纯组件代码,还没有添加任何样式

最外层的Row,有2个子组件,它们主轴为水平方向,起点为左端,和flex的flex-direction: row同样效果,子组件的对齐方式为两端对齐,flex代码为 justify-content: space-between。

然后左侧布局为Column,主轴方向为垂直方向,两个子组件的布局方式为两端对齐,flex代码为: justify-content:space-between。

左侧底部同理。在flutter如果实现呢,代码如下:


import 'package:flutter/material.dart';class FluterFlex extends StatelessWidget {@overrideWidget build(BuildContext context){return new Center(child:new Container(height: 120.0,padding:new EdgeInsets.only(left:20.0,right:20.0),//给最外层添加paddingdecoration: new BoxDecoration(border:new Border.all(//新手建议给每一个组件写一个bordercolor:const Color(0xff6d9eeb),)),child: new Row(mainAxisAlignment: MainAxisAlignment.spaceBetween,//子组件的排列方式为主轴两端对齐children: [new Expanded(flex:2,//这个item占据剩余空间的份数,因为总数为3,所以此处占据2/3child: new Column(crossAxisAlignment: CrossAxisAlignment.start,//子组件的在交叉轴的对齐方式为起点mainAxisAlignment:MainAxisAlignment.spaceBetween ,//子组件在主轴的排列方式为两端对齐children: [new Container(padding:new EdgeInsets.only(top:15.0),//标题写一个top-paddingdecoration: new BoxDecoration(border:new Border.all(color:const Color(0xff6d999b),)),child:new Text("为什么说Flutter是革命性的",style: new TextStyle(fontSize: 18.0),), ),new Container(padding:const EdgeInsets.only(right:13.0,bottom:15.0),decoration: new BoxDecoration(border:new Border.all(color:const Color(0xff6d999b),)),child:new Row(mainAxisAlignment: MainAxisAlignment.spaceBetween,//子组件在主轴的排列方式为两端对齐children: [new Text('央视网',), new Text('2018-03-11',), ],)),],),),new Expanded(flex:1,//这个item占据剩余空间的份数,因为总数为3,所以此处占据1/3child: new Image.asset(//本地图片加载,需在pubspec.yaml配置'images/head.jpg',height: 100.0,fit: BoxFit.cover,),),],),),);}
}

效果如图:

在上面代码中,还添加了一些其他样式,并且给每一个组件都加了border,这样便于新手布局。我们把多余的代码删掉然后稍作改进,完整代码如下:


import 'package:flutter/material.dart';class FluterFlex extends StatelessWidget {@overrideWidget build(BuildContext context){return new Center(child:new Container(height: 120.0,padding:new EdgeInsets.only(left:20.0,right:20.0),//给最外层添加paddingdecoration: new BoxDecoration(border:new Border(bottom: new BorderSide(width: 1.0,color:const Color(0xff999999))// color:const Color(0xff6d9eeb),)),child: new Row(mainAxisAlignment: MainAxisAlignment.spaceBetween,//子组件的排列方式为主轴两端对齐children: [new Expanded(flex:2,//这个item占据剩余空间的份数,因为总数为3,所以此处占据2/3child: new Column(crossAxisAlignment: CrossAxisAlignment.start,//子组件的在交叉轴的对齐方式为起点mainAxisAlignment:MainAxisAlignment.spaceBetween ,//子组件的排列方式为主轴两端对齐children: [new Container(padding:new EdgeInsets.only(top:15.0),//标题写一个top-paddingchild:new Text("为什么说Flutter是革命性的",style: new TextStyle(fontSize: 18.0),), ),new Container(padding:const EdgeInsets.only(right:13.0,bottom:15.0),child:new Row(mainAxisAlignment: MainAxisAlignment.spaceBetween,//子组件的排列方式为主轴两端对齐children: [new Text('央视网',), new Text('2018-03-11',), ],)),],),),new Expanded(flex:1,//这个item占据剩余空间的份数,因为总数为3,所以此处占据1/3child: new Image.asset(//本地图片加载,需在pubspec.yaml配置'images/head.jpg',height: 100.0,fit: BoxFit.cover,),),],),), );}
}

代码都是参考官网英文文档撸的,但是本人是英语渣,所以如果有不对的地方,欢迎大家指正!



推荐阅读
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • Android开发实现的计时器功能示例
    本文分享了Android开发实现的计时器功能示例,包括效果图、布局和按钮的使用。通过使用Chronometer控件,可以实现计时器功能。该示例适用于Android平台,供开发者参考。 ... [详细]
  • Java自带的观察者模式及实现方法详解
    本文介绍了Java自带的观察者模式,包括Observer和Observable对象的定义和使用方法。通过添加观察者和设置内部标志位,当被观察者中的事件发生变化时,通知观察者对象并执行相应的操作。实现观察者模式非常简单,只需继承Observable类和实现Observer接口即可。详情请参考Java官方api文档。 ... [详细]
  • 展开全部下面的代码是创建一个立方体Thisexamplescreatesanddisplaysasimplebox.#Thefirstlineloadstheinit_disp ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • Go GUIlxn/walk 学习3.菜单栏和工具栏的具体实现
    本文介绍了使用Go语言的GUI库lxn/walk实现菜单栏和工具栏的具体方法,包括消息窗口的产生、文件放置动作响应和提示框的应用。部分代码来自上一篇博客和lxn/walk官方示例。文章提供了学习GUI开发的实际案例和代码示例。 ... [详细]
  • Spring学习(4):Spring管理对象之间的关联关系
    本文是关于Spring学习的第四篇文章,讲述了Spring框架中管理对象之间的关联关系。文章介绍了MessageService类和MessagePrinter类的实现,并解释了它们之间的关联关系。通过学习本文,读者可以了解Spring框架中对象之间的关联关系的概念和实现方式。 ... [详细]
  • vue使用
    关键词: ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • Webpack5内置处理图片资源的配置方法
    本文介绍了在Webpack5中处理图片资源的配置方法。在Webpack4中,我们需要使用file-loader和url-loader来处理图片资源,但是在Webpack5中,这两个Loader的功能已经被内置到Webpack中,我们只需要简单配置即可实现图片资源的处理。本文还介绍了一些常用的配置方法,如匹配不同类型的图片文件、设置输出路径等。通过本文的学习,读者可以快速掌握Webpack5处理图片资源的方法。 ... [详细]
  • 本文介绍了在多平台下进行条件编译的必要性,以及具体的实现方法。通过示例代码展示了如何使用条件编译来实现不同平台的功能。最后总结了只要接口相同,不同平台下的编译运行结果也会相同。 ... [详细]
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
  • 数组的排序:数组本身有Arrays类中的sort()方法,这里写几种常见的排序方法。(1)冒泡排序法publicstaticvoidmain(String[]args ... [详细]
author-avatar
劳资就是若听_979
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有