【问题标题】:How to Achieve Smooth Scrolling When Using SingleChildScrollView and Wrap Widget with a Lot of Children?使用 SingleChildScrollView 和 Wrap Widget with a lot of children 时如何实现平滑滚动?
【发布时间】:2020-05-31 06:11:54
【问题描述】:

我正在使用 Wrap 小部件来包装一堆卡片,有时卡片的数量很多,导致滚动不流畅,有时如果卡片有图像,应用程序会停止。 Wrap 允许跨不同设备大小的动态行为。有什么办法可以解决这个问题。我想知道我是否可以只构建显示的卡而不会给其他卡增加内存负担。?如何保证滚动流畅?

       SingleChildScrollView(
            child: Center(
              child: Container(
                width: devWidth,
                margin: EdgeInsets.only(top: 15, bottom: 15),
                child: Wrap(
                    alignment: WrapAlignment.spaceEvenly,
                    runSpacing: devWidth * 0.03,
                    children: myList.map<Widget>((item) {
                      return itemCard(item);
                    }).toList()),
              ),
            ),
          )

【问题讨论】:

  • myList 平均大小是10-100? 100-1000?更多?
  • 从夫妻到1000人不等
  • 你不能使用ListView.builder,其中每个项目都是一个Wrap 小部件,其中包含一些小的(比如说20-40)个Cards?
  • 我从未尝试过,但我认为它更难管理。有些行可能是半空的。

标签: flutter


【解决方案1】:

你应该使用 ListView.seperated() 而不是 Wrap

ListView.separated(
    itemCount: myList.length,
    separatorBuilder: (BuildContext Context, int index) {
       return SizedBox(height: devWidth * 0.03);
    },
    itemBuilder: (BuildContext context, int index) {
       return itemCard(myList[index]);
    },
)

对于每行使用多个项目,请使用以下代码:

ListView.separated(
    itemCount: myList.length / 3,
    separatorBuilder: (BuildContext Context, int index) {
       return SizedBox(height: devWidth * 0.03);
    },
    itemBuilder: (BuildContext context, int index) {
    int idx = index * 3;
           return Row(
              children : <Widget>[
                  itemCard(myList[idx]),
                  itemCard(myList[idx + 1]),
                  itemCard(myList[idx + 2])
              ]
           );
    },
)

【讨论】:

  • 在这种情况下不会是每行卡片吧?我希望具有特定宽度的卡片能够根据设备或浏览器大小动态地排成一行。
  • 列表视图逐行显示项目,在这种情况下,每行只显示一张卡片,它会自动适应设备宽度
  • 我想要的是将卡片尽可能地放在一行中
  • 您要在一行中添加多张卡片吗?
  • 让我们说卡片宽度固定为 200 px 。并且设备宽度是 600 像素然后我想每行有 3 张卡.. 等等
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-08-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-23
  • 2022-06-14
相关资源
最近更新 更多