Flutter開發實踐-《玩Android》APP客戶端重構

項目概述

使用flutter對《玩Android》APP客戶端進行重構,採用flutter官方組件進行開發,實現了與kotlin開發的原生APP一致的功能模塊。

工程介紹

分包層級

代碼整體包結構如下圖:
在這裏插入圖片描述
其中,資源文件統一放res/images目錄下。
代碼位於lib目錄中:

  • model:存放數據實體類,和數據庫存儲相關類
  • network:統一放網絡請求封裝的類
  • page:各路由頁面
  • resource:存放Color、Dimens、Selector、字符串常量等資源值
  • util:通用工具類
  • widget:抽象出來的通用UI組件
  • main:APP主入口

主要頁面

一、主界面
return Scaffold(
      appBar: PreferredSize(
        preferredSize: Size.fromHeight(MediaQueryData.fromWindow(window).padding.top),
        child: SafeArea(top: true, child: Offstage()),
      ),
      body: IndexedStack(
        index: _selectedIndex,
        children: pages,
      ),
      bottomNavigationBar: BottomNavigationBar(
        showUnselectedLabels: true,
        items: bottomItems,
        currentIndex: _selectedIndex,
        type: BottomNavigationBarType.fixed,
        selectedFontSize: textTheme.caption.fontSize,
        unselectedFontSize: textTheme.caption.fontSize - 2,
        onTap: (index) {
          setState(() {
            _selectedIndex = index;
          });
        },
      ),
    );

主界面使用BottomNavigationBar+IndexedStack進行佈局,從而避免每次切換tab都會導致頁面重新刷新。需要注意的是,使用這種組合進行佈局會一次將三個tab頁面全部加載,因此需要自行處理子頁面的懶加載實現。

(完整源碼見:main_page.dart

二、首頁

首頁佈局通過RefreshIndicator嵌套CustomScrollView實現下拉刷新,通過設置ScrollController監聽滾動到底部實現上拉加載。

return RefreshIndicator(
      onRefresh: _onRefresh,
      child: CustomScrollView(
        controller: _scrollController,
        slivers: <Widget>[
          SliverToBoxAdapter(child: _buildSearchBarView()),
          SliverToBoxAdapter(child: _buildBannerView(_bannerList)),
          _buildArticleListView(_articleList),
        ],
      ),
    );

重寫initState函數,在這裏加載首頁數據,加載完成後通過setState函數更新頁面。需要注意異步返回調用setState前要先判斷this.mounted

@override
  void initState() {
    super.initState();
    ···
    _loadFreshBanners();
    _loadFreshArticles();
    ···
  }

(完整源碼見:home_page.dart)

三、體系

體系佈局由兩個TabBar和一個TabBarView組合實現。通過註冊TabController監聽tab切換,手動設置各級Tab的索引,一級TabBar聯動刷新二級TabBar,二級TabBar聯動刷新TabBarView。

(完整源碼見:category_page.dart

源碼地址

github鏈接:Wandroid-APP-lite-flutter

kotlin版本

Android Architecture Components+MVVM+Androidx+kotlin APP開發實踐

發佈了27 篇原創文章 · 獲贊 2 · 訪問量 8509
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章