gpt4 book ai didi

flutter - SliverList/SliverChildBuilderDelegate 提供初始索引或允许负索引

转载 作者:IT老高 更新时间:2023-10-28 12:46:15 24 4
gpt4 key购买 nike

我目前正在使用 SliverList 和 SliverChildBuilderDelegate 在 Flutter 中构建一个日历 View ,这样我就不必一次渲染日历中的每个项目。

第一个日期是纪元时间,1970 年 1 月 1 日,最后一个日期是在今天日期之后计算的某个奇数时间。

我的问题是,当我第一次渲染 View 时,我希望它从今天开始渲染 View ,而不是在 1970 年 1 月 1 日。但是,如果我将今天作为 0 索引,则不允许负索引(或提供)给构建器委托(delegate),因此您无法从该日期向上滚动。据我所知,您也无法向构建器或列表提供初始索引,因此我也无法将纪元时间设为 0 索引,因为列表将从那里开始,这造成了相当可怕的后果经验!我不完全确定如何继续。

有人有什么建议吗?

最佳答案

我不知道有什么简单的方法可以做到这一点,ListViewSliverList 中都没有 initialPositition 参数。我能想到的原因是列表是嵌入在 ScrollView 上的一系列小部件,因此为了设置初始项目,您需要知道该项目的确切滚动偏移量.

默认情况下,这两个列表小部件不假设其项目的高度,因此通常发现偏移量需要您一一计算它之前的所有小部件的高度,这是低效的。

但是,如果您事先知道所有列表项的高度,或者您可以通过 ListView.itemExtent 字段或 将它们强制为固定高度,则可以使事情变得更容易SliverFixedExtentList.


如果您事先知道(或强制)列表项的高度,您可以通过 ScrollController 中的 initialScrollOffset 设置初始项。这是一个带有 ListView 的示例。

@override
Widget build(BuildContext context) {
final _itemExtent = 56.0; // I know item heights beforehand
final generatedList = List.generate(500, (index) => 'Item $index');

return ListView(
controller: ScrollController(initialScrollOffset: _itemExtent * 401),
children: generatedList
.map((index) =>
ListTile(title: Text(index, style: TextStyle(fontSize: 20.0))))
.toList(),
);
}

或者在 SliverList 中。

@override
Widget build(BuildContext context) {
final _itemExtent = 56.0;
final generatedList = List.generate(500, (index) => 'Item $index');

return CustomScrollView(
controller: ScrollController(initialScrollOffset: _itemExtent * 401),
slivers: [
SliverFixedExtentList(
itemExtent: _itemExtent, // I'm forcing item heights
delegate: SliverChildBuilderDelegate(
(context, index) => ListTile(
title: Text(
generatedList[index],
style: TextStyle(fontSize: 20.0),
),
),
childCount: generatedList.length,
),
),
],
);
}

在这两种情况下,这都是您首次打开应用时的结果。

enter image description here

关于flutter - SliverList/SliverChildBuilderDelegate 提供初始索引或允许负索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50617231/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com