Flutter 中,ListView 中需要放置 ListView 需要怎么處理才高效?

問題及場景

ListView 是 Flutter 開發者第一個學習到的 Widget,因為它可以滑動。一切都會運行得很好,直到 ListView 中的 Item 本身也是一個 ListView。你可能會看到 Flutter 建議你將內部的 ListView 的ShrinkWrap 屬性設置為 True。雖然錯誤消除了,但是威脅還在。因為 ShrinkWrap 屬性會將 ListView 一次性全部填充,算出所有高度,如果內部 ListView 的數據量比較大,那將產生性能問題,會有很大的風險掉幀、jank 和 stutters。

假設你遇到下面這樣的場景

final outerListChildren = <ListView>[ListView(children: <Wdiget>[...]),...
];return ListView.Builder(itemCount: outerListChildren.length,itemBuilder: (context, index) {return outerListChildren[index]}
)

然后我們按照 Flutter 的提示,將內部的 ListView 加上 shrinkWrap 和 physics 屬性如下

final outerListChildren = <ListView>[ListView(shrinkWrap: true,physics: const NeverScrollableScrollPhysics(),children: <Wdiget>[...]),...
];return ListView.Builder(itemCount: outerListChildren.length,itemBuilder: (context, index) {return outerListChildren[index]}
)

解決方法:

1、首先,將最外層的 ListView 改為 CustomScrollView

return CustomScrollView(children: outerListChildren}
)

2、然后我們將外部的 ListView 列表改為 SliverList 列表

final outerListChildren = <SliverList>[];
return CustomScrollView(children: outerListChildren}
)

3、所有 SliverList 添加 delegate,并使用 SliverChildBuilderDelegate 作為 value,_myWidgets 是之前的 inner ListView 需要顯示的內容

final outerListChildren = <SliverList>[SliverList(delegate: SliverChildBuilderDelegate(childCount: _myWidgets.length,(context, index) => _myWidgets[index]))
];
return CustomScrollView(children: outerListChildren}
)

至此,大功告成

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/38930.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/38930.shtml
英文地址,請注明出處:http://en.pswp.cn/news/38930.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

連續兩年增收不增利,比亞迪電子靠新能源汽車業務再次起飛?

在凈利潤連續兩年下挫之后&#xff0c;比亞迪電子&#xff08;00285.HK&#xff09;終于迎來了好消息。 不久前比亞迪電子發布2023年中期盈利預告顯示&#xff0c;上半年凈利潤同比增加115%-146%&#xff08;2022年上半年的凈利潤顯示6.34億元&#xff09;。 這主要受益于大客…

包管理工具 nvm npm nrm yarn cnpm npx pnpm詳解

包管理工具 nvm npm yarn cnpm npx pnpm npm、cnpm、yarn、pnpm、npx、nvm的區別&#xff1a;https://blog.csdn.net/weixin_53791978/article/details/122533843 npm、cnpm、yarn、pnpm、npx、nvm的區別&#xff1a;https://blog.csdn.net/weixin_53791978/article/details/1…

【Freertos基礎入門】2個Freertos的Delay函數

文章目錄 前言一、vTaskDelay與vTaskDelayUntil二、示例代碼總結 前言 本系列基于stm32系列單片機來使用freerots 任務管理是實時操作系統&#xff08;RTOS&#xff09;的核心功能之一&#xff0c;它允許開發者以并發的方式組織和管理多個任務。FreeRTOS 是一個流行的開源RTO…

嵌入式開發中常用且雜散的命令

1、mount命令 # 掛載linux系統 mkdir /tmp/share mount -t nfs 10.77.66.88:/share/ /tmp/share -o nolock,tcp cd /tmp/share# 掛載Windows系統 mkdir /tmp/windows mount -t nfs 10.66.77.88:/c/public /tmp/windows -o nolock,tcp cd /tmp/windows# 掛載vfat格式的U盤 mkdi…

強訓第32

選擇 D B A A 發送TCP意思應該是已經建立了連接&#xff0c;會超時重傳。在未建立連接的時候&#xff0c;會放棄該鏈接 C A 80端口是http A 交換機攻擊主要有五種&#xff1a;VLAN跳躍攻擊 生成樹攻擊 MAC表洪水攻擊 ARP攻擊 VTP攻擊 B A 2^(32-26)2^(32-27)2^(32-27)128 減去…

基于Java+SpringBoot+Vue+echarts健身房管理系統設計和實現

博主介紹&#xff1a;?全網粉絲30W,csdn特邀作者、博客專家、CSDN新星計劃導師、Java領域優質創作者,博客之星、掘金/華為云/阿里云/InfoQ等平臺優質作者、專注于Java技術領域和畢業項目實戰? &#x1f345;文末獲取源碼聯系&#x1f345; &#x1f447;&#x1f3fb; 精彩專…

maven Jar包反向install到本地倉庫

maven Jar包反向install到本地倉庫 需求實現 需求 項目打包時報錯&#xff0c;缺少一個jar包。 但是在maven倉庫都找不到此jar包&#xff0c;其他人提供了這個jar包。 需要把這個jar包install到本地倉庫&#xff0c;使項目能正常打包運行。 實現 使用git bash命令執行以下腳…

16.3.4 【Linux】系統資源的觀察

free &#xff1a;觀察內存使用情況 系統當中有 2848MB 左右的實體內存&#xff0c;我的 swap 有 1GB 左右&#xff0c; 那我使用free -m 以 MBytes 來顯示時&#xff0c;就會出現上面的信息。Mem 那一行顯示的是實體內存的量&#xff0c;Swap 則是內存交換空間的量。 total 是…

C++多態

文章目錄 &#x1f435;1. 什么是多態&#x1f436;2. 構成多態的條件&#x1f429;2.1 虛函數&#x1f429;2.2 虛函數的重寫&#x1f429;2.3 final 和 override關鍵字&#x1f429;2.4 重載、重寫、重定義對比 &#x1f431;3. 虛函數表&#x1f42f;4. 多態的原理&#x1f…

神經網絡基礎-神經網絡補充概念-17-計算神經網絡的輸出

計算神經網絡的輸出通常涉及前向傳播&#xff08;Forward Propagation&#xff09;的過程&#xff0c;其中輸入數據通過網絡的層級結構&#xff0c;逐步被傳遞并變換&#xff0c;最終生成預測結果。下面我將為你展示一個簡單的神經網絡前向傳播的示例。 假設我們有一個具有以下…

【變形金剛01】attention和transformer所有信息

圖1.來源&#xff1a;Arseny Togulev在Unsplash上的照片 一、說明 這是一篇 長文 &#xff0c;幾乎討論了人們需要了解的有關注意力機制的所有信息&#xff0c;包括自我注意、查詢、鍵、值、多頭注意力、屏蔽多頭注意力和轉換器&#xff0c;包括有關 BERT 和 GPT 的一些細節。因…

OpenCV圖像處理——輪廓檢測

目錄 圖像的輪廓查找輪廓繪制輪廓 輪廓的特征輪廓面積輪廓周長輪廓近似凸包邊界矩形最小外接圓橢圓擬合直線擬合 圖像的矩特征矩的概念圖像中的矩特征 圖像的輪廓 查找輪廓 binary,contours,hierarchycv.findContours(img,mode,method)繪制輪廓 cv.drawContours(img,coutours…

WSL2安裝Ubuntu,配置機器學習環境

文章目錄 1.WSL2安裝Ubuntu&#xff0c;更改安裝位置&#xff0c;作為開發環境供vscode和pycharm使用&#xff1a;2.更換國內源&#xff1a;3.安裝圖形界面&#xff1a;4.安裝cudacudnntorch5.安裝opencv6.調用攝像頭7.使用yolov8測試 WSL全稱Windows Subsystem for Linux&…

印度貨代專線【我國到印度專線有哪些方式】

隨著全球貿易的不斷發展&#xff0c;我國與印度之間的貿易往來也日益頻繁。作為兩個人口最多的國家之一&#xff0c;中國和印度之間的貨物運輸需求不斷增長。為了滿足這一需求&#xff0c;印度貨代專線應運而生&#xff0c;為進出口商提供高效、可靠的貨物運輸服務。本文將探索…

939. 最小面積矩形;2166. 設計位集;2400. 恰好移動 k 步到達某一位置的方法數目

939. 最小面積矩形 核心思想&#xff1a;枚舉矩形的右邊那條邊的兩個點&#xff0c;并用一個哈希表存儲相同縱坐標的最近出現的列的列數,不斷更新最近出現的左邊那條邊。 2166. 設計位集 核心思想&#xff1a;這題主要是時間復雜度的優化&#xff0c;用一個flag來標記當前翻轉…

CSS自學框架之表單

首先我們看一下表單樣式&#xff0c;下面共有5張截圖 一、CSS代碼 /*表單*/fieldset{border: none;margin-bottom: 2em;}fieldset > *{ margin-bottom: 1em }fieldset:last-child{ margin-bottom: 0 }fieldset legend{ margin: 0 0 1em }/* legend標簽是CSS中用于定義…

IOS開發-XCode14介紹與入門

IOS開發-XCode14介紹與入門 1. XCODE14的小吐槽2. XCODE的功能bar一覽3. XCODE項目配置一覽4. XCODE更改DEBUG/RELEASE模式5. XCODE單元測試 1. XCODE14的小吐槽 iOS開發工具一直有個毛病&#xff0c;就是新版本的開發工具的總會有一些奇奇怪怪的bug。比如在我的Mac-Pro&#…

Springboot 實踐(3)配置DataSource及創建數據庫

前文講述了利用MyEclipse2019開發工具&#xff0c;創建maven工程、加載springboot、swagger-ui功能。本文講述創建數據庫&#xff0c;為項目配置數據源&#xff0c;實現數據的增刪改查服務&#xff0c;并通過swagger-ui界面舉例調試服務控制器 創建數據庫 項目使用MySQL 8.0.…

vue基礎知識四:Vue實例掛載的過程

一、思考 我們都聽過知其然知其所以然這句話 那么不知道大家是否思考過new Vue()這個過程中究竟做了些什么&#xff1f; 過程中是如何完成數據的綁定&#xff0c;又是如何將數據渲染到視圖的等等 一、分析 首先找到vue的構造函數 源碼位置&#xff1a;src\core\instance\…

一生一芯4——使用星火應用商店在ubuntu下載QQ、微信、百度網盤

星火應用商店可以非常方便的完成一些應用的下載&#xff0c;下面是官方網址 http://spark-app.store/download 我使用的是intel處理器&#xff0c;無需下載依賴項&#xff0c;直接點擊軟件本體 我這里下載amd64,根據自己的處理器下載對應版本 sudo apt install ./spark-stor…