第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

創(chuàng)建窗口小部件的函數(shù)和類有什么區(qū)別?

創(chuàng)建窗口小部件的函數(shù)和類有什么區(qū)別?

楊__羊羊 2019-11-26 11:06:43
我已經(jīng)意識(shí)到,可以使用普通函數(shù)創(chuàng)建小部件,而不是將StatelessWidget子類化。一個(gè)例子是這樣的:Widget function({ String title, VoidCallback callback }) {  return GestureDetector(    onTap: callback,    child: // some widget  );}這很有趣,因?yàn)樗枰h(yuǎn)遠(yuǎn)比一個(gè)全面的類更少的代碼。例:class SomeWidget extends StatelessWidget {  final VoidCallback callback;  final String title;  const SomeWidget({Key key, this.callback, this.title}) : super(key: key);  @override  Widget build(BuildContext context) {      return GestureDetector(        onTap: callback,        child: // some widget      );  }}所以我一直在想:創(chuàng)建小部件的函數(shù)和類之間在語法上是否有區(qū)別?使用函數(shù)是否是一種好習(xí)慣?
查看完整描述

3 回答

?
手掌心

TA貢獻(xiàn)1942條經(jīng)驗(yàn) 獲得超3個(gè)贊

永遠(yuǎn)不要在類上使用函數(shù)來制作可重用的widget-tree。始終將它們提取到StatelessWidget中。


使用函數(shù)而不是使用類之間存在巨大差異,即:框架不知道函數(shù),但可以看到類。


考慮以下“窗口小部件”功能:


Widget functionWidget({ Widget child}) {

  return Container(child: child);

}

用這種方式:


functionWidget(

  child: functionWidget(),

);

它相當(dāng)于類:


class ClassWidget extends StatelessWidget {

  final Widget child;


  const ClassWidget({Key key, this.child}) : super(key: key);


  @override

  Widget build(BuildContext context) {

    return Container(

      child: child,

    );

  }

}

這樣使用:


new ClassWidget(

  child: new ClassWidget(),

);

在紙上,兩者似乎做的完全一樣:創(chuàng)建2 Container,一個(gè)嵌套在另一個(gè)中。但是實(shí)際情況略有不同。


對(duì)于函數(shù),生成的窗口小部件樹如下所示:


Container

  Container

在使用類時(shí),小部件樹為:


ClassWidget

  Container

    ClassWidget

      Container

這非常重要,因?yàn)樗鼜母旧细淖兞烁滦〔考r(shí)框架的行為。以下是精選的差異列表:


類:


允許性能優(yōu)化(const構(gòu)造函數(shù),operator ==覆蓋,更精細(xì)的重建)

有熱裝

集成到小部件檢查器(debugFillProperties)

可以定義鍵

可以使用上下文API

確保所有小部件都以相同的方式使用(始終是構(gòu)造函數(shù))

確保在兩個(gè)不同的布局之間進(jìn)行切換可以正確處理資源(功能可以重用某些先前的狀態(tài))

功能:


更少的代碼(甚至在那里,我都制作了代碼生成器以使類與函數(shù)一樣小:functional_widget)

?

結(jié)論應(yīng)該已經(jīng)很清楚了:


不要使用函數(shù)創(chuàng)建小部件。


查看完整回答
反對(duì) 回復(fù) 2019-11-26
?
慕慕森

TA貢獻(xiàn)1856條經(jīng)驗(yàn) 獲得超17個(gè)贊

調(diào)用Flutter小部件時(shí),請(qǐng)確保使用const關(guān)鍵字。例如const MyListWidget();


查看完整回答
反對(duì) 回復(fù) 2019-11-26
  • 3 回答
  • 0 關(guān)注
  • 549 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)