美文网首页
Flutter列表滚动到指定Widget位置

Flutter列表滚动到指定Widget位置

作者: 倪大头 | 来源:发表于2022-11-04 14:17 被阅读0次

    使用 Scrollable.ensureVisible(context); 完成滚动

    SingleChildScrollView(
      child: Column(
        children: [
          _item1(),
          _item2(),
          _item2(),
        ],
      ),
    )
    

    先给列表中的每个item设置key

    Widget _item1() {
      return Container(
        key: const GlobalObjectKey(1),
        //...
      );
    }
    
    Widget _item2() {
      return Container(
        key: const GlobalObjectKey(2),
        //...
      );
    }
    
    Widget _item3() {
      return Container(
        key: const GlobalObjectKey(3),
        //...
      );
    }
    

    点击触发滚动

    onTap: (int key) {
      if (GlobalObjectKey(key).currentContext != null) {
        Scrollable.ensureVisible(GlobalObjectKey(key).currentContext!);
      }
    }
    

    Scrollable.ensureVisible传入指定GlobalObjectKey的currentContext,即可滚动到指定Widget的位置。

    ensureVisible也可以设置Curve动画


    image.png

    这里列表使用的组件是SingleChildScrollView而非ListView,因为ListView只会渲染当前屏幕中的item,当item划出屏幕就会被回收,item的currentContext也就获取不到了,因而无法完成滚动

    相关文章

      网友评论

          本文标题:Flutter列表滚动到指定Widget位置

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