iT邦幫忙

2024 iThome 鐵人賽

DAY 10
0
Mobile Development

Flutter基礎入門系列 第 10

【Day 10】開始製作app! - 程式的框架設計與底部頁面選擇

  • 分享至 

  • xImage
  •  

今天起,筆者將在這裡紀錄這個最符合我的要求、最客製化(當然)的行程規劃應用程式。這過程應該會遇到不少困難,就讓我們盡量放鬆邊做邊學習吧~


專案初始化

程式命名

在建立專案之前,先來幫這個應用程式取個名字吧!為了避免後續在git這部份的麻煩,因此想在開始動工前先決定好程式名稱,同時也是資料夾與repository的名稱。

(以下多廢話可跳過)
筆者想為它取個能聯想到它功能,且不會太繞口的名字,想過該如何將'Todo', 'Schedule', 'Timetable', 'Drag'這幾個單字重組在一起,該選擇使用哪幾個單字呢,嘗試了幾個組合後,最終決定Schedrag這個名字,既有著行程以及拖拉的意思,也不會太難念,更重要的是,跟其他人的app名子沒有重複ヽ(´∀`)ノ

初始化

這個程式的程式碼將會同步在筆者的github上更新,repo為:nnyjan02426/Schedrag

以下將列出Flutter與Git初始化的步驟,將不一一說明。

flutter create schedrag
cd schedrag

git init
git add .
git commit -m "init repo"

git remote add origin git@github.com:nnyjan02426/Schedrag.git
git push -u origin main

程式主框架建構

今日,筆者打算先完成整個主要框架,也就是主要頁面的長相,如下圖:
https://ithelp.ithome.com.tw/upload/images/20240923/20169446g6RpjmIoKp.jpg

底部的頁面選擇,將使用BottomNavigationBar這個Widget來做,這是專門用來做在畫面底部的頁面選擇器。
本次,將參考官方文件中的範例並對它做修改。若想在自己電腦中生成範例,只須輸入以下內容:

flutter create --sample=material.BottomNavigationBar.1 mysample

結合了之前做的程式選擇頁面的程式碼結構,目前我們的程式碼如下:

class HomePage extends StatefulWidget {
  const HomePage({super.key});

  @override
  State<HomePage> createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  int _selectedIndex = 0;
  static const TextStyle optionStyle = TextStyle(fontSize: 30, fontWeight: FontWeight.bold);

  void _onItemTapped(int index) {
    setState(() { _selectedIndex = index; });
  }

  @override
  Widget build(BuildContext context) {
    Widget page = Placeholder();
    switch (_selectedIndex) {
      case 0:
        page = Text('Schedule', style: optionStyle);
        if (kDebugMode) { print('Page [Schedule] selected'); }
      case 1:
        page = Text('Todo', style: optionStyle);
        if (kDebugMode) { print('Page [Todo] selected'); }
      case 2:
        page = Text('Timetable', style: optionStyle);
        if (kDebugMode) { print('Page [Timetable] selected'); }
      case 3:
        page = Text('Settings', style: optionStyle);
        if (kDebugMode) { print('Page [Settings] selected'); }
      default:
        throw UnimplementedError('no widget for $_selectedIndex');
    }

    return Scaffold(
      body: Center(
        child: page,
      ),
      bottomNavigationBar: BottomNavigationBar(
        type: BottomNavigationBarType.fixed,
        currentIndex: _selectedIndex,
        onTap: _onItemTapped,

        // colors
        backgroundColor: Theme.of(context).colorScheme.onSurface,
        selectedItemColor: Theme.of(context).colorScheme.primary,
        unselectedItemColor: Theme.of(context).colorScheme.secondary,

        items: const <BottomNavigationBarItem>[
          BottomNavigationBarItem(
            icon: Icon(Icons.home),
            label: 'Schedule',
          ),
          BottomNavigationBarItem(
            icon: Icon(Icons.business),
            label: 'Todo',
          ),
          BottomNavigationBarItem(
            icon: Icon(Icons.school),
            label: 'Timetable',
          ),
          BottomNavigationBarItem(
            icon: Icon(Icons.school),
            label: 'Settings',
          ),
        ],

      ),
    );
  }
}

介面為如此:
https://ithelp.ithome.com.tw/upload/images/20240924/20169446xgIWeP3TNQ.png

此篇暫時就到這裡,明日將會開始研究如何製作並建立新的todo。


謝謝讀到這裡的讀者,不好意思今天的內容較短,可能無法帶來什麼新的收穫,之後會再加油的!有任何想說的都歡迎留言或email,最後是一些此刻的想法~

因為今日事情比較多,沒辦法有太多時間去研究如何隱藏底下的NavigationBar,也沒能設計好程式介面的主要結構(size),這些細節部份可能會移到最後幾天再去調整。目前想先專注在製作功能上面,應該暫時不會去特別調整介面外觀。

實際自己開始設計與製作app後,才發現有這麼多步驟要做,也總覺的想要加入的東西太多,好像永遠都完成不了。現在開始覺得那些已經上架應用程式的開發者們真厲害,能夠做出那麼完整的成品。希望未來有一天,這個Schedrag也能成為應用程式商店架上的一員。


上一篇
【Day 09】設計的第一步驟:介面規劃與功能設定
下一篇
【Day 11】如何將檔案分類?程式的資料夾結構
系列文
Flutter基礎入門30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言