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

2024-05-11

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

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

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

有没有人有什么建议?


我不知道有什么简单的方法可以做到这一点,没有initialPositition参数输入ListView nor in SliverList。我能想到的原因是列表是嵌入在ScrollView,这样为了设置初始项目,您需要知道该项目的确切滚动偏移量。

默认情况下,两个列表小部件不会对其项目的高度进行假设,因此一般来说,查找偏移量需要您一一计算其之前的所有小部件的高度,这是低效的。

但是,如果您事先知道所有列表项的高度,或者可以通过以下任一方式强制它们具有固定高度,则可以使事情变得更容易ListView.itemExtent场或SliverFixedExtentList.


如果您事先知道(或强制)列表项的高度,您可以通过initialScrollOffset在你的ScrollController。这是一个例子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(),
  );
}

Or in a 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,
        ),
      ),
    ],
  );
}

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

flutter - SliverList / SliverChildBuilderDelegate 提供初始索引或允许负索引 的相关文章

  • 如何在父视图和子视图中使用组件两次(DI 是共享的,comp 是单例)

    我有一个按钮组件 具有应用程序特定行为 我打算在应用程序中广泛使用它 问题是 当我有一个使用此按钮的父 子视图时 单击父按钮会触发子视图按钮的 操作 如果不这样做 您自然不会明白发生了什么有多年的面向对象编程经验 让年轻的学校新手使用 da
  • Dart 是否支持 PHP,例如 $_SESSION(会话)?

    服务器端 Dart 是否支持像 PHP 中那样的会话
  • Android Studio Flutter 项目错误:内存不足

    我在 Android Studio 上运行任何 flutter 项目 都会抛出内存不足错误 控制台中显示的消息如下所示 e b build slave windows engine build src third party dart ru
  • Flutter WillPopScope 与 AlertDialog 迁移到空安全

    我最近将我的 Flutter 应用程序迁移到空安全 但 WillPopScope 与 AlertDialog 结合使用会导致问题 WillPopScope期望Future
  • 类型“Future”不是类型转换中“List”类型的子类型

    我试图从我的 Firestore 中获取确定集合中的所有文档 之后 我想将它们设置在文档列表中 列表的每个位置代表一个文档 但是 当我编写代码时 我收到此错误 类型 Future 不是类型转换中类型 List 的子类型 import pac
  • Flutter 使用 RichText 填空

    我几乎完成了我的应用程序的填空实现 但不幸的是我不断遇到布局问题 然而 当我不断解决问题时 我几乎已经完成了 这是到目前为止的代码 RichText text TextSpan text dummy style TextStyle colo
  • AppLifeCycleState.detached 未被调用

    import package flutter material dart void main gt runApp MyApp class MyApp extends StatelessWidget override Widget build
  • Flutter Web 平台检查

    我正在尝试找到一种方法来查看我的 flutter web 项目正在哪个平台 iOS 或 Android 上运行 当我使用if Platform isIOS do something 我面临以下错误 Error Unsupported ope
  • 未安装 Visual Studio;这对于 Windows 开发是必要的

    My 颤振医生 https docs flutter dev get started install windows run flutter doctor是说 Visual Studio develop for Windows X Visu
  • 空安全 AppLocalization 字符串的最佳方法

    Question 我在用AppLocalizations of context myString在我的 null safe flutter 应用程序中国际化字符串 我的 IDE 告诉我AppLocalizations of context
  • 将 SQL Server 与 Dart 结合使用

    我还没有找到很好的答案 所以我想尝试一下得到答案 将 Microsoft SQL Server 与 Dart 结合使用的最佳方式是什么 我需要它能够从基本上任何操作系统 网络和移动设备上使用它 我觉得最好的方法可能是 GraphQL 但我对
  • 从后台恢复后,Flutter GoogleMap 为空白

    我遇到以下问题 我的 Flutter 应用程序使用 GoogleMap 地图最初加载得很好 但是 如果我将应用程序置于后台并稍后恢复 地图将保持空白 Google 徽标仍然显示 就像未指定 API 密钥时发生的情况一样 我的多边形叠加层也不
  • 使用 Flutter 3.10 / Dart 3.0 进行 VS Code 调试<优化>

    在最新的 颤振 升级 之后 我在 VS Code 调试期间查看某些变量时遇到问题 如何在悬停时查看变量的内容而不是获取此内容 Screenshot of hovering variable 这仅发生在某些变量上 其他变量我可以正常查看内容
  • 使用 EditableText 进行 Flutter

    我正在尝试弄清楚如何在 Flutter 中使用 TextEditor 我有 卡片编辑器 基本上我希望能够处理相当于一段文本的内容 new EditableText autofocus true maxLines null backgroun
  • Flutter - 选择 TextFormField 时键盘不显示

    我目前遇到一个问题 当我选择任何一个时 键盘不会出现TextFormFielda 内的小部件Form小部件 这是表单的代码 位于我的内部CreateAccountForm有状态的小部件 import package flutter mate
  • 在 Flutter 中从 Play 商店获取产品时应用内购买崩溃

    我在安装和实施后遇到问题应用内购买插件 https pub dev packages in app purchaseFlutter 团队提供 到目前为止我做了什么 在 Play 商店中添加了 2 个可见且活跃的产品 提交了用于 alpha
  • 在 flutter 中强制重建有状态子部件

    假设我有一个主屏幕 有状态小部件 其中有一个变量count作为状态 在此主屏幕中 有一个按钮和另一个有状态小部件 我们称之为MyListWidget MyListWidget初始化它自己的小部件initState取决于的值count多变的
  • 更改项目名称

    Flutter项目的项目名称可以修改吗 项目名称是指您在创建 flutter 项目时提供的名称flutter create name 这取决于您想要实现的目标 如果您想更改手机菜单中显示的应用程序名称以及应用程序图标 则必须更改androi
  • 如何在 Flutter 上的 sqlite 中存储对象数据列表?

    如何在 Flutter 上的 SQLite 中存储对象数据列表 API 附带的 Json 数据 images id 10 name img1 id 11 name img2 在使用 SQLite 存储对象之前 您需要序列化对象列表 首先 你
  • 向上滚动时固定项目

    所以我有以下屏幕 我正在寻找一种方法 使得当用户向上滚动时 包含进度条和这 4 个数据字段 ItemHeader 的小部件将向上滚动 但搜索容器 SearchTextField 将被固定 到顶部 当然 当用户向下滚动时 它应该重新出现 我找

随机推荐