return ListView.builder(
itemCount: numItems * 2,
padding: const EdgeInsets.all(16.0),
itemBuilder: (BuildContext context, int i) {
if (i.isOdd) return const Divider();
final index = i ~/ 2 + 1;
return _buildRow(index);
//Explain each line fully
答案 0 :(得分:0)
return ListView.builder(
itemCount: numItems * 2,
padding: const EdgeInsets.all(16.0),
itemBuilder: (BuildContext context, int i) {
if (i.isOdd) return const Divider();
final index = i ~/ 2 + 1;
return _buildRow(index);
}
);
属性 itemCount 是为 numItems * 2 次运行此循环(构建器),即假设 numItems 的值为 5,那么它将构建小部件或循环将运行 5*2=10 次。< /p>
属性填充会将整个列表周围的间距放置 16 像素,即从屏幕左侧开始,您的小部件将相距 16 像素,其他边也类似。
在这里的 itemBuilder 中有循环/构建器的主体,在这里我们有一个条件,如果 i 为奇数,则电话屏幕上将显示分隔符,否则 index 的值将变为 i~/2+ 1.
比如11的值是5那么index=11~/2+1
index=5+1=6(~/ 这个运算符将 11 除以 2,结果是 5.5,由于 ~ 它变成 5)
在此之后,您将返回小部件 _buildRow() 并将 index 的值传递给它。
在此之后,i 的值将递增,并且第 3 点将再次重复,就像我们在其他循环中递增并再次运行循环体一样。