ListView的基礎(chǔ)創(chuàng)建使用有三種方式:
創(chuàng)新互聯(lián)建站堅持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都網(wǎng)站設(shè)計、成都網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時代的望花網(wǎng)站設(shè)計、移動媒體設(shè)計的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!
通過默認構(gòu)造函數(shù)來創(chuàng)建列表,應用場景 = 短列表
這種方式創(chuàng)建的列表存在一個問題:對于那些長列表或者需要較昂貴渲染開銷的子組件,即使還沒有出現(xiàn)在屏幕中但仍然會被ListView所創(chuàng)建,這將是一項較大的開銷,使用不當可能引起性能問題甚至卡頓。
長列表
列表子項之間需要分割線
ListView的進階使用主要包括:下拉刷新 上拉加載
在Flutter中,ListView結(jié)合RefreshIndicator組件實現(xiàn)下拉刷新
通過包裹一層RefreshIndicator,自定義onRefresh回調(diào)方法實現(xiàn)
方式有兩種:
通過ListView.controller屬性可以判斷ListView是否滑動到了底部,再進行上拉加載
NotificationListener是一個Widget,可監(jiān)聽子Widget發(fā)出的Notification
ListView在滑動時中會發(fā)出ScrollNotification類型的通知,可通過監(jiān)聽該通知得到ListView的滑動狀態(tài),判斷是否滑動到了底部,從而進行上拉加載
NotificationListener有一個onNotification屬性,定義了監(jiān)聽的回調(diào)方法,通過它來處理加載更多邏輯
不定期分享關(guān)于 安卓開發(fā) 的干貨,追求 短、平、快 ,但 卻不缺深度 。
封裝的彈窗必須要靈活,滿足實際開發(fā)中的大部分彈窗,比如有無標題、有無內(nèi)容、有無關(guān)閉按鈕、有無操作按鈕以及按鈕的排列樣式等需要滿足多元化~
共有四個文件: ww_dialog.dart 、 ww_middle_bottom_dialog_widget.dart 、 ww_top_dialog_widget.dart 、 ww_top_dialog_item_data.dart
彈窗主要調(diào)用類,主要包含: WWDialog.showTopDialog 、 WWDialog.showMiddleDialog 、 WWDialog.showBottomDialog
支持自定義配置背景顏色、字體大小、顏色、統(tǒng)一回調(diào)、自定義按鈕、單獨回調(diào)、是否帶三角標志、任意位置、最大高度、超過可以滑動等~
部分展示效果:
支持配置背景顏色、字體大小、顏色、字重、按鈕排列方式、標題、內(nèi)容、按鈕支持完全自定義、點擊的回調(diào)等~
部分展示效果:
支持配置背景顏色、字體大小、顏色、字重、按鈕排列方式、標題、內(nèi)容、按鈕支持完全自定義、點擊的回調(diào)等~
部分展示效果:
中間、底部彈窗的彈窗widget
頂部彈窗的彈窗widget
頂部彈窗的數(shù)據(jù)源數(shù)據(jù)模型item
github傳送門:
我要做的是用BottomNavigationBarItem移除/替換FAB(浮動操作按鈕),并將其放在BottomNavigationBar的中心,并為其創(chuàng)建樣式。
為了按鈕能夠根據(jù)屏幕寬度進行延伸變寬,用了row和expanded,expanded多大面積,按鈕就有多大面積。如果不用row,expanded會向下延伸,就不是我們要的效果了。
OutlineButton控件的child和onPressed是必須的屬性,borderSide用來自定義邊框顏色和樣式。
bottom_tab_bar,
用法和bottom_navigation_bar一樣,但是新增了一些屬性的用法
bottom navigation bar 里面的 icon and title.
回調(diào),帶的是tab的index
The callback that is called when a item is tapped.
The widget creating the bottom navigation bar needs to keep track of the current index and call setState to rebuild it with the newly provided index.
The index into [items] of the current active item.
當前激活的是哪一個tab
Defines the layout and behavior of a [BottomTabBar].
See documentation for [BottomTabBarType] for information on the meaning of different types.
The color of the selected item when bottom navigation bar is [BottomTabBarType.fixed].
If [fixedColor] is null then the theme's primary color, [ThemeData.primaryColor], is used. However if [BottomTabBar.type] is [BottomTabBarType.shifting] then [fixedColor] is ignored.
The size of all of the [BottomTabBarItem] icons.
See [BottomTabBarItem.icon] for more information.
動畫是否開啟,默認是開起的
未讀消息的顏色,默認是fixedColor
按壓水墨屏效果是否開啟,默認是開啟的,
還是帶動畫的,不太適合我們的正常項目
未讀消息,是一個widget,可以自定義樣式
未讀消息
first import dependeny in pubspec.yaml
example:
可以使用 SingleChildScrollView 包裹布局
這里還需要了解一個 Scaffold 中的一個屬性 resizeToAvoidBottomInset
官方文檔給出的解釋就是處理鍵盤遮擋問題,默認是 true,如果不希望頂起需要設(shè)置為 false。
在 sdk 低版本的時候是使用 resizeToAvoidBottomPadding 需要將其設(shè)置為 false,現(xiàn)在已經(jīng)棄用。但網(wǎng)上很多文章還沒有改正,仍然用的 resizeToAvoidBottomPadding。
分兩種情況
一種是使用系統(tǒng)的返回鍵,比如 android 底部導航自帶的返回,
另一種是使用導航欄自定義的返回鍵
第一種情況需要在頁面根布局使用 WillPopScope 在 onWillPop 中攔截返回處理。
原理都是通過判斷輸入框是否獲取了焦點
當?shù)撞坑泄潭ǖ慕M件,比如提交按鈕,我們在鍵盤彈起的時候希望按鈕貼著鍵盤頂部固定,但是中間滾動視圖可以自由滾動
可以在 SingleChildScrollView 外部再使用 Stack 包裹,懸浮按鈕使用 Positioned 定位,
還要??注意要給滾動組件底部留出距離防遮擋,同時還有動態(tài)加上 bottomBar 的高度,因為在 iphoneX 以上的手機,會有個虛擬按鍵,如果不加上該按鍵高度,同樣會被遮擋
高度獲取方法: MediaQuery.of(context).padding.bottom
在 showDialog 布局中使用 Scaffold 包裹,不要忘了將 backgroundColor 設(shè)為透明。
如果彈窗過高,還是需要將高度固定,然后使用 SingleChildScrollView ,彈窗中同樣也可以在執(zhí)行關(guān)閉的時候攔截,判斷鍵盤是否彈起,如果彈起則要先關(guān)閉鍵盤。
給所有輸入框綁定 FoucusNode
在 maxLines=1 的情況下,輸入框不支持換行,換行按鈕會變成 done
監(jiān)聽 onEditingComplete 方法
根布局使用 GestureDetector 或者 InkWell 包裹,點擊的時候收起鍵盤。
最后要記得銷毀