国产亚洲欧美人成在线,免费视频爱爱太爽了无码,日本免费一区二区三区高清视频 ,国产真实伦对白精彩视频

歡迎您光臨深圳塔燈網(wǎng)絡(luò)科技有限公司!
電話圖標(biāo) 余先生:13699882642

網(wǎng)站百科

為您解碼網(wǎng)站建設(shè)的點(diǎn)點(diǎn)滴滴

Flutter 組件化編程

發(fā)表日期:2018-12 文章編輯:小燈 瀏覽次數(shù):2414

組件化編程就像是搭積木一樣的開(kāi)發(fā)。把整個(gè)應(yīng)用拆分成許多部分,每部分各自管理自己的組件以及數(shù)據(jù)狀態(tài),這樣達(dá)到一個(gè)更好的可維護(hù)性,可擴(kuò)展性。

對(duì)于組件來(lái)說(shuō),大致會(huì)分為幾個(gè)類型的組件:

  • 展示組件:展示型組件并不維護(hù)數(shù)據(jù)狀態(tài),它更多的作用是用來(lái)展示效果與數(shù)據(jù)。
  • 容器組件:容器組件并不涉及 UI 方面,而是負(fù)責(zé)處理數(shù)據(jù)與狀態(tài)。
  • 布局組件:特定的布局方式,建議是把它們封裝成一個(gè)布局組件。
  • 頁(yè)面組件:頁(yè)面組件負(fù)責(zé)當(dāng)前頁(yè)面的組件結(jié)構(gòu)。因?yàn)橐粋€(gè)頁(yè)面是由很多組件組成的,它們的數(shù)據(jù)關(guān)系如何?布局如何?都是在頁(yè)面組件上處理。

狀態(tài)(State)

前面說(shuō)了 Flutter 借鑒 React,定義出了一套 Widget。因此在 Widget 里也有 State 的概念。

在 React 里的 State 的作用同樣也適用與 Flutter。

class StateWrap extends StatefulWidget { @override createState() => new MyComponent(); }class MyComponent extends State<StateWrap> { String text = 'Hello, world!';@override Widget build(BuildContext context) { return new Center( child: new Text(this.text), ); } } 

有一點(diǎn)需要注意的,首先需要一個(gè)編寫(xiě)一個(gè)包裝類,它繼承至 StatefulWidget,實(shí)現(xiàn) createState 方法。

在 Dart 里,帶下劃線開(kāi)頭的變量是私有變量,一般會(huì)把 State 設(shè)置為私有變量。其外在類的屬性是可以不使用 this 的。對(duì)于 State 的更新,F(xiàn)lutter 也是使用 setState。不同的是,setState 接受的不是對(duì)象,而是一個(gè)回調(diào)函數(shù),在這個(gè)回調(diào)函數(shù)里對(duì) State 的更改會(huì)直接響應(yīng)式的影響 UI。

class StateWrap extends StatefulWidget { @override createState() => new MyComponent(); }class MyComponent extends State<StateWrap> { String _text = 'Hello, world!';void update() { // 更新 State this.setState(() { _text = 'Hello'; }); }@override Widget build(BuildContext context) { return new Center( child: new Text(_text), ); } }

屬性(Props)

在 React 里有 Props 的概念,同樣的在 Flutter 也有 Props 的概念。State 與 Props 是可以共存的,因?yàn)?State 需要使用一個(gè) StatefulWidget 包裝,因此會(huì)比較麻煩。

Props 的定義在 StatefulWidget 里定義,并且在 createState 里傳遞。在 State 里通過(guò) widget.xxx 獲取值。

class StateWrap extends StatefulWidget { final String title; final Function onPress; StateWrap({this.title, this.onPress});@override createState() => new MyComponent(title: title, onPress: onPress); }class MyComponent extends State<StateWrap> { // props 從 widget.xxx 獲取 @override Widget build(BuildContext context) => new Center( child: new Column( children: <Widget>[ new Text(widget.title), new FlatButton(child: const Text('Press'), onPressed: widget.onPress), ], ), ); } 

使用的時(shí)候,也非常的簡(jiǎn)單。

new MyComponent(title: 'abc', onPress: () { // ... }) 

在 React 里,遍歷數(shù)組的時(shí)候,通常會(huì)有一些上下文信息傳遞給事件,同樣在 Flutter 也是如此類似。

onPressed: () => this.onPress(this.title) 

本頁(yè)內(nèi)容由塔燈網(wǎng)絡(luò)科技有限公司通過(guò)網(wǎng)絡(luò)收集編輯所得,所有資料僅供用戶學(xué)習(xí)參考,本站不擁有所有權(quán),如您認(rèn)為本網(wǎng)頁(yè)中由涉嫌抄襲的內(nèi)容,請(qǐng)及時(shí)與我們聯(lián)系,并提供相關(guān)證據(jù),工作人員會(huì)在5工作日內(nèi)聯(lián)系您,一經(jīng)查實(shí),本站立刻刪除侵權(quán)內(nèi)容。本文鏈接:http://jstctz.cn/17590.html
相關(guān)APP開(kāi)發(fā)