Flutter筆記(慕課網(wǎng))

原作者:Andings
版權(quán)聲明:本文版權(quán)歸本人所有浪默,未經(jīng)作者許可淌铐,不得以任何形式轉(zhuǎn)載

簡介

Flutter學(xué)習(xí)筆記,學(xué)習(xí)途徑包括但不僅限于:Flutter官網(wǎng)陷揪、慕課網(wǎng)、掘金/簡書平臺杂穷。

學(xué)習(xí)編寫第一個Flutter程序

import 'package:flutter/material.dart';

void main() => runApp(HelloWorld());

class HelloWorld extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return new MaterialApp(
      title: "第一個Flutter應(yīng)用",
      home: new Scaffold(
        appBar: new AppBar(
          title: new Text("第一個Flutter應(yīng)用"),
        ),
        body: new Center(
          child: new Text("Hello World!"),
        ),
      ),
    );
  }
}

思路:

我們首先創(chuàng)建一個HelloWorld類悍缠,讓他繼承自StatelessWidget(玄冥二老之一的widget)

StatelessWidget是我們開發(fā)Flutter中最核心的Widget,stateless意思為狀態(tài)不可改變的Widget,我們常常用來寫一些靜態(tài)頁面耐量,也就是狀態(tài)不需要改變的頁面肯定繼承它了飞蚓,與之對應(yīng)的就是狀態(tài)可以改變的組件視圖StatefullWidget,這兩大組件是Flutter開發(fā)中玄冥二老。

在源碼中是StatelessWidget是一個抽象類廊蜒,子類繼承的話必須實現(xiàn)方法bulid(),返回的是一個Widget對象趴拧,這完全符合開發(fā)思想,既然是不可改變的視圖山叮,那我們直接返回一個組件Widget即可(它總是顯示該Widget)著榴,其他的我們并不需要要關(guān)心,比如視圖改變的情況...

ok,既然build()方法需要我們返回一個Widget屁倔,我們該返回哪一個兄渺?Flutter一切皆組件(所有的視圖都是繼承Widget),是不是返回任意的widget就可以呢汰现?顯然并不是挂谍,這時我們需要返回一個MaterialApp,這是谷歌建議我們遵循Material的風(fēng)格規(guī)范來編寫界面瞎饲,所以口叙,界面上看到都是在MaterialApp中定義的。

MaterialApp是顯示的核心類嗅战,其中常用的屬性有:title和home,其中title是標(biāo)題的意思妄田,直接給一個字符串就好了。

title: 'helloWorld'

我們重點關(guān)心home屬性,Ctrl+鼠標(biāo)左鍵可以查看需要返回什么驮捍,What?疟呐,又是返回Widget?這里將返回一個非常重要的Widget———腳手架Widget,它才是真正是顯示組件,其中定義appBar以及頁面中顯示什么东且,這里用到的屬性標(biāo)簽:appBar和body

 home: Scaffold(
        appBar: new AppBar(
          title: new Text('TextWidget'),
        ),
        body: new Center(
          child: Text('HelloWorld'),
        ),
      ),

其中启具,appBar里面又有很多屬性,title表明appBar上顯示的文本內(nèi)容珊泳,當(dāng)然還有其他屬性

body表明頁面主題將顯示哪種視圖鲁冯,需要返回的依舊是Widget對象拷沸,這里Center組件表明,內(nèi)容將顯示在視圖中心區(qū)域薯演,然后又是嵌套撞芍,定義Center中的屬性......

總結(jié):
StatelessWidget、build()跨扮、MaterialApp->title->home序无、腳手架Scaffold、appBar衡创、body愉镰、Center->child

  1. 首先繼承StatelessWidget抽象類,實現(xiàn)bulid方法
  2. return一個MaterialApp
  3. 定義App內(nèi)的title,和home
  4. home屬性需要返回腳手架Scaffold組件
  5. 腳手架定義appBar和body屬性钧汹,appBar中定義text,body中創(chuàng)建Center
  6. 在Center居中組件中丈探,利用child屬性,返回一個TextWidget拔莱,用來顯示內(nèi)容

TextWidget

作用:顯示一段文本在界面上碗降,類似于Android中的TextView控件
TextWidget常用屬性有:

  • TextAlig:文本對齊屬性
  • maxLines:最大顯示行數(shù)
  • overflow:控制文本溢出效果

如何控制字體大小,樣式塘秦?textWidget為我們提供了style標(biāo)簽來控制

style: TextStyle(
        fontSize: 20.0,
        color:Color.fromARGB(255, 255, 150, 150),
        decorationStyle: TextDecorationStyle.solid,
        decoration: TextDecoration.underline
        ),

ContainerWidget容器

作用:可以用來放置多個子組件讼渊,類似于Android中的布局Layout,可以對子元素進行布局操作。

常用屬性:

  • alignment:子控件對齊方式尊剔,例如:頂部居中alignment: Alignment.topCenter
  • width:控件的寬
  • height: 控件的高
  • color:控件的背景樣色 例如color: Colors.blue,
  • padding:內(nèi)間距
  • margin:外間距
  • decoration:設(shè)置容器邊框
new Container(
            child: new Text('Hello World',
            style: TextStyle(fontSize: 40),
            ),
            alignment: Alignment.center,
            width: 200.0,
            height: 400.0,
            color: Colors.blue,
            padding: EdgeInsets.all(50) ,
            margin: EdgeInsets.all(50),
          ),

圖片組件ImageWidget

圖片的顯示是任何一個應(yīng)用不可或缺的一部分爪幻,圖片比文字更有吸引力,F(xiàn)lutter也為我們提供了非常方便快捷的api须误。

圖片的獲取途徑挨稿?

  • Image asset:加載本地圖片資源,會使打包體積變大
  • Image.network:網(wǎng)絡(luò)資源圖片京痢,需要經(jīng)常更換或者需要動態(tài)顯示的圖片
  • Image file:本地圖片奶甘,例如:相機中的圖片...
  • Image memory:加載到內(nèi)存中的圖片,Uint8List,不常用

這里我們介紹一下常用的網(wǎng)絡(luò)圖片加載:

代碼演示

child: new Image.network(
            'https://img3.mukewang.com/5c1677390001169809600960-140-140.jpg',
            scale: 1.5,
            fit: BoxFit.fill,
          ),

直接new 一個Image.network即可,默認(rèn)需要一個url屬性值即可加載圖片
常用屬性值:

  • scale: 圖片的縮放
  • fit: 相對于父容器祭椰,圖片拉伸或填充

列表組件ListView

列表組件是我們開發(fā)中用的最多的組件之一臭家,F(xiàn)lutter為我們提供了非常方便的Api調(diào)用,我們并不需要關(guān)系性能問題方淤,直接使用即可钉赁。
這里我們演示一個簡單的例子:

new ListView(
          children: <Widget>[
            new ListTile(
              leading: new Icon(Icons.access_time),
              title: new Text('你好'),
            ),
            new Image.network("https://img3.mukewang.com/5c1677390001169809600960-140-140.jpg"),
            new Image.network("https://img3.mukewang.com/5c1677390001169809600960-140-140.jpg"),
            new Image.network("https://img3.mukewang.com/5c1677390001169809600960-140-140.jpg"),
          ],
        )

new出一個ListView組件后,利用child屬性携茂,返回一個Widget數(shù)組你踩,數(shù)組中的組件將是ListView的數(shù)據(jù)源,我們可以隨意添加Widget,圖片文字都可以。

為了方便每個Widget的組合姓蜂,我們可以使用ListTile這個組件,他是ListView的小瓦片医吊,相當(dāng)于每一個Item钱慢,我,額可以再這個組件中組合圖片或者文字卿堂,這樣每一個listItem就是一個圖片和文字的組合了束莫。

1.ListView動態(tài)(通過傳參的方式)

剛剛只是一個list靜態(tài)列表,數(shù)據(jù)都是寫死的草描,我們現(xiàn)在來做一個動態(tài)的列表览绿,也就是說數(shù)據(jù)是不確定的,由服務(wù)端或者后端傳遞過來的穗慕,我們得到數(shù)據(jù)然后傳遞到列表當(dāng)中進行顯示饿敲,這就涉及到數(shù)據(jù)的傳遞知識,屬于Dart的基礎(chǔ)知識逛绵,我們一起來了解一下怀各。

構(gòu)造器:我們知道在初始化一個類的時候,默認(rèn)是調(diào)用無參的構(gòu)造器术浪,當(dāng)然我們也可以手動添加有參數(shù)的構(gòu)造器瓢对,可以在初始化的時候可以傳參,所以我們在構(gòu)造器中聲明形參來接收傳遞過來的參數(shù)胰苏,下面來看實例:

void main() => runApp(
    //這里在初始化對象時硕蛹,傳遞了一個參數(shù)
  new ListViews(items: new List<String>.generate(1000, (i) => "Item $i")));
  
  class ListViews extends StatelessWidget {
  
  final List<String> items;

  //構(gòu)造器接收參數(shù)
  ListViews({Key key, @required this.items}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return new MaterialApp(
      title: "dad",
      home: new Scaffold(
        appBar: new AppBar(
          title: new Text('ListView'),
        ),
        body: new ListView.builder(
            itemCount: items.length,
            itemBuilder: (context, index) {
              return new ListTile(title: new Text('${items[index]}'));
            }),
      ),
    );
  }
}

可以看到,我們在new的時候硕并,傳遞了一個List對象給構(gòu)造器法焰,通過List的generate方法快速生成一個1000大小的列表。
然后在類的構(gòu)造器中去接收到這個List參數(shù)倔毙,然后給類的ListView組件使用壶栋,達(dá)到動態(tài)數(shù)據(jù),list的數(shù)據(jù)源是由外部接受的的普监,這樣我們的ListView數(shù)據(jù)將會非常靈活贵试。

2.橫向列表的使用

橫向列表顧名思義就是,可以通過水平方向進行一個列表的滑動凯正,左右滑動列表Item毙玻,即可瀏覽ListView的數(shù)據(jù)了。

scrollDirection屬性的使用

  • Axis.vertical:垂直方向
  • Axis.horizontal 水平方向

非常簡單廊散,我們直接修改屬性值就可以完成不同方向的ListView
附上完整代碼:


import 'package:flutter/material.dart';

void main() => runApp(new HorizontalList());

class HorizontalList extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return new MaterialApp(
      home: new Scaffold(
        appBar: new AppBar(
          title: new Text('橫向list'),
        ),
        body: new Center(
          child: new Container(
            height: 200.0,
            child: new MyList()
          ),
        ),
      ),
    );
  }
}

//簡化代碼 提取出來單獨
class MyList extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return new ListView(
      scrollDirection: Axis.horizontal,
      children: <Widget>[
        new Container(
          width: 180.0,
          color: Colors.amber,
        ),
        new Container(
          width: 180.0,
          color: Colors.cyanAccent,
        ),new Container(
          width: 180.0,
          color: Colors.deepOrange,
        ),new Container(
          width: 180.0,
          color: Colors.amber,
        ),new Container(
          width: 180.0,
          color: Colors.lightBlue,
        ),
      ],
    );
  }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末桑滩,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子允睹,更是在濱河造成了極大的恐慌运准,老刑警劉巖幌氮,帶你破解...
    沈念sama閱讀 211,042評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異胁澳,居然都是意外死亡该互,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評論 2 384
  • 文/潘曉璐 我一進店門韭畸,熙熙樓的掌柜王于貴愁眉苦臉地迎上來宇智,“玉大人,你說我怎么就攤上這事胰丁∷骈伲” “怎么了?”我有些...
    開封第一講書人閱讀 156,674評論 0 345
  • 文/不壞的土叔 我叫張陵锦庸,是天一觀的道長机蔗。 經(jīng)常有香客問我,道長甘萧,這世上最難降的妖魔是什么蜒车? 我笑而不...
    開封第一講書人閱讀 56,340評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮幔嗦,結(jié)果婚禮上酿愧,老公的妹妹穿的比我還像新娘。我一直安慰自己邀泉,他們只是感情好嬉挡,可當(dāng)我...
    茶點故事閱讀 65,404評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著汇恤,像睡著了一般庞钢。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上因谎,一...
    開封第一講書人閱讀 49,749評論 1 289
  • 那天基括,我揣著相機與錄音,去河邊找鬼财岔。 笑死风皿,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的匠璧。 我是一名探鬼主播桐款,決...
    沈念sama閱讀 38,902評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼夷恍!你這毒婦竟也來了魔眨?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,662評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎遏暴,沒想到半個月后侄刽,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,110評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡朋凉,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年州丹,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片侥啤。...
    茶點故事閱讀 38,577評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡当叭,死狀恐怖茬故,靈堂內(nèi)的尸體忽然破棺而出盖灸,到底是詐尸還是另有隱情,我是刑警寧澤磺芭,帶...
    沈念sama閱讀 34,258評論 4 328
  • 正文 年R本政府宣布赁炎,位于F島的核電站,受9級特大地震影響钾腺,放射性物質(zhì)發(fā)生泄漏徙垫。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,848評論 3 312
  • 文/蒙蒙 一放棒、第九天 我趴在偏房一處隱蔽的房頂上張望姻报。 院中可真熱鬧,春花似錦间螟、人聲如沸吴旋。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽荣瑟。三九已至,卻和暖如春摩泪,著一層夾襖步出監(jiān)牢的瞬間笆焰,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評論 1 264
  • 我被黑心中介騙來泰國打工见坑, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留嚷掠,地道東北人。 一個月前我還...
    沈念sama閱讀 46,271評論 2 360
  • 正文 我出身青樓荞驴,卻偏偏與公主長得像叠国,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子戴尸,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,452評論 2 348

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