我正在嘗試使用 ListTile 構建一個 ListView
代碼在這里:
List<bool> isRed2 = [
true,true,false,false,
true,true,true,false,
false,false,true,true,
false,true,true,true,
true,];
return ListView.builder(
padding: EdgeInsets.all(0),
scrollDirection: Axis.vertical,
shrinkWrap: true,
itemCount: isRed2.length,
itemBuilder: (context, i) => ListTile(
dense: true,
minVerticalPadding: 0,
contentPadding: EdgeInsets.all(0),
minLeadingWidth: 0,
horizontalTitleGap: 0,
title: isRed2[i]
? Container(
height: 50,
color: Colors.red,
)
: Container(
height: 1,
color: Colors.blue,
)));
結果看起來像:
我設定了那些值為 false height = 1 的元素,但它們仍然有很多空間。
知道如何設定高度以匹配小部件或跳過這些值是錯誤的嗎?
問題:
- 不能在 ListTile 外部添加 Container 或 SizedBox,顯示長串列時會變慢。
- 需要 ListTile 以更快地顯示,添加沒有 ListTile 的小部件會變慢。
- 將值為“真”的元素復制到新串列并通過它構建對于我的情況來說不是一個好主意。
uj5u.com熱心網友回復:
嘗試設定visualDensity閱讀更多關于ListTile
ListTile(
contentPadding: EdgeInsets.zero,
dense: true,
visualDensity: VisualDensity(vertical: -4),
title: Text('ListTile'),
),
uj5u.com熱心網友回復:
ListTiles視覺上的高度最多應為 32(密集:true)或 40(密集:false),
它將根據場景獲得默認高度。如果需要,不要使用 ListTile 使用 Column 和 row。
return ListView.builder(
padding: EdgeInsets.all(0),
scrollDirection: Axis.vertical,
itemCount: isRed2.length,
itemBuilder: (context, i) => isRed2[i]
? Container(
height: 50,
color: Colors.red,
)
: Container(
height: 1,
color: Colors.blue,
));
SizedBox "outside" ListTile據我所知,添加不會造成任何性能問題,您可以洗掉,您可以在 SrinkWarp 上 shrinkWrap: true查看此視頻。
你可以ListTile用SizedBox.
return ListView.builder(
padding: EdgeInsets.all(0),
scrollDirection: Axis.vertical,
itemCount: isRed2.length,
itemBuilder: (context, i) => SizedBox(
height: isRed2[i] ? 50 : 1,
child: ListTile(
tileColor: isRed2[i] ? Colors.red : Colors.blue,
),
));
還要檢查條子的性能。
uj5u.com熱心網友回復:
首先,VisualDensity 是設定串列圖塊的緊湊程度,它不會使高度為零。您不能擁有高度為零的串列拼貼。
在第 1071 行的 list_tile.dart 檔案(串列圖塊的實作)中,您可以看到:
double get _defaultTileHeight {
final bool hasSubtitle = subtitle != null;
final bool isTwoLine = !isThreeLine && hasSubtitle;
final bool isOneLine = !isThreeLine && !hasSubtitle;
final Offset baseDensity = visualDensity.baseSizeAdjustment;
if (isOneLine)
return (isDense ? 48.0 : 56.0) baseDensity.dy;
if (isTwoLine)
return (isDense ? 64.0 : 72.0) baseDensity.dy;
return (isDense ? 76.0 : 88.0) baseDensity.dy;
}
如果你跟蹤它,你最終會看到:
size = constraints.constrain(Size(tileWidth, tileHeight));
assert(size.width == constraints.constrainWidth(tileWidth));
assert(size.height == constraints.constrainHeight(tileHeight));
這意味著它的高度也不會為零,此處串列 tile doc 中的第一行是:
單個固定高度的行,通常包含一些文本以及前導或尾隨圖示。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/486040.html
下一篇:從json獲取值時保持陣列順序
