颤动水平滚动一项一项

Posted

技术标签:

【中文标题】颤动水平滚动一项一项【英文标题】:Flutter horizontal scroll one item at one 【发布时间】:2020-06-18 19:26:58 【问题描述】:

免责声明:- Flutter 社区的新功能

在原生 android 代码中,我使用手势检测器完成了类似的工作,但我想知道如何在颤振中也实现相同的效果。就像我在水平列表中有卡片列表,当用户滚动列表时,一次只能滚动一项。任何实现这一目标的想法或建议将不胜感激。

【问题讨论】:

您可以使用 PageControl 来实现。 【参考方案1】:

我建议你查看PageView。

有了这个,您可以将卡片列表转换为 PageView 的子项,它可以让您一次滑动一页。它看起来像这样:

final controller = PageController(
  initialPage: 0,
);

final pageView = PageView(
  controller: controller,
  scrollDirection: Axis.horizontal,
  children: <Widget>[
    // your card list here
  ],
  onPageChanged: (index) =>
    setState(() => selectedPageIndex = index),
);

【讨论】:

【参考方案2】:

您可能想查看flutter_swiper 插件。

【讨论】:

【参考方案3】:

我通过scroll_snap_list 包实现了这一点。您需要设置一个固定的项目大小,并根据该固定大小进行滚动。

    ScrollSnapList(
          selectedItemAnchor: SelectedItemAnchor.START,
          itemSize: 163,
          onItemFocus: (index) ,
          duration: 300,
          scrollDirection: Axis.horizontal,
          itemCount: 10,
          itemBuilder: (BuildContext context, int index) 
            return Container(
              width: 155,
              height:155,
            );
          ,
        ),

【讨论】:

【参考方案4】:

您可以使用带有属性的简单 ListView Widget:physics: PageScrollPhysics()

    ListView(
        physics: PageScrollPhysics(),   
        children: [
        //Your list elements here
        ],   
    )

【讨论】:

以上是关于颤动水平滚动一项一项的主要内容,如果未能解决你的问题,请参考以下文章

C# WPF:在高度属性设置为“自动”的 ListView 中防止水平滚动条覆盖最后一项

如何仅显示从当前位置到水平 RecyclerView 的一项?

水平滚动文本颤动

在颤动的webview中禁用水平滚动

如何在颤动中制作水平滚动动画

我如何创建颤动的神社屏幕 ui(水平滚动)