Flutter 下拉刷新

Flutter 中下拉刷新需要用到 RefreshIndicator 組件京髓,一般在 ScrollView 或 ListView 外包一層 RefreshIndicator 組件即可私蕾。

1. 常見用法

  Future _onRefresh() async {
    //......實現(xiàn)刷新邏輯
  }

  @override
  Widget build(BuildContext context) {
    return RefreshIndicator(
      onRefresh: _onRefresh,        
      child: SingleChildScrollView(
        child: Container(),
      ));
  }

使用很簡單净响,只需要實現(xiàn) onRefresh 函數(shù)即可废累,這也是一個 Future 函數(shù)十气,當(dāng)該 Future 執(zhí)行完畢時丧蘸,刷新操作也就完成了。是不是很奇怪祖乳,當(dāng)我們用原生代碼寫下拉刷新時逗堵,通常需要定義一個狀態(tài)來表示刷新狀態(tài),到 Flutter 這里居然啥都不用管眷昆。當(dāng)觸發(fā)下拉刷新時蜒秤,就會執(zhí)行 onRefresh 函數(shù),只要該函數(shù)沒有執(zhí)行完畢亚斋,UI 上就一直顯示的是刷新狀態(tài)作媚,一旦該函數(shù)執(zhí)行完畢,UI 狀態(tài)也會自動改變成刷新完成帅刊。

2. 怎么觸發(fā)自動刷新

通常我們進入某個頁面時纸泡,希望一進去就會觸發(fā)自動下拉刷新,但是找了一圈發(fā)現(xiàn)沒有什么屬性可設(shè)置厚掷。經(jīng)過一番研究弟灼,發(fā)現(xiàn) RefreshIndicator 也是一個有狀態(tài)組件,我們可直接獲取該組件的狀態(tài)冒黑,通過它的狀態(tài)來手動觸發(fā)下拉刷新。這就需要用到每個 Widget 都會有的 Key 屬性了勤哗,通過 key 可以得到其對應(yīng)的狀態(tài)抡爹。具體代碼如下:

  //自定義 RefreshIndicatorState 類型的 Key
  final GlobalKey<RefreshIndicatorState> _refreshKey = GlobalKey();

  @override
  void initState() {
    super.initState();
    //必須在組件掛載運行的第一幀后執(zhí)行,否則 _refreshKey 還沒有與組件狀態(tài)關(guān)聯(lián)起來
    WidgetsBinding.instance.addPostFrameCallback((timeStamp) { 
      //關(guān)鍵代碼芒划,直接觸發(fā)下拉刷新
      _refreshKey.currentState?.show();
    });
  }

  Future _onRefresh() async {
    //......實現(xiàn)刷新邏輯
  }

  @override
  Widget build(BuildContext context) {
    return RefreshIndicator(
      key: _refreshKey,    //自定義 key冬竟,需要通過 key 獲取到對應(yīng)的 State
      onRefresh: _onRefresh,        
      child: SingleChildScrollView(
        child: Container(),
      ));
  }

3. 頁面不能滾動時無法觸發(fā)下拉刷新

如果頁面內(nèi)容很少,在一屏內(nèi)不能滾動民逼,你會發(fā)現(xiàn)無法觸發(fā)下拉刷新泵殴。解決這個問題,需要設(shè)置 ScrollView 的 physics 屬性拼苍。

最終完整解決方案如下:

  //自定義 RefreshIndicatorState 類型的 Key
  final GlobalKey<RefreshIndicatorState> _refreshKey = GlobalKey();

  @override
  void initState() {
    super.initState();
    //必須在組件掛載運行的第一幀后執(zhí)行笑诅,否則 _refreshKey 還沒有與組件狀態(tài)關(guān)聯(lián)起來
    WidgetsBinding.instance.addPostFrameCallback((timeStamp) { 
      //關(guān)鍵代碼,直接觸發(fā)下拉刷新
      _refreshKey.currentState?.show();
    });
  }

  Future _onRefresh() async {
    //......實現(xiàn)刷新邏輯
  }

  @override
  Widget build(BuildContext context) {
    return RefreshIndicator(
      key: _refreshKey,    //自定義 key疮鲫,需要通過 key 獲取到對應(yīng)的 State
      onRefresh: _onRefresh,        
      child: SingleChildScrollView(
        physics: const AlwaysScrollableScrollPhysics(),
        child: Container(),
      ));
  }

默認情況下吆你,當(dāng) ScrollView 包裹的內(nèi)容太少時,是不會觸發(fā)滾動事件的俊犯,這樣也就不會觸發(fā)下拉刷新妇多。AlwaysScrollableScrollPhysics 則可以在這種情況下,觸發(fā)滾動事件燕侠。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末者祖,一起剝皮案震驚了整個濱河市立莉,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌七问,老刑警劉巖蜓耻,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異烂瘫,居然都是意外死亡媒熊,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進店門坟比,熙熙樓的掌柜王于貴愁眉苦臉地迎上來芦鳍,“玉大人,你說我怎么就攤上這事葛账∧疲” “怎么了?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵籍琳,是天一觀的道長菲宴。 經(jīng)常有香客問我,道長趋急,這世上最難降的妖魔是什么喝峦? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮呜达,結(jié)果婚禮上谣蠢,老公的妹妹穿的比我還像新娘。我一直安慰自己查近,他們只是感情好眉踱,可當(dāng)我...
    茶點故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著霜威,像睡著了一般谈喳。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上戈泼,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天婿禽,我揣著相機與錄音,去河邊找鬼矮冬。 笑死谈宛,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的胎署。 我是一名探鬼主播吆录,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼琼牧!你這毒婦竟也來了恢筝?” 一聲冷哼從身側(cè)響起哀卫,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎撬槽,沒想到半個月后此改,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡侄柔,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年共啃,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片暂题。...
    茶點故事閱讀 38,117評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡移剪,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出薪者,到底是詐尸還是另有隱情纵苛,我是刑警寧澤,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布言津,位于F島的核電站攻人,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏悬槽。R本人自食惡果不足惜怀吻,卻給世界環(huán)境...
    茶點故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望初婆。 院中可真熱鬧烙博,春花似錦、人聲如沸烟逊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽宪躯。三九已至,卻和暖如春位迂,著一層夾襖步出監(jiān)牢的瞬間访雪,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工掂林, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留臣缀,地道東北人。 一個月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓泻帮,卻偏偏與公主長得像精置,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子锣杂,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,877評論 2 345

推薦閱讀更多精彩內(nèi)容