欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Flutter 快速實現(xiàn)聊天會話列表效果示例詳解

 更新時間:2022年10月09日 09:35:30   作者:LinXunFeng  
這篇文章主要為大家介紹了Flutter 快速實現(xiàn)聊天會話列表效果示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

一、目標效果

聊天會話頁的列表效果

  • 1、聊天數(shù)據(jù)不滿一屏時,頂部顯示所有聊天數(shù)據(jù)
  • 2、插入消息時
    • 如果最新消息緊靠列表底部時,則插入消息會使列表向上推
    • 如果不是緊靠列表底部,則固定到當前聊天位置

效果如圖所示:

二、原理

1、 涉及的方法

ScrollPhysics 提供了 adjustPositionForNewDimensions 方法,用于修正 ScrollViewrebuild 后的偏移量,方法聲明如下

double adjustPositionForNewDimensions({
  required ScrollMetrics oldPosition,
  required ScrollMetrics newPosition,
  required bool isScrolling,
  required double velocity,
})

默認情況下,值為上一次的偏移量,即 newPosition 參數(shù)的 pixels,所以在頂部插入消息時,消息列表就會跟隨滾動。

如下圖所示,觀察藍色的消息條目,每播入一條消息時,所有消息會自動往上頂,而滾動視圖的偏移量其實一直是沒有變化的~

注:值得注意的是,如果該方法返回的值與 newPositionpixels 不相等時,則會觸發(fā)視圖的重新布局,所以這個操作還是比較昂貴的,應盡量減少返回值的變動。

2、實現(xiàn)邏輯

根據(jù)上述內容我們不難推出插入消息時的效果實現(xiàn)原理如下:

效果返回的值
消息緊靠列表底部時,插入消息會使列表向上推直接返回 super 的值,即 newPosition 參數(shù)的 pixels
如果不是緊靠列表底部,則固定到當前聊天位置返回原本第 0 條消息的最新偏移量

下面重點說明一下第 2 點中 返回原本第0條消息的最新偏移量 的實現(xiàn)邏輯:

ListView 的本質是 RenderSliverList,通過 RenderSliverListfirstChild 屬性拿到當前列表中渲染的首個 item。

如下圖,firstChild 是下標為 10item,這個 item 與預渲染區(qū)域 cacheExtent 相關,如果將其設置為 0,則 firstChild 的下標將會是 12,這個相信不難理解。

所以,我們只需要在插入消息時,記錄第 0 條消息的偏移量,當列表視圖 rebuild 后,adjustPositionForNewDimensions 方法會被調用,此時取出第 1 條消息的偏移量,兩者的差值加上 super 的值即為目標修正偏移量。

至于 聊天數(shù)據(jù)不滿一屏時,頂部顯示所有聊天數(shù)據(jù) 這個效果只是在切換 shrinkWrap 而已,比較簡單就不在此展開講了。

我已將上述邏輯進行了封裝,集成于 flutter_scrollview_observer,接下來我們就來看看如何使用。

三、使用

現(xiàn)在只需三個步驟即可快速實現(xiàn)聊天會話列表的效果

步驟一:初始化必要的 ListObserverControllerChatScrollObserver

/// 初始化 ListObserverController
observerController = ListObserverController(controller: scrollController)
  ..cacheJumpIndexOffset = false;
/// 初始化 ChatScrollObserver
chatObserver = ChatScrollObserver(observerController)
  ..toRebuildScrollViewCallback = () {
    // 這里可以重建指定的滾動視圖即可
    setState(() {});
  };

步驟二:按如下配置 ListView 并使用 ListViewObserver 將其包裹

Widget _buildListView() {
  Widget resultWidget = ListView.builder(
    physics: ChatObserverClampinScrollPhysics(observer: chatObserver),
    shrinkWrap: chatObserver.isShrinkWrap,
    reverse: true,
    controller: scrollController,
    ...
  );
  resultWidget = ListViewObserver(
    controller: observerController,
    child: resultWidget,
  );
  return resultWidget;
}

步驟三:插入或刪除消息前,調用 ChatScrollObserverstandby 方法

onPressed: () {
  chatObserver.standby();
  setState(() {
    chatModels.insert(0, ChatDataHelper.createChatModel());
  });
},
...
onRemove: () {
  chatObserver.standby(isRemove: true);
  setState(() {
    chatModels.removeAt(index);
  });
},

注:示例中的 setState 都可以換成對列表視圖進行局部刷新的代碼

四、最后

GitHub地址: flutter_scrollview_observer

該庫還實現(xiàn)了其它十分實用的功能,相關功能有對應的文章進行敘述

以上就是Flutter 快速實現(xiàn)聊天會話列表效果示例詳解的詳細內容,更多關于Flutter 聊天會話列表的資料請關注腳本之家其它相關文章!

相關文章

  • Android中WebView的一些簡單用法

    Android中WebView的一些簡單用法

    這篇文章主要介紹了Android中WebView的一些簡單用法,WebView非常簡單,Android已經封裝的非常完善,寫個小例子覆蓋其間常用的幾個方法;
    2016-08-08
  • Android路由框架Router分析詳解

    Android路由框架Router分析詳解

    本篇文章主要介紹了Android路由框架Router分析詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-02-02
  • Android實現(xiàn)簡易計算功能

    Android實現(xiàn)簡易計算功能

    這篇文章主要為大家詳細介紹了Android實現(xiàn)簡易計算功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • Flutter使用AnimationController實現(xiàn)控制動畫

    Flutter使用AnimationController實現(xiàn)控制動畫

    這篇文章主要想帶大家來嘗試一下Flutter如何使用AnimationController實現(xiàn)一個拖拽圖片,然后返回原點的動畫,感興趣的可以了解一下
    2023-05-05
  • Kotlin中常見內聯(lián)擴展函數(shù)的使用方法教程

    Kotlin中常見內聯(lián)擴展函數(shù)的使用方法教程

    在Kotlin中,使用inline修飾符標記內聯(lián)函數(shù),既會影響到函數(shù)本身, 也影響到傳遞給它的Lambda表達式,這兩者都會被內聯(lián)到調用處。下面這篇文章主要給大家介紹了關于Kotlin中常見內聯(lián)擴展函數(shù)的使用方法,需要的朋友可以參考下。
    2017-12-12
  • Android實現(xiàn)QQ圖片說說照片選擇效果

    Android實現(xiàn)QQ圖片說說照片選擇效果

    這篇文章主要為大家詳細介紹了Android實現(xiàn)QQ圖片說說照片選擇效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • Flutter 給列表增加下拉刷新和上滑加載更多功能

    Flutter 給列表增加下拉刷新和上滑加載更多功能

    在實際的 App 中,下拉刷新和上滑加載更多是非常常見的交互形式。在 Flutter 中,有 flutter_easyrefresh開源插件用于實現(xiàn)下拉刷新和上滑加載更多。本篇介紹了有狀態(tài)組件和 flutter_easyrefresh 的基本應用,同時使用模擬的方式完成了異步數(shù)據(jù)加載。
    2021-05-05
  • Android 百分比布局詳解及實例代碼

    Android 百分比布局詳解及實例代碼

    這篇文章主要介紹了Android 百分比布局詳解及實例代碼的相關資料,這里附有代碼實例幫助大家學習參考,如何實現(xiàn)百分比布局,需要的朋友可以參考下
    2016-11-11
  • Android自定義橡皮擦效果

    Android自定義橡皮擦效果

    這篇文章主要為大家詳細介紹了Android自定義橡皮擦效果,橡皮擦擦圖片,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-12-12
  • Android獲取屏幕方向及鍵盤狀態(tài)的小例子

    Android獲取屏幕方向及鍵盤狀態(tài)的小例子

    很多開發(fā)Android的網(wǎng)友可能需要判斷當前的屏幕方向或鍵盤狀態(tài),下面的代碼可以判斷出橫屏landscape和常規(guī)的portrait縱握方式,如果使用的是G1這樣有QWERTY鍵盤硬件的,還可以判斷屏幕方向以及鍵盤的拉出狀態(tài)。
    2013-05-05

最新評論