Container可以簡(jiǎn)單的看成iOS中的view,可以設(shè)置大小措左、背景色依痊、添加child等,它是一個(gè)集合控件怎披,有好多基礎(chǔ)控件結(jié)合而成胸嘁。
其中的margin用來(lái)設(shè)置它到父視圖邊框的距離瓶摆;
使用padding來(lái)設(shè)置他的child距離自己邊框的距離;
使用了padding來(lái)影響child后性宏,則無(wú)法再使用child(例如MaterialButton)的height群井、minWidth設(shè)置child本身的寬高。
但是不使用padding毫胜,child會(huì)直接充滿(mǎn)Container书斜,即使你設(shè)置了child的height、minWidth指蚁。
結(jié)論菩佑,被Container包圍的child無(wú)法設(shè)置寬高自晰,只能通過(guò)設(shè)置padding來(lái)間接的設(shè)置凝化。但是單獨(dú)使用的child又無(wú)法設(shè)置距離父控件的距離,只能再想想其他辦法酬荞。
下面貼出測(cè)試代碼搓劫,初學(xué)者可以勉強(qiáng)瞅幾眼。
//第二個(gè)頁(yè)面
import 'package:flutter/material.dart';
class lastPageClass extends StatefulWidget
{
@override
State<StatefulWidget> createState() {
// TODO: implement createState
return lastPageClassState();
}
}
class lastPageClassState extends State<lastPageClass>
{
@override
Widget build(BuildContext context) {
//頁(yè)面的框架
return Scaffold(
backgroundColor: Colors.orange[100],
appBar: AppBar(
title: Text('來(lái)了老弟混巧,第二頁(yè)'),
),
//承接所有小view的基礎(chǔ)view枪向。Container1
body: Container(
margin: EdgeInsets.all(30.0),
color: Colors.orange,
//設(shè)置具有能容納多個(gè)child的widget,column:豎著排列child咧党。row:橫著排列child秘蛔。
//這里不能稱(chēng)它為view,因?yàn)樗旧聿痪邆淅L制的能力傍衡,只具備布局的能力深员。
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
//Container2
Container(
//設(shè)置本身(Container2)到父視圖(Container1)的距離,
margin: EdgeInsets.fromLTRB(50, 20, 0, 0),
width: 100,
height: 100,
color: Colors.blue,
child: Text("咖啡店打卡機(jī)看風(fēng)景,的來(lái)看撒嬌瘋狂倒計(jì)時(shí)"),
),
//Container默認(rèn)是透明的
Container(
margin: EdgeInsets.all(10),
width: 150,
height: 150,
color: Colors.white,
padding: EdgeInsets.all(50),
child: MaterialButton(
onPressed: logprint,
height: 90,
minWidth: 100,
child: Text("lllll"),
color: Colors.blue,
textColor: Colors.white,
disabledTextColor: Colors.black,
)
),
MaterialButton(
onPressed: logprint,
child: Text("ddddd"),
color: Colors.blue,
textColor: Colors.white,
disabledTextColor: Colors.black,
height: 40,
minWidth: 50,
),
Container(
margin: EdgeInsets.fromLTRB(50, 0, 0, 0),
color: Colors.green,
child: Row(
children: <Widget>[
Image.network("https://img02.sogoucdn.com/app/a/100520024/2b6acc84f93b40d33eba7c6be37efea7",
width: 50,height: 100,
),
Text("辣雞flutter")
],
),
)
],
),
),
);
}
void logprint(){
print("kkk");
}
}
flutter的語(yǔ)法對(duì)于iOS開(kāi)發(fā)者來(lái)說(shuō)真是難受蛙埂。
因?yàn)殚_(kāi)始不熟悉其他的基礎(chǔ)控件倦畅,無(wú)法根據(jù)自己的需求去組合基礎(chǔ)控件實(shí)現(xiàn)自己的view比如位置大小什么的,所以有個(gè)粗魯?shù)霓k法就是绣的,全部用Container來(lái)包裝視圖叠赐, 哈哈。雖然好多人說(shuō)屡江,使用更加基礎(chǔ)的控件來(lái)實(shí)現(xiàn)視圖可以獲得更好的性能芭概,但是大多數(shù)時(shí)候,為了盡快完成工作惩嘉,誰(shuí)又愿意去從一個(gè)個(gè)基礎(chǔ)控件去組合呢罢洲?
這里對(duì)比iOS原生有個(gè)很大的疑問(wèn)就是,為什么flutter還不去全力開(kāi)發(fā)適合開(kāi)發(fā)者的好用的組合控件宏怔?難道需要每個(gè)開(kāi)發(fā)者都去自己組裝自己的小控件奏路?這會(huì)不會(huì)造成很大時(shí)間和資源的浪費(fèi)呢畴椰?畢竟造輪子這種事并不是每個(gè)人都喜歡做的(其實(shí)就是懶,哈哈)鸽粉。
還有一個(gè)讓人很煩的事就是斜脂,一個(gè)Container只能有一個(gè)child,然后需要在child中再去包含其他的child或者children的集合触机。被OC的歸整和優(yōu)雅養(yǎng)習(xí)慣了帚戳,猛地一看真是惡心壞了,很久適應(yīng)不了儡首,包括這種一層一層又一層的嵌套片任,簡(jiǎn)直相死的心都有。之前沒(méi)有做過(guò)前端的開(kāi)發(fā)蔬胯,可能前端本來(lái)就是這種風(fēng)格的代碼組合方式对供,習(xí)慣了也就不覺(jué)得丑不丑了吧,哈哈氛濒。
還有各種控件的frame产场、錨點(diǎn)問(wèn)題,各種設(shè)置方法往那一堆全給你舞竿,感覺(jué)亂曹曹一團(tuán)京景,頭大的不行,感覺(jué)對(duì)于開(kāi)發(fā)者特別是初學(xué)者不太友好骗奖,難受确徙。
可能是剛接觸不久,還沒(méi)有找到更加優(yōu)雅的組合flutter代碼的方式执桌,希望后面會(huì)有驚喜鄙皇。