【Flutter】基礎(chǔ)組件【07】Appbar

1. 寫在前面

上篇文章中介紹了Flutter中的Image組件强窖,今天繼續(xù)學(xué)習(xí)【Flutter】基礎(chǔ)組件中的Appbar組件胰舆。

flutter.jpeg
  • 基礎(chǔ)語(yǔ)法合集

【Flutter】Dart中的var、final 和 const基本使用

【Flutter】Dart數(shù)據(jù)類型之num

【Flutter】Dart數(shù)據(jù)類型之String

【Flutter】Dart的數(shù)據(jù)類型list&Map(數(shù)組和字典)

【Flutter】Dart的方法與箭頭函數(shù)

【Flutter】Dart的方法中的可選參數(shù)逗威、方法作為參數(shù)傳遞

【Flutter】Dart中的匿名函數(shù)构眯、閉包

【Flutter】Dart中的類和對(duì)象

【Flutter】Dart中的構(gòu)造函數(shù)

【Flutter】Dart的工廠構(gòu)造方法&單例對(duì)象&初始化列表

【Flutter】Dart的類方法和對(duì)象操作符

【Flutter】Dart中的繼承

【Flutter】Dart中的抽象類和接口

【Flutter】Dart中的Mixins混入你知道是什么嗎寥裂?

  • [基礎(chǔ)組件合集]

【Flutter】基礎(chǔ)組件【01】Text

【Flutter】基礎(chǔ)組件【02】Container

【Flutter】基礎(chǔ)組件【03】Scaffold

【Flutter】基礎(chǔ)組件【04】Row/Column

【Flutter】基礎(chǔ)組件【05】Icon

【Flutter】基礎(chǔ)組件【06】Image

2. Appbar

類似于我們iOS里面的導(dǎo)航欄,可以設(shè)置title赖捌,左右action祝沸,

一個(gè)Material Design應(yīng)用程序欄,由工具欄和其他可能的widget(如TabBarFlexibleSpaceBar)組成巡蘸。

2.1 Appbar屬性

  • leading:左側(cè)的action功能
  • title:標(biāo)題文字奋隶。
  • actions :右側(cè)的action功能,也可以使用 PopupMenuButton 來(lái)顯示為三個(gè)點(diǎn)悦荒,點(diǎn)擊后彈出二級(jí)菜單唯欣,實(shí)現(xiàn)功能聚合。
  • bottom:通常是 TabBar搬味,Tab 導(dǎo)航欄境氢。
  • elevation: 控件的 z 坐標(biāo)
  • flexibleSpace:可以實(shí)現(xiàn)一些特殊的效果,該屬性通常在 SliverAppBar 中使用碰纬,類似于Android中的CollapsingToolbarLayout萍聊,可以輕松實(shí)現(xiàn)頁(yè)面頭部展開(kāi)、合并的效果悦析,這個(gè)組件后期會(huì)講到寿桨。
  • backgroundColor: Appbar 的顏色,改值通常和下面的三個(gè)屬性一起使用强戴。
  • brightness: Appbar 的亮度亭螟,有白色和黑色兩種主題,默認(rèn)值為 ThemeData.primaryColorBrightness骑歹。
  • iconTheme :Appbar 上圖標(biāo)的顏色预烙、透明度、和尺寸信息道媚。默認(rèn)值為 ThemeData.primaryIconTheme扁掸。
  • textTheme:Appbar 上的文字樣式翘县。
  • centerTitle:標(biāo)題是否居中顯示,默認(rèn)值根據(jù)不同的操作系統(tǒng)谴分,顯示方式不一樣锈麸。
  • titleSpacing: 標(biāo)題與其他控件的空隙
  • toolbarOpacity: AppBar tool區(qū)域透明度
  • bottomOpacity: bottom區(qū)域透明度

2.2 Appbar代碼舉例

  • Appbar代碼舉例
void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return const MaterialApp(
      home:  MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({Key? key}) : super(key: key);

  @override
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  @override
  Widget build(BuildContext context) {
    // TODO: implement build
    return Scaffold(
      appBar: AppBar(
        title: Text("我是AppBar"),
      ),

    );
  }


}
  • 運(yùn)行效果
image.png

2.3 leading代碼舉例

  • leading相當(dāng)于返回按鈕
leading: IconButton(
    icon: Icon(Icons.arrow_back),
    onPressed: () {
      Navigator.pop(context);
    }),

2.4 actions代碼舉例

  • actions 就是導(dǎo)航欄的右邊??按鈕
actions: [
  IconButton(
      icon: Icon(Icons.add),
      onPressed: () {
      }),
  PopupMenuButton<String>(
    padding: EdgeInsets.all(0),
    itemBuilder: (context) => [
      PopupMenuItem<String>(
        child: Row(
          children: [
            Icon(
              Icons.person_add,
              color: Colors.black,
            ),
            Text(
              '添加好友',
              style:
              TextStyle(fontSize: 18,),
            )
          ],
          mainAxisAlignment: MainAxisAlignment.center,
          crossAxisAlignment: CrossAxisAlignment.center,
        ),
        value: 'person_add',
      ),
      PopupMenuItem<String>(
        child: Row(
          children: [
            Icon(Icons.camera_alt, color: Colors.black),
            Text(
              '拍照',
              style:
              TextStyle(fontSize: 18,),
            )
          ],
          mainAxisAlignment: MainAxisAlignment.center,
          crossAxisAlignment: CrossAxisAlignment.center,
        ),
        value: 'camera',
      ),
    ],
    onSelected: (value) {
      switch (value) {
        case 'person_add':
          print("點(diǎn)擊了添加好友");
          break;
        case 'camera':
          print("點(diǎn)擊了拍照");
          break;
      }
    },
  ),
]
  • actions效果
image.png

2.5 bottom代碼舉例

  • bottom就是導(dǎo)航欄下面的 tab,例如滑動(dòng)欄那種
bottom: TabBar(
    controller: _tabController,//必須配置
    tabs: [
      Tab(text: "頁(yè)面A",),
      Tab(text: "頁(yè)面B",),
      Tab(text: "頁(yè)面C",)
    ],
  ),
),
body: TabBarView(
  //必須配置
  controller: _tabController,
  children: [
    Center(child:Text("頁(yè)面A")),
    Center(child:Text("頁(yè)面B")),
    Center(child:Text("頁(yè)面C"))
  ],
)),
  • 完整代碼如下:

void main() {
  runApp(TabControllerStu());
}


class TabControllerStu extends StatefulWidget {
  TabControllerStu({Key? key}) : super(key: key);

  _TabControllerStuState createState() => _TabControllerStuState();
}

class _TabControllerStuState extends State<TabControllerStu> with SingleTickerProviderStateMixin{
  late TabController _tabController;


  //銷毀時(shí)調(diào)用
  @override
  void dispose() {
    super.dispose();
    _tabController.dispose();
  }

  //初始化調(diào)用
  @override
  void initState() {
    super.initState();
    _tabController = new TabController(length: 3, vsync: this);
    _tabController.addListener(() {
      //點(diǎn)擊tab回調(diào)一次,滑動(dòng)切換tab不會(huì)回調(diào)
      if(_tabController.indexIsChanging){
        print("ysl--${_tabController.index}");
      }

      //點(diǎn)擊tab時(shí)或滑動(dòng)tab回調(diào)一次
      if(_tabController.index.toDouble() == _tabController.animation!.value){
        print("ysl${_tabController.index}");
      }

    });
  }
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
          appBar: AppBar(
            leading: IconButton(
                icon: Icon(Icons.arrow_back),
                onPressed: () {
                  Navigator.pop(context);
                }),
            title: Text("微信"),
            actions: [
              IconButton(
                  icon: Icon(Icons.add),
                  onPressed: () {
                  }),
              PopupMenuButton<String>(
                padding: EdgeInsets.all(0),
                itemBuilder: (context) => [
                  PopupMenuItem<String>(
                    child: Row(
                      children: [
                        Icon(
                          Icons.person_add,
                          color: Colors.black,
                        ),
                        Text(
                          '添加好友',
                          style:
                          TextStyle(fontSize: 18,),
                        )
                      ],
                      mainAxisAlignment: MainAxisAlignment.center,
                      crossAxisAlignment: CrossAxisAlignment.center,
                    ),
                    value: 'person_add',
                  ),
                  PopupMenuItem<String>(
                    child: Row(
                      children: [
                        Icon(Icons.camera_alt, color: Colors.black),
                        Text(
                          '拍照',
                          style:
                          TextStyle(fontSize: 18,),
                        )
                      ],
                      mainAxisAlignment: MainAxisAlignment.center,
                      crossAxisAlignment: CrossAxisAlignment.center,
                    ),
                    value: 'camera',
                  ),
                ],
                onSelected: (value) {
                  switch (value) {
                    case 'person_add':
                      print("點(diǎn)擊了添加好友");
                      break;
                    case 'camera':
                      print("點(diǎn)擊了拍照");
                      break;
                  }
                },
              ),
            ],

            bottom: TabBar(
              controller: _tabController,//必須配置
              tabs: [
                Tab(text: "頁(yè)面A",),
                Tab(text: "頁(yè)面B",),
                Tab(text: "頁(yè)面C",)
              ],
            ),
          ),
          body: TabBarView(
            //必須配置
            controller: _tabController,
            children: [
              Center(child:Text("頁(yè)面A")),
              Center(child:Text("頁(yè)面B")),
              Center(child:Text("頁(yè)面C"))
            ],
          )),
    );
  }
}
  • 運(yùn)行效果
image.png

3. 寫在后面

關(guān)注我狸剃,更多內(nèi)容持續(xù)輸出

?? 喜歡就點(diǎn)個(gè)贊吧????

?? 覺(jué)得有收獲的掐隐,可以來(lái)一波 收藏+關(guān)注狗热,以免你下次找不到我????

??歡迎大家留言交流钞馁,批評(píng)指正,轉(zhuǎn)發(fā)請(qǐng)注明出處匿刮,謝謝支持僧凰!??

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市熟丸,隨后出現(xiàn)的幾起案子训措,更是在濱河造成了極大的恐慌,老刑警劉巖光羞,帶你破解...
    沈念sama閱讀 218,682評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件绩鸣,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡纱兑,警方通過(guò)查閱死者的電腦和手機(jī)呀闻,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)潜慎,“玉大人捡多,你說(shuō)我怎么就攤上這事☆盱牛” “怎么了垒手?”我有些...
    開(kāi)封第一講書人閱讀 165,083評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)倒信。 經(jīng)常有香客問(wèn)我科贬,道長(zhǎng),這世上最難降的妖魔是什么鳖悠? 我笑而不...
    開(kāi)封第一講書人閱讀 58,763評(píng)論 1 295
  • 正文 為了忘掉前任榜掌,我火速辦了婚禮,結(jié)果婚禮上竞穷,老公的妹妹穿的比我還像新娘唐责。我一直安慰自己,他們只是感情好瘾带,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,785評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布鼠哥。 她就那樣靜靜地躺著熟菲,像睡著了一般。 火紅的嫁衣襯著肌膚如雪朴恳。 梳的紋絲不亂的頭發(fā)上抄罕,一...
    開(kāi)封第一講書人閱讀 51,624評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音于颖,去河邊找鬼呆贿。 笑死,一個(gè)胖子當(dāng)著我的面吹牛森渐,可吹牛的內(nèi)容都是我干的做入。 我是一名探鬼主播,決...
    沈念sama閱讀 40,358評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼同衣,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼竟块!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起耐齐,我...
    開(kāi)封第一講書人閱讀 39,261評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤浪秘,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后埠况,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體耸携,經(jīng)...
    沈念sama閱讀 45,722評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年辕翰,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了夺衍。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,030評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡金蜀,死狀恐怖刷后,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情渊抄,我是刑警寧澤尝胆,帶...
    沈念sama閱讀 35,737評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站护桦,受9級(jí)特大地震影響含衔,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜二庵,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,360評(píng)論 3 330
  • 文/蒙蒙 一贪染、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧催享,春花似錦杭隙、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,941評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)票髓。三九已至,卻和暖如春铣耘,著一層夾襖步出監(jiān)牢的瞬間洽沟,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,057評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工蜗细, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留裆操,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,237評(píng)論 3 371
  • 正文 我出身青樓炉媒,卻偏偏與公主長(zhǎng)得像踪区,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子橱野,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,976評(píng)論 2 355

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