对 SliverList 中的变化进行动画处理

2024-01-10

我目前有一个SliverList其项目是动态加载的。问题是一旦这些项目被加载,SliverList更新而不动画更改,在加载和加载之间进行转换very刺耳的。

我看到AnimatedList存在,但它不是条子,所以我不能将它直接放入CustomScrollView.


您现在可能知道这一点,但不妨在这里提及它以帮助人们。

您可以使用银条动画列表 https://api.flutter.dev/flutter/widgets/SliverAnimatedList-class.html。它达到了所需的结果。

SliverAnimatedList 构造:

itemBuilder定义新项目的构建方式。构建者通常应该返回一个Transition小部件,或任何将使用animation范围。

SliverAnimatedList(
     key: someKey,
     initialItemCount: itemCount,
     itemBuilder: (context, index, animation) => SizeTransition(
              sizeFactor: animation,
              child: SomeWidget()
     )
)

动态添加/删除

你可以通过使用来做到这一点insertItem and removeItem的方法SliverAnimatedListState。您可以通过以下任一方式访问状态:

  1. 提供一个Key to the SliverAnimatedList并使用key.currentState
  2. using SliverAnimatedList.of(context)静态方法。

如果您需要从列表外部进行更改,则始终需要使用该密钥。

这是一个完整的例子来澄清事情。通过点击添加项目FloatingActionButton并通过点击项目本身来删除。我同时使用了key and of(context)访问方式SliverAnimatedListState.

import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';

class SliverAnimatedListTest extends StatefulWidget {
  @override
  _SliverAnimatedListTestState createState() => _SliverAnimatedListTestState();
}

class _SliverAnimatedListTestState extends State<SliverAnimatedListTest> {
  int itemCount = 2;

  // The key to be used when accessing SliverAnimatedListState
  final GlobalKey<SliverAnimatedListState> _listKey =
      GlobalKey<SliverAnimatedListState>();

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text("Sliver Animated List Test")),

      // fab will handle inserting a new item at the last index of the list.
      floatingActionButton: FloatingActionButton(
        child: Icon(Icons.add),
        onPressed: () {
          _listKey.currentState.insertItem(itemCount);
          itemCount++;
        },
      ),


      body: CustomScrollView(
        slivers: <Widget>[
          SliverAnimatedList(
              key: _listKey,
              initialItemCount: itemCount,

              // Return a widget that is wrapped with a transition
              itemBuilder: (context, index, animation) => 
                 SizeTransition(
                    sizeFactor: animation,
                    child: SomeWidget(
                        index: index,

                        // Handle removing an item using of(context) static method.
                        // Returned widget should also utilize the [animation] param
                        onPressed: () {
                          SliverAnimatedList.of(context).removeItem(
                              index,
                              (context, animation) => SizeTransition(
                                  sizeFactor: animation,
                                  child: SomeWidget(
                                    index: index,
                                  )));

                          itemCount--;
                        }),
                  ))
        ],
      ),
    );
  }
}

class SomeWidget extends StatelessWidget {
  final int index;

  final Function() onPressed;

  const SomeWidget({Key key, this.index, this.onPressed}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Padding(
        padding: const EdgeInsets.all(20.0),
        child: Center(
            child: FlatButton(
              child: Text("item $index"), 
              onPressed: onPressed,
            )));
  }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

对 SliverList 中的变化进行动画处理 的相关文章

随机推荐

  • Jenkins 从属代理启动失败

    当使用 从从属计算机上的浏览器启动代理 选项从从属计算机启动从属代理时 它会失败 它会打开一个 Slave agent jnlp 窗口 当使用 Java Web Start Launcher 打开时 它会弹出启动应用程序 然后另一个弹出窗口
  • CInt 不会一致地舍入 Double 值 - 如何删除小数部分?

    我偶然发现了一个问题CInt https msdn microsoft com en us library s2dy91zy aspx并将双精度数转换为整数 问题如下 CInt 10 5 Result is 10 CInt 10 51 Re
  • 设置更新后如何重新启动此壁纸引擎?

    我正在创建动态壁纸 并使用本教程作为起点 http code tutsplus com tutorials create a live wallpaper on android using an animated gif cms 23088
  • 如何在 SSRS 中导出不带标题的 csv

    有没有办法关闭 CSV 导出的标题just oneSSRS 报告 我使用的是 Report Builder 3 并且从报告中删除了标题 但是当导出到 CSV 时 它们又回来了 我找不到任何地方可以关闭它们 我见过这个问题 https sta
  • 现在删除 .tfignore 文件中已签入的文件

    我有一位开发人员一直在检查他的 TFS 分支的所有信息 现在我已经掌握了他的分支 我注意到他没有 tfignore 文件 并且 bin 和包文件夹和文件目前都在源代码管理中 我已经实现了一个 tfignore 文件来在将来排除这些文件 但也
  • 鼠标光标根据事件变化

    我有一个要发送的 ajax 请求 当请求开始时 我有 document body style cursor wait 这会立即将光标的外观更改为旋转的圆圈 当请求结束时 我有 document body style cursor defau
  • React Native FlatList - 可变列

    我正在开发一个无限滚动的产品列表 其中包含不同类型的产品 产品可以是特色产品 也可以是非特色产品 当产品展示时 我们的产品卡设计会占据手机的整个宽度 否则设计需要 2 列行 数据看起来像这样 type featured product na
  • 图像的鼠标按下、鼠标移动和鼠标松开事件?

    如何用鼠标移动图像 onmousedown and onmousemove处理的事件是否正确
  • 立方到等距柱状投影算法

    我有一个定义周围环境的立方体贴图纹理 但是我需要将其传递给仅适用于纬度 经度贴图的程序 我真的不知道如何进行翻译 这里有什么帮助吗 换句话说 我需要从这里出发 对此 我认为该图像在 x 轴上有一个额外的 90 旋转 update 我得到了投
  • Yii2 创建一个没有模型的表单

    我想知道如何在 Yii2 框架中创建一个没有模型的表单 因为我正在创建一个 mailchimp 注册表单 因此不需要模型 下面的代码会生成一个表单 但是正如您所看到的 它使用了一个模型 我是否仍然使用 activeform 如何删除 mod
  • 视频静音/取消静音按钮 javaScript

    JavaScript 初学者看这里 我正在尝试用 javaScript 为学校项目制作一个视频播放器 但我的静音按钮遇到了问题 我希望该按钮在单击时使视频静音 并在再次按下该按钮时取消静音 到目前为止 我只能将视频静音并保持静音 这是我当前
  • 用于提取括号之间的 3 位数字的正则表达式

    我的字符串是 Frequency FA ID VerifiedFA0 FAID5 125 FA1 FAID7 175 FA2 FAID1 476 我尝试创建的正则表达式应该提取这些数字 125 175 476 我通过查看做到了这个例子 ht
  • 垂直对齐 div 元素中的图像?

    我有一个 div 元素 其高度设置为em 其宽度我设置为百分比 里面有一张图片 它的宽度以百分比表示 83 但是 如果我的分辨率使 div 元素开始变得有点窄 则图像也会变窄 但图像不会占据整个 div 应有的 而是会变小并出现在div 的
  • 如何使用 VB6 获取硬件信息,例如 CPU 名称、总 RAM 等?

    标题几乎说明了一切 我需要使用 VB6 获取一些硬件信息 例如 CPU 信息和总 RAM 理想情况下 它会为 CPU 返回类似以下内容 英特尔酷睿 2 四核 Q8500 2 66 GHz 对于 RAM 来说 有些简单的东西 比如计算机总共拥
  • Laravel 使用请求获取 POSTed 数据

    在 Laravel 中如何获取请求正文 我正在尝试 request gt get data 但得到空结果 我正在向控制器中的存储功能发出 POST 请求 但无法获取 POST 数据 public function store Request
  • Golang:即使数据库关闭,第二次 Ping 也会成功

    我遇到了一个有趣的问题 即 db Ping 不会返回错误 即使数据库自第一次尝试以来已被终止 源代码如下 import database sql fmt log time github com go sql driver mysql typ
  • Assembly.ReflectionOnlyLoadFrom 不起作用

    我有一个集会Library1 dll其中包含一些接口 这些接口被序列化为字节数组到数据库中 由于某些原因 我们必须更改接口属性和定义 所以现在我正在编写一个迁移实用程序 所以我有两个版本Library1 dll 在我的实用程序中 我创建了一
  • 使用多核使用 g++ 进行编译

    快速问题 允许 g 生成自身的多个实例以便更快地编译大型项目 例如 多核 CPU 一次 4 个源文件 的编译器标志是什么 您可以使用 make 来完成此操作 使用 gnu make 时 它 是 j 标志 这对单处理器机器也有帮助 例如 如果
  • 程序终止后动态分配内存

    当包含动态分配内存 使用 malloc new 而没有 free delete 调用的 C C 程序终止时 动态分配的内存会发生什么 操作系统是否收回内存 或者其他程序是否无法访问该内存 我不认为语言标准有任何保证 但是支持稀疏虚拟内存和内
  • 对 SliverList 中的变化进行动画处理

    我目前有一个SliverList其项目是动态加载的 问题是一旦这些项目被加载 SliverList更新而不动画更改 在加载和加载之间进行转换very刺耳的 我看到AnimatedList存在 但它不是条子 所以我不能将它直接放入Custom