Flutter入門|(三)基礎(chǔ)控件

上篇文章講解了兩種Widget熔吗,這篇文章主要講解一下常用的基礎(chǔ)控件的使用方法姆钉。

圖片

主要包含Image吆倦、Icon听诸、RawImageAssetBundle蚕泽。

以下以Image的講解為例晌梨。

Image

Object -> Diagnosticable -> DiagnosticableTree -> Widget -> StatefulWidget -> Image

A widget that displays an image.
一個(gè)顯示圖片的widget

Image類似于Android中的ImageView桥嗤,它主要負(fù)責(zé)在界面上展示一張圖片,圖片的來(lái)源可以是網(wǎng)絡(luò)仔蝌、文件泛领、資源和內(nèi)存,它們對(duì)應(yīng)的構(gòu)造函數(shù)分別是:

Image.asset(name);
Image.file(file);
Image.memory(bytes);
Image.network(src);

下面以加載一張網(wǎng)絡(luò)圖片為例:

class ImageWidget extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Image.network(
      "https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1547144228723&di=702d9b2eb198bbd796c5af4252fd6b9c&imgtype=0&src=http%3A%2F%2Fp3.ifengimg.com%2F2019_01%2FC238CA978AEA9E97961FE9D02DDDDDBEF79E5C8C_w1270_h679.jpg",
      width: 360.0,
      height: 200.0,
    );
  }
}

文本

文本W(wǎng)idget包括Text敛惊、RichText渊鞋。文本樣式有DefaultTextStyle

以下以Text的講解為例瞧挤。

Text

Object -> Diagnosticable -> DiagnosticableTree -> Widget -> StatelessWidget -> Text

A run of text with a single style.
單一樣式/格式的文本

下面給出一個(gè)最簡(jiǎn)單的Text實(shí)現(xiàn):

class TextWidget extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Text("這是Text的內(nèi)容");
  }
}

以上使用的是Text的默認(rèn)樣式锡宋,實(shí)際應(yīng)用場(chǎng)景中,我們大多需要自定義TextStyle特恬,自定義文本樣式执俩,實(shí)現(xiàn)如下:

class TextWidget extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Text(
      "這是Text的內(nèi)容",
      style: TextStyle(
        color: Colors.red,
        fontSize: 18.0,
        fontWeight: FontWeight.bold
      ),
    );
  }
}

按鈕

Flutter中的按鈕包括FlatButtonRaisedButton鸵鸥、FloatingActionButton奠滑、IconButtonPopupMenuButton以及ButtonBar等妒穴。

以下以FlatButton和RaisedButton的講解為例宋税。

FlatButton

Object -> Diagnosticable -> DiagnosticableTree -> Widget -> StatelessWidget -> MaterialButton -> FlatButton

A material design "flat button".
一個(gè)扁平的Material按鈕

class FlatButtonWidget extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    var flatBtn = FlatButton(
      onPressed: () => print('FlatButton pressed'),
      child: Text('FlatButton'),
    );
    return flatBtn ;
  }
}

RaisedButton

Object -> Diagnosticable -> DiagnosticableTree -> Widget -> StatelessWidget -> MaterialButton -> RaisedButton

A material design "raised button".
Material Design中的button, 一個(gè)凸起的材質(zhì)矩形按鈕

class RaisedButtonWidget extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    var raisedButton = RaisedButton(
      onPressed: () => print('RaisedButton pressed'),
      child: Text('RaisedButton'),
    );
    return raisedButton;
  }
}

輸入框和選擇框

常見(jiàn)的輸入框和選擇框有TextField讼油、Checkbox杰赛、RadioSwitch矮台、Slider乏屯、Date & Time Pickers

以下以TextField的講解為例瘦赫。

TextField

Object -> Diagnosticable -> DiagnosticableTree -> Widget -> StatefulWidget -> TextField

A material design text field.
一個(gè)Material Design風(fēng)格的文本輸入框

TextField的實(shí)現(xiàn)需要設(shè)置一個(gè) controller辰晕,用于獲取用戶輸入的文本。

class TextFieldWidget extends StatefulWidget {
  @override
  State createState() {
    return _TextFieldState();
  }
}

class _TextFieldState extends State<TextFieldWidget> {
  var editingController = TextEditingController();

  @override
  Widget build(BuildContext context) {
    // Row确虱、Expand 都是用于布局的控件含友,這里可以先忽略它們
    return Row(
      children: <Widget>[
        Expanded(
          child: TextField(
            controller: editingController,
          ),
        ),
        RaisedButton(
          child: Text("RaisedButton"),
          onPressed: () => print('您輸入了: ${editController.text}'),
        )
      ],
    );
  }

  @override
  void dispose() {
    super.dispose();
    // 手動(dòng)調(diào)用 controller 的 dispose 方法以釋放資源
    editingController.dispose();
  }
}

對(duì)話框、Alert校辩、Panel

包括SimpleDialog窘问、AlertDialogBottomSheet宜咒、ExpansionPanel惠赫、SnackBar

以下以AlertDialog的講解為例故黑。

AlertDialog

Object -> Diagnosticable -> DiagnosticableTree -> Widget -> StatelessWidget -> AlertDialog

A material design alert dialog.
一個(gè)會(huì)中斷用戶操作的對(duì)話框儿咱,需要用戶確認(rèn)

class _TextFieldState extends State<TextFieldWidget> {
  var editingController = TextEditingController();

  @override
  Widget build(BuildContext context) {
    return Row(
      children: <Widget>[
        Expanded(
          child: TextField(
            controller: editingController,
          ),
        ),
        RaisedButton(
          child: Text("click"),
          onPressed: () {
            showDialog(
                // 第一個(gè) context 是參數(shù)名庭砍,第二個(gè) context 是 State 的成員變量
                context: context,
                builder: (_) {
                  return AlertDialog(
                    // dialog 的內(nèi)容
                    content: Text(editingController.text),
                    // actions 設(shè)置 dialog 的按鈕
                    actions: <Widget>[
                      FlatButton(
                        child: Text('確認(rèn)'),
                        // 用戶點(diǎn)擊按鈕后,關(guān)閉彈框
                        onPressed: () => Navigator.pop(context),
                      )
                    ],
                  );
                }
            );
          }
        )
      ],
    );
  }

  @override
  void dispose() {
    super.dispose();
    editingController.dispose();
  }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末概疆,一起剝皮案震驚了整個(gè)濱河市逗威,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌岔冀,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,941評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件概耻,死亡現(xiàn)場(chǎng)離奇詭異使套,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)鞠柄,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門侦高,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人厌杜,你說(shuō)我怎么就攤上這事奉呛。” “怎么了夯尽?”我有些...
    開(kāi)封第一講書人閱讀 165,345評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵瞧壮,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我匙握,道長(zhǎng)咆槽,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 58,851評(píng)論 1 295
  • 正文 為了忘掉前任圈纺,我火速辦了婚禮秦忿,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘蛾娶。我一直安慰自己灯谣,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布蛔琅。 她就那樣靜靜地躺著胎许,像睡著了一般。 火紅的嫁衣襯著肌膚如雪揍愁。 梳的紋絲不亂的頭發(fā)上呐萨,一...
    開(kāi)封第一講書人閱讀 51,688評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音莽囤,去河邊找鬼谬擦。 笑死,一個(gè)胖子當(dāng)著我的面吹牛朽缎,可吹牛的內(nèi)容都是我干的惨远。 我是一名探鬼主播谜悟,決...
    沈念sama閱讀 40,414評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼北秽!你這毒婦竟也來(lái)了葡幸?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 39,319評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤贺氓,失蹤者是張志新(化名)和其女友劉穎蔚叨,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體辙培,經(jīng)...
    沈念sama閱讀 45,775評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蔑水,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了扬蕊。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片搀别。...
    茶點(diǎn)故事閱讀 40,096評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖尾抑,靈堂內(nèi)的尸體忽然破棺而出歇父,到底是詐尸還是另有隱情,我是刑警寧澤再愈,帶...
    沈念sama閱讀 35,789評(píng)論 5 346
  • 正文 年R本政府宣布榜苫,位于F島的核電站,受9級(jí)特大地震影響践磅,放射性物質(zhì)發(fā)生泄漏单刁。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評(píng)論 3 331
  • 文/蒙蒙 一府适、第九天 我趴在偏房一處隱蔽的房頂上張望羔飞。 院中可真熱鬧,春花似錦檐春、人聲如沸逻淌。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,993評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)卡儒。三九已至,卻和暖如春俐巴,著一層夾襖步出監(jiān)牢的瞬間骨望,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,107評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工欣舵, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留擎鸠,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,308評(píng)論 3 372
  • 正文 我出身青樓缘圈,卻偏偏與公主長(zhǎng)得像劣光,于是被迫代替她去往敵國(guó)和親袜蚕。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容