線上直播系統原始碼,自定義底部 BottomNavigationBar
線上直播系統原始碼,自定義底部 BottomNavigationBar
一、封裝viewmodel
在 viewmodel 中,我們需要定義一個當前選中下標,所有tabItem 的陣列,還需要一個選中下標的切換方法
int currentIndex = 0; List barItemList = [ { "title": "首頁", "normalIcon": 'assets/images/ic_error.png', "selectIcon": 'assets/images/ic_error.png' }, { "title": "通訊錄", "normalIcon": 'assets/images/ic_error.png', "selectIcon": 'assets/images/ic_error.png' }, { "title": "發現", "normalIcon": 'assets/images/ic_error.png', "selectIcon": 'assets/images/ic_error.png' }, { "title": "我", "normalIcon": 'assets/images/ic_error.png', "selectIcon": 'assets/images/ic_error.png' }, ]; // 選中下標的切換 changeBottomTabIndex(int index) { currentIndex = index; notifyListeners(); }
為了提升後期的可擴充套件性,我將使用PageController 來管理我的頁面,因此我們還需要初始化一個 PageController
PageController tabPageController = PageController();
二、封裝 bottomNavigationWidget
前面我們封裝了tabItem 的屬性,互動等功能,現在我們就要來實現UI部分的封裝了。
bottomWidget 的封裝,我這裡直接封裝成一個元件,並且在元件中自定義了整個樣式
static Widget bottomNavigationWidget(TabNavigationViewModel model) { return Container( height: 56.h + Get.mediaQuery.padding.bottom, decoration: BoxDecoration( color: Colors.red, borderRadius: BorderRadius.only( topRight: Radius.circular(24.r), topLeft: Radius.circular(24.r), ), boxShadow: [BoxShadow(color: Colors.green, blurRadius: 0.12.r)]), child: Row( mainAxisAlignment: MainAxisAlignment.spaceAround, children: List<Widget>.generate(model.barItemList.length, (index) => _barItem(model.barItemList[index], model, index)), ), ); }
從上面程式碼中,可以看到 height 的高度,我給了一個56的高度,再加上一個bottom 的高度,因為有些手機是有底部bottom 的,所以我們需要把這個高度給預留出來。
然後使用 List.generate 的方式,生成單獨的itemBar ,接下來看一下 _barItem 元件的封裝
static Widget _barItem(item, TabNavigationViewModel model, int index) { return InkWell( onTap: () { if (model.currentIndex != index) { model.currentIndex = index; model.changeBottomTabIndex(index); model.tabPageController.jumpToPage(index); } }, child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ Image.asset( model.currentIndex == index ? item['selectIcon'] : item['normalIcon'], width: 24, height: 24, fit: BoxFit.cover, ), const SizedBox( height: 10, ), Text( item['title'], style: TextStyle( color: model.currentIndex == index ? Colors.white : Colors.black, ), ), ], ), ); }
程式碼寫到這裡,我們需要使用的整個BottomNavigationBar 就已經封裝完成了。
三、自定義 BottomNavigationBar 的使用
前面封裝完成了整個BottomNavigationBar 的自定義,那麼我們該怎麼使用呢?
Scaffold( body: PageView( controller: model.tabPageController, // physics: const NeverScrollableScrollPhysics(), children: [ const HomePage(), Container( color: Colors.grey, ), Container( color: Colors.red, ), Container( color: Colors.grey, ), ], onPageChanged: (index) { model.currentIndex = index; model.changeBottomTabIndex(index); }, ), bottomNavigationBar: TabNavigationWidget.bottomNavigationWidget(model), )
以上就是 線上直播系統原始碼,自定義底部 BottomNavigationBar,更多內容歡迎關注之後的文章
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69978258/viewspace-2926724/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 線上直播原始碼,自定義氣泡效果(BubbleView)原始碼View
- 直播系統app原始碼,TabLayout:自定義字型大小APP原始碼TabLayout自定義字型
- 影片直播系統原始碼,自定義背景和狀態管理原始碼
- 直播平臺原始碼,Flutter 自定義 虛線 分割線原始碼Flutter
- 手機直播原始碼,Flutter 自定義 虛線 分割線原始碼Flutter
- 線上直播系統原始碼,預設倒數計時,自定義輸入時間倒數計時原始碼
- 線上直播原始碼,自定義導航欄並固定居中對齊原始碼
- 直播app系統原始碼,底部彈框顯示,底部導航隱藏APP原始碼
- 直播軟體原始碼,橫向滾動 自定義底部指示器樣式原始碼
- 直播系統原始碼,簡易的自定義確認彈框AlertDialog原始碼
- 直播系統app原始碼,自定義可以暫停的倒數計時APP原始碼
- app直播原始碼,java自定義註解APP原始碼Java
- 影片直播app原始碼,自定義View 線型EditText輸入框APP原始碼View
- 直播商城系統原始碼,播放器aliPlayer自定義清晰度切換原始碼播放器
- 線上直播原始碼,自定義AlertDialog設定寬高並去掉預設的邊框原始碼
- 線上直播系統原始碼,彈出警告/提示類彈窗原始碼
- 線上直播系統原始碼,flutter 巢狀滑動實現原始碼Flutter巢狀
- 線上直播系統原始碼,當前版本號頁面呈現原始碼
- 線上直播系統原始碼,Dart-Flutter DateTime日期轉換原始碼DartFlutter
- 教育直播原始碼:如何進行線上教育系統搭建?原始碼
- 線上直播系統原始碼,前後端大檔案上傳程式碼分析原始碼後端
- uni-app中自定義動態底部tabbar(附示例原始碼)APPtabBar原始碼
- 線上直播系統原始碼,vue實現搜尋文字高亮功能原始碼Vue
- 線上直播系統原始碼,滑鼠懸停後彈出氣泡原始碼
- 線上直播系統原始碼,迴圈滾動RecyclerView的實現原始碼View
- 線上直播系統原始碼,Vue3中全域性配置 axios原始碼VueiOS
- 影片直播系統原始碼,在Laravel中自定義模板函式 並在模板中呼叫原始碼Laravel函式
- 視訊直播系統原始碼,使用自定義UI 完成文字顏色載入效果原始碼UI
- 直播系統app原始碼,自定義中間向兩邊滑動的滑動條APP原始碼
- 直播系統app原始碼,自定義九宮格,計算器佈局,驗證碼認證APP原始碼
- 線上直播系統原始碼,平臺彈窗自適應裝置原始碼
- 線上直播系統原始碼,滾動式內容展示控制元件原始碼控制元件
- 呼叫支付介面,實現直播帶貨系統原始碼的線上支付原始碼
- 線上直播系統原始碼,LinearLayout下多個ListView實現滾動原始碼View
- 教育直播原始碼:線上教育系統搭建要注重這些方面原始碼
- 直播系統程式碼,Android自定義View實現呼吸燈效果AndroidView
- 直播系統程式碼,自定義平臺私聊對話方塊
- app直播原始碼,uniapp之自定義頂部樣式APP原始碼