重新構(gòu)建嵌套列表
這一節(jié)使用 Slivers 而不是 ListViews 重建相同的 UI。
前奏在這里
??https://blog.51cto.com/jianguo/4653002??
使用 Slivers 的列表列表下面的代碼構(gòu)建了與之前相同的 UI,但這次它使用??Slivers?
? 而不是收縮包裝??ListView?
?對(duì)象。本頁(yè)的其余部分將引導(dǎo)您逐步完成更改。
如何將嵌套列表遷移到 Slivers
第1步
首先,將最外面的 ListView 更改為??SliverList?
?.
// Before
Widget build(BuildContext context) {
return ListView.builder(
itemCount: numberOfLists,
itemBuilder: (context, index) => innerLists[index],
);
}
變成:
// After
Widget build(BuildContext context) {
return CustomScrollView(slivers: innerLists);
}
第2步
其次,將內(nèi)部列表的類型從??List?
?更改為 ??List?
?。
// Before
List innerLists = [];
變成:
// After
List innerLists = [];
第 3 步
現(xiàn)在是時(shí)候重建內(nèi)部列表了。的??SliverList?
?類是比原始略有不同??ListView?
?的類,與主要差異是的外觀??delegate?
?。原始版本?
?ListView?
?對(duì)所有內(nèi)容都使用對(duì)象,不知道內(nèi)部構(gòu)建器構(gòu)造函數(shù)將被??shrinkWrap?
?.
// Before
void initState() {
super.initState();
for (int i = 0; i < numberOfLists; i++) {
final _innerList = [];
for (int j = 0; j < numberOfItemsPerList; j++) {
_innerList.add(const ColorRow());
}
innerLists.add(
ListView.builder(
itemCount: numberOfItemsPerList,
itemBuilder: (BuildContext context, int index) => _innerList[index],
shrinkWrap: true,
physics: const NeverScrollableScrollPhysics(),
),
);
}
}
更改后,??ListView?
?對(duì)象被替換為??SliverList?
?對(duì)象,每個(gè)對(duì)象都使用一個(gè)??SliverChildBuilderDelegate?
?來(lái)提供高效的按需構(gòu)建。
// After
void initState() {
super.initState();
for (int i = 0; i < numLists; i++) {
final _innerList = [];
for (int j = 0; j < numberOfItemsPerList; j++) {
_innerList.add(const ColorRow());
}
innerLists.add(
SliverList(
delegate: SliverChildBuilderDelegate(
(BuildContext context, int index) => _innerList[index],
childCount: numberOfItemsPerList,
),
),
);
}
}
完整代碼:
import package:flutter/material.dart;
import dart:math as math;
void main() {
runApp(SliversApp());
}
class SliversApp extends StatelessWidget {
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
title: ShrinkWrap vs Slivers,
home: Scaffold(
appBar: AppBar(
title: const Text("Revenge of the Slivers"),
),
body: const ShrinkWrapSlivers(),
),
);
}
}
class ShrinkWrapSlivers extends StatefulWidget {
const ShrinkWrapSlivers({
Key? key,
}) : super(key: key);
_ShrinkWrapSliversState createState() => _ShrinkWrapSliversState();
}
class _ShrinkWrapSliversState extends State {
List innerLists = [];
final numLists = 15;
final numberOfItemsPerList = 100;
void initState() {
super.initState();
for (int i = 0; i < numLists; i++) {
final _innerList = [];
for (int j = 0; j < numberOfItemsPerList; j++) {
_innerList.add(const ColorRow());
}
innerLists.add(
SliverList(
delegate: SliverChildBuilderDelegate(
(BuildContext context, int index) => _innerList[index],
childCount: numberOfItemsPerList,
),
),
);
}
}
Widget build(BuildContext context) {
return CustomScrollView(slivers: innerLists);
}
}
class ColorRow extends StatefulWidget {
const ColorRow({Key? key}) : super(key: key);
State createState() => ColorRowState();
}
class ColorRowState extends State {
Color? color;
void initState() {
super.
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/124254.html
相關(guān)文章
-
flutter 中的列表的性能優(yōu)化前奏#yyds干貨盤點(diǎn)#
摘要:只有內(nèi)部列表需要設(shè)置。中的列表的性能優(yōu)化前奏干貨盤點(diǎn)而且你滑動(dòng)的快的時(shí)候列表會(huì)抖動(dòng)重新構(gòu)建嵌套列表要了解如何使您的用戶免受卡頓威脅,請(qǐng)等待我的第二節(jié),下一節(jié)將使用而不是重建相同的。 這里是堅(jiān)果前端小課堂,大家喜歡的話,可以關(guān)注我的公眾號(hào)堅(jiān)果前端,,或者加我好友,獲取更多精彩內(nèi)容嵌套列表 - ShrinkWrap 與 Sli...
-
Flutter 中輪播圖詳解[Flutter專題31]#yyds干貨盤點(diǎn)#
在 Flutter 中創(chuàng)建圖像輪播 從社交媒體應(yīng)用程序到電子商務(wù)應(yīng)用程序,大多數(shù)現(xiàn)代應(yīng)用程序都有某種圖像輪播來(lái)展示產(chǎn)品、圖像或廣告。 由于 flutter 提供的內(nèi)置小部件,從頭開(kāi)始實(shí)現(xiàn)圖像輪播并不像您想象的那么難。 在本文中,您將學(xué)習(xí)如何從頭開(kāi)始創(chuàng)建圖像輪播并根據(jù)需要進(jìn)行自定義。最后,您將學(xué)習(xí)如何使用carousel_slider插件以更少的代碼創(chuàng)建圖像輪播。 這些是我...
-
Flutter — 加快開(kāi)發(fā)速度的 IDE 快捷操作#yyds干貨盤點(diǎn)#
摘要:夏天加快開(kāi)發(fā)速度的快捷操作干貨盤點(diǎn)快捷方式你可以用做更多神奇的事情選項(xiàng)返回這是您在中加快開(kāi)發(fā)速度的魔杖。加快開(kāi)發(fā)速度的快捷操作干貨盤點(diǎn)選項(xiàng)卡不喜歡小部件用魔術(shù)棒取下它。 Flutter — 加快開(kāi)發(fā)速度的 IDE 快捷方式上一個(gè)關(guān)于??vscode 的插件??推薦大家看的過(guò)癮不,今天繼續(xù)給大家?guī)?lái)一些關(guān)于android s...
-
#yyds干貨盤點(diǎn)#Flutter 如何禁止手機(jī)橫屏[Flutter專題32]
摘要:最后如果不起作用,可以分別做如下設(shè)置干貨盤點(diǎn)如何禁止手機(jī)橫屏專題橫屏安卓如下所示干貨盤點(diǎn)如何禁止手機(jī)橫屏專題另外上有個(gè)插件可以去試一下,我在這兒就不做解釋了。 這里是堅(jiān)果前端小課堂,歡迎關(guān)注公眾號(hào)堅(jiān)果前端,問(wèn)題引出 群友發(fā)來(lái)問(wèn)題: Flutter 怎么禁止橫屏顯示呀,網(wǎng)上說(shuō)的幾個(gè)方法 都沒(méi)有效 ...
-
【Flutter 專題】15 圖解 ListView 異步加載數(shù)據(jù)與等待 #yyds干貨盤點(diǎn)#
摘要:小菜前兩天再學(xué)時(shí),整理了一下在列表中展示多種不同樣式,今天繼續(xù)深入學(xué)習(xí)異步請(qǐng)求數(shù)據(jù)并加載新聞列表以及初始進(jìn)入頁(yè)面的等小知識(shí)點(diǎn)。小菜剛接觸時(shí)間不長(zhǎng),還有很多不清楚和不理解的地方,如果又不對(duì)的地方還希望多多指出。 小菜前兩天再學(xué) ListView 時(shí),整理了一下在列表中展示多種不同 item 樣式,今天繼續(xù)深入學(xué)習(xí)...
發(fā)表評(píng)論
0條評(píng)論
番茄西紅柿
男|高級(jí)講師
TA的文章
閱讀更多tensor
閱讀 736·2023-04-25 19:43
Windows 下安裝 XGBoost
閱讀 3981·2021-11-30 14:52
Hadoop 2.6.0 啟動(dòng)問(wèn)題 lib/native/libhadoop.so which mi
閱讀 3807·2021-11-30 14:52
VmShell:黑五美國(guó)VPS,免費(fèi)先開(kāi)通測(cè)試,滿意后付款!支持tiktok美區(qū)
閱讀 3871·2021-11-29 11:00
百度智能云:云產(chǎn)品特惠福利,1核2G輕量應(yīng)用服務(wù)器僅48元/年
閱讀 3802·2021-11-29 11:00
Linux系統(tǒng)和寶塔面板如何啟用禁ping功能?
閱讀 3904·2021-11-29 11:00
301重定向怎么做?301重定向設(shè)置方法有幾種
閱讀 3580·2021-11-29 11:00
wordpress網(wǎng)站重定向次數(shù)過(guò)多的解決方法
閱讀 6184·2021-11-29 11:00