iT邦幫忙

2022 iThome 鐵人賽

DAY 16
0
Software Development

初學軟體開發系列 第 16

Day16-Flutter app頁面設計

  • 分享至 

  • xImage
  •  

今日學習內容
Scaffold

前提要素
昨天有提到Scaffold是製作頁面的組件,他是繼承於StatefulWidget,是有狀態組件。大部分的應用程式app都有標題欄、主體、側邊菜單選項等等建構,當每次重複寫這些內容會降低開發效率,所以才有Scaffold頁面布局的組件,可以很快的建構出這些元素。

首先是appBar菜單欄,之前有用到過,以執行結果來說明。
home: Scaffold( appBar: AppBar( title: const Text("appBar")), ),
https://ithelp.ithome.com.tw/upload/images/20220916/20151918tb1EyWg2TL.png
印出appBar在上面。

再來是懸浮按鈕的設定,
https://ithelp.ithome.com.tw/upload/images/20220916/20151918N7dXJzLmCx.png
懸浮按鈕就會出現在右下角
程式碼:
floatingActionButton:FloatingActionButton( onPressed : () {}, child: const Icon(Icons.add_photo_alternate), ),

還可以設定懸浮按鈕的位置
https://ithelp.ithome.com.tw/upload/images/20220916/201519189BZ6aKg7ob.png
程式碼:
floatingActionButtonLocation:FloatingActionButtonLocation.centerFloat,


接下來是左側菜單的設置
程式碼:

 drawer:const Drawer(
        child: Text('data'),
      )

https://ithelp.ithome.com.tw/upload/images/20220916/20151918Hu1yCkfP5I.png

還有另外的右側菜單設置
程式碼:

endDrawer:const Drawer(
          child: Text('data'),
        ),

https://ithelp.ithome.com.tw/upload/images/20220916/2015191846OAp5JhOv.png

設定背景色,這裡舉例橘黃色。
backgroundColor: Colors.amberAccent,
https://ithelp.ithome.com.tw/upload/images/20220916/20151918BNo674YVBy.png


最後一個是showSnackBar,他可以弄出應用消息,舉例來說,當我們登入帳號密碼後,應用程式端確認成功後,回傳給UI端的訊息>登入成功,就是這個吧。
程式碼:

 body:Builder(
        builder:(BuildContext context){
          return Center(
            child:ElevatedButton(
              onPressed:(){
                ScaffoldMessenger.of(context).showSnackBar(const SnackBar(
                  content:Text('Hello!'),
                ));
              },
              child: const Text('呼叫我'),
            ),
          );
        },
      ),

解說:我們要寫進Build裡,在中央設置一個按鈕,名稱叫'呼叫我',並且使用showSnackBar,在使用者點擊那個按鈕之後,就會出現Hello!的文字視窗出來。
https://ithelp.ithome.com.tw/upload/images/20220916/201519188yZDrou9uS.png

今日總結
加油!!!! ((最後附上今天的總程式碼

import 'package:flutter/material.dart';

void main(){
  runApp(const MyApp());

}

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

  @override
  Widget build(BuildContext context) {
    return MaterialApp(


      title: '我是標題',

      color:Colors.green,

      theme:ThemeData(
        primarySwatch:Colors.yellow,
      ),

      darkTheme:ThemeData(
        primarySwatch:Colors.red,
    ),
      debugShowCheckedModeBanner: false,
    home: Scaffold(
      appBar: AppBar(
        title: const Text("appBar")),

      floatingActionButton:FloatingActionButton(
        onPressed : () {},
        child: const Icon(Icons.add_photo_alternate),
      ),
        floatingActionButtonLocation:FloatingActionButtonLocation.centerFloat,
        drawer:const Drawer(
          child: Text('data'),
        ),

        endDrawer:const Drawer(
          child: Text('data'),
        ),

        backgroundColor: Colors.amberAccent,

      body:Builder(
        builder:(BuildContext context){
          return Center(
            child:ElevatedButton(
              onPressed:(){
                ScaffoldMessenger.of(context).showSnackBar(const SnackBar(
                  content:Text('Hello!'),
                ));
              },
              child: const Text('呼叫我'),
            ),
          );
        },
      ),

      ),
    );
  }
}


上一篇
Day15-MaterialApp容器
下一篇
Day17-Column_Row線性布局
系列文
初學軟體開發31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言