美文网首页
Flutter ListView点击Item刷新数据状态导致列表

Flutter ListView点击Item刷新数据状态导致列表

作者: anliner | 来源:发表于2021-03-29 11:09 被阅读0次

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;
        });
      },
    );
  }

相关文章

网友评论

      本文标题:Flutter ListView点击Item刷新数据状态导致列表

      本文链接:https://www.haomeiwen.com/subject/gcavhltx.html