文章目录
我们在上一章回中介绍了进度条Widget相关的内容,,本章回中将介绍
布局约束类Widget。闲话休提,让我们一起Talk Flutter吧。
我们在这里说的布局约束表示可以控制其它Widget大小,Flutter中提供了一些Widget,它们专门用来控制其它Widget的大小,我将它们称作约束布局类Widget.
之所以要介绍它们是因为上一章回中介绍进度条时发现无法调整进度条的大小,只有在进度条组件外层嵌套一个约束类Widget时才可以控制进度条的大小。
常用的布局约束类Widget有Container(第四回介绍过),Expanded,ConstrainedBox,SizedBox和FractionallySizedBox。除了Expanded外,它们都提供长度和宽度类属性,并且带有一个child属性,给长度和宽度属性赋值后可以约束child属性中widget的长度和宽度。
Expanded组件比较特殊,它表示尽可能地占满父类布局的剩余空间,所以它没有提供长度和宽度相关的属性,不过它提供了一个flex属性,用来控制长度和宽度的比例,它可以和Containter组件配合使用。注意该组件只能用在Column和Rom这种布局类组件中,我们在介绍Column和Rom组件时提到过该组件。
return Scaffold(
appBar: AppBar(
title: const Text("Example of All kinds of Constrained box"),
backgroundColor: Colors.purpleAccent,
),
body: Column(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
//最小和最大约束,最大不指定默认为无限大,不过不能大过父约束
ConstrainedBox(
constraints: const BoxConstraints(
minHeight: 30,
minWidth: 30,
),
child: const Text("This is the column 1"),
),
//固定大小约束
const SizedBox(
width: 300,
height: 50,
child: Text("This is the column 2"),
),
//按照比例约束,需要在外面套一个约束才可以运行,不然报运行时错误
Container(
color: Colors.blue,
width: double.infinity,
height: 100,
child: const FractionallySizedBox(
widthFactor: 0.5,
heightFactor: 0.2,
child: Text("This is the column 3"),
),
),
const SizedBox(
width: 300,
height: 20,
child: Text("This is the column 4"),
),
Expanded(
flex: 1,
child: Container(
color: Colors.blue,
child: const Text("This is the column 5"),
),
),
Expanded(
flex: 2,
child: Container(
color: Colors.deepPurple,
alignment: Alignment.centerRight,
child: const Text("This is the column 6"),
),
),
Expanded(
flex: 3,
child: Container(
color: Colors.blue,
alignment: Alignment.center,
child: const Text("This is the column 7"),
),
),
],
),
);
我们在这里只列出了核心代码,完整的代码可以查看Github上ex012文件中的代码。我们不演示程序运行结果了,建议大家自动动手运行并且体会一下约束布局的功能。
最后我们对这些组件的功能和用法做一个总结,详细如下;
Container组件通过它的width和height属性用来控制被约束组件的宽度和高度,而且可以设定背景颜色,它的使用范围最广;Expanded组件需要和Column和Row配合使用,通过它的flex属性来控制被约束组件在父组件中宽度和高度占用的比例,类似Android中的weight;ConstrainedBox组件需要配合BoxConstraints组件使用,用来控制被约束组件的最小/大宽度和高度;SizedBox组件通过它的width和height属性用来控制被约束组件的宽度和高度,相当于指定被约束组件的大小。它类似Container组件,只是不能设置背景色;FractionallySizedBox组件通过它的widthFactor和heightFactor属性用来控制被约束组件的宽度和高度在父布局中的占比,它类似Expanded中的Flex,不过不能直接在Column和Row中使用,需要在它的外层添加一个有长度和宽度的容器,比如Container.不然编译正常但是在运行时就会发生错误。我的经验是使用Column和Row来控制整个布局的垂直和水平方向,然后通过Expanded组件及其flex属性来约束子组件的大小,这种方法类似于Android中的约束布局,并且布局中的子组件都是按照指定的比例排列,这样做的好处是可以适配各种大小不同的屏幕。
看官们,关于布局约束类Widget相关的内容就介绍到这里,欢迎大家在评论区交流与讨论!
是否可以为特定(或所有)项目使用多个布局?例如,我有几个项目,我想对其应用两种不同的布局。一个是绿色的,一个是蓝色的(但是)。我想将它们编译到我的输出目录中的两个不同文件夹中(例如v1和v2)。我一直在玩弄规则和编译block,但我不知道这是怎么回事。因为,每个项目在编译过程中只编译一次,我不能告诉nanoc第一次用layout1编译,第二次用layout2编译。我试过这样的东西,但它导致输出文件损坏。compile'*'doifitem.binary?#don’tfilterbinaryitemselsefilter:erblayout'layout1'layout'layout2'
有没有办法跳过CSV文件的第一行,让第二行作为标题?我有一个CSV文件,第一行是日期,第二行是标题,所以我需要能够在遍历它时跳过第一行。我尝试使用slice但它会将CSV转换为数组,我真的很想将其读取为CSV,以便我可以利用header。 最佳答案 根据您的数据,您可以使用另一种方法和skip_lines-option此示例跳过所有以#开头的行require'csv'CSV.parse(DATA.read,:col_sep=>';',:headers=>true,:skip_lines=>/^#/#Markcomments!)do|
使用method_missing时在Ruby中,它是almostalwaysagoodidea定义respond_to_missing?respond_to_missing?接受两个参数;我们正在检查的方法的名称(symbol),以及一个指示我们是否应该在检查中包含私有(private)方法的bool值(include_all)。现在我感到困惑的是:method_missing不接受任何可能指示它是否应该调用私有(private)方法的参数,如respond_to_missing?做。此外,method_missing无论原始方法调用是在公共(public)上下文还是私有(privat
我正在对用户的提要进行分页,并想模拟我正在使用的API的响应。API可以返回奇怪的结果,所以我想确保如果API返回我已经看到的项目,请停止分页。我使用minitest在第一次调用方法get_next_page时stub,但我想在第二次和第三次用不同的值调用它时stub。我应该只使用rSpec吗?ruby新手...这是片段test"crawlerdoesnotpaginateifnonewitemsinnextpage"do#1:A,B#2:B,D=>D#3:A=>stopcrawler=CrawlJob.newfirst_page=[{"id"=>"item-A"},{"id"=>"i
文章目录前言约束硬约束的轨迹优化Corridor-BasedTrajectoryOptimizationBezierCurveOptimizationOtherOptions软约束的轨迹优化Distance-BasedTrajectoryOptimization优化方法前言可以看看我的这几篇Blog1,Blog2,Blog3。上次基于MinimumSnap的轨迹生成,有许多优点,比如:轨迹让机器人可以在某个时间点抵达某个航点。任何一个时刻,都能数学上求出期望的机器人的位置、速度、加速度、导数。MinimumSnap可以把问题转换为凸优化问题。缺点:MnimumSnap可以控制轨迹一定经过中间的
我似乎找不到一种优雅的方式来做到这一点......给定一个日期,我如何找到下一个星期二,即日历月的第2个或第4个星期二?例如:给定2012-10-19然后返回2012-10-23或给定2012-10-31然后返回2012-11-13OctoberNovemberSuMoTuWeThFrSaSuMoTuWeThFrSa12345612378910111213456789101415161718192011121314151617212223242526271819202122232428293031252627282930 最佳答案
以下代码使用了触发器运算符。(1..10).each{|x|print"#{x},"ifx==3..x==5}为什么结果是3,4,5?我觉得应该是3,4。如教程中所述,此表达式在x==3时为真,并一直为真,直到x==5。如果“5”的计算结果为false,如何打印它?谁能为我澄清一下? 最佳答案 来自“TheRubyProgrammingLanguage”的重要链接是:4.6.9.1Booleanflip-flopsWhenthe..and...operatorsareusedinaconditional,suchasanifstat
我想为网站的管理和公共(public)部分设置一对样式指南。每个都需要自己的布局,其中包含静态html和调用erbpartials的混合(因此静态页面不会削减它)。我不需要Controller来为这些页面提供服务,而且我不希望有效的仅开发内容使其余代码困惑。这让我想知道是否有一种方法可以直接呈现布局。免责声明:我明白这不是我应该经常/永远做的事情,而且我知道有很多争论可以解释为什么这是一个坏主意。我对这是否可能感兴趣。有没有办法让我直接从routes.rb渲染布局而不通过Controller? 最佳答案 出于某种奇怪的原因,我想暂时
这个问题在这里已经有了答案:differentlayoutforsign_inactionindevise(8个答案)关闭7年前。如何更改设计Controller中的布局?
在我的routes.rb文件中,我想使用rails3中的子域约束功能,但是我想从catchall路由中排除某些域。我不想在特定的子域中有特定的Controller。这样做的最佳做法是什么。#thissubdomainidontwantallofthecatchallroutesconstraints:subdomain=>"signup"doresources:usersend#hereIwanttocatchallbutexcludethe"signup"subdomainconstraints:subdomain=>/.+/doresources:carsresources:sta