ListView列表内容为图片,可点击,单选模式。
点击图片Item后该Item标记选中状态,其他Item重置未选中状态。
数据量稍大,至少保证想点击的Item可见时第一个Item超出屏幕。
当list存放base64数据,在构造Item的函数内转换为Image时,点击目标Item后,发现列表有明显刷新的表现,并且列表回到顶部,需要向上滑动才能看到标记选中的Item。
Widget getListViewChildren(BuildContext context, int index) {
return GestureDetector(
child: Container(
alignment: Alignment.center,
margin: EdgeInsets.only(top: UiUtil.uiPaddingTB / 2.0, bottom: UiUtil.uiPaddingTB / 2.0),
decoration: BoxDecoration(
color: UiUtil.colorMainBg,
border: Border.all(color: _selectedIndex == index ? UiUtil.primaryColor : UiUtil.colorTextGray),
borderRadius: BorderRadius.circular(10.0),
),
child: Image.memory(base64Decode(list[index]), fit: BoxFit.fitWidth),
),
onTap: () {
setState(() {
_selectedIndex = index;
});
},
);
}
当list存放Image数据,在构造Item的函数内直接使用数据,点击目标Item后,列表没有明显刷新表现,并且列表未滑动,保持在点击前的位置。
Widget getListViewChildren(BuildContext context, int index) {
return GestureDetector(
child: Container(
alignment: Alignment.center,
margin: EdgeInsets.only(top: UiUtil.uiPaddingTB / 2.0, bottom: UiUtil.uiPaddingTB / 2.0),
decoration: BoxDecoration(
color: UiUtil.colorMainBg,
border: Border.all(color: _selectedIndex == index ? UiUtil.primaryColor : UiUtil.colorTextGray),
borderRadius: BorderRadius.circular(10.0),
),
child: list[index],
),
onTap: () {
setState(() {
_selectedIndex = index;
});
},
);
}