如何在滚动时从 SliverAppBar 淡入/淡出小部件?

2024-01-23

当用户在屏幕上滚动时,我想从 SliverAppBar 中“淡入”和“淡出”小部件。

这是我想做的事情的一个例子:

这是我的代码,没有“褪色”:

https://gist.github.com/nesscx/721cd823350848e3d594ba95df68a7fa https://gist.github.com/nesscx/721cd823350848e3d594ba95df68a7fa

导入'包:flutter/material.dart';

class App extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Fading out CircleAvatar',
      theme: ThemeData(
        primarySwatch: Colors.purple,
      ),
      home: Scaffold(
        body: DefaultTabController(
          length: 2,
          child: NestedScrollView(
            headerSliverBuilder: (BuildContext context, bool innerBoxIsScrolled) {
              return <Widget>[
                SliverOverlapAbsorber(
                  handle: NestedScrollView.sliverOverlapAbsorberHandleFor(context),
                  child: new SliverAppBar(
                    expandedHeight: 254.0,
                    pinned: false,
                    leading: Icon(Icons.arrow_back),
                    title:Text('Fade'),
                    forceElevated: innerBoxIsScrolled, 
                    flexibleSpace: new FlexibleSpaceBar(
                      centerTitle: true,
                      title: Column(
                        mainAxisAlignment: MainAxisAlignment.end,
                        children: <Widget>[
                          CircleAvatar(
                            radius: 36.0,
                            child: Text(
                              'N',
                              style: TextStyle(
                                color: Colors.white,
                              ),
                            ),
                            backgroundColor: Colors.green,
                          ),
                          Text('My Name'),
                        ],
                      ),
                      background: Container(
                        color: Colors.purple,
                      ),
                    ),
                  ),
                ),
                SliverPersistentHeader(
                  pinned: true,
                  delegate: _SliverAppBarDelegate(
                    new TabBar(
                      indicatorColor: Colors.white,
                      indicatorWeight: 3.0,
                      tabs: <Tab>[
                        Tab(text: 'TAB 1',),
                        Tab(text: 'TAB 2',),
                      ],
                    ),
                  ),
                ),
              ];
            },
            body: TabBarView(
              children: <Widget>[
                SingleChildScrollView(
                  child: Container(
                    height: 300.0,
                    child: Text('Test 1', style: TextStyle(color: Colors.black, fontSize: 80.0)),
                  ),
                ),
                SingleChildScrollView(
                  child: Container(
                    height: 300.0,
                    child: Text('Test 2', style: TextStyle(color: Colors.red, fontSize: 80.0)),
                  ),
                ),
              ],
            ),
          ),
        ),
      ),
    );
  }
}

class _SliverAppBarDelegate extends SliverPersistentHeaderDelegate {
  _SliverAppBarDelegate(this._tabBar);

  final TabBar _tabBar;

  @override
  double get minExtent => _tabBar.preferredSize.height;
  @override
  double get maxExtent => _tabBar.preferredSize.height;

  @override
  Widget build(
      BuildContext context, double shrinkOffset, bool overlapsContent) {
    return new Container(
      color: Colors.deepPurple,
      child: _tabBar,
    );
  }

  @override
  bool shouldRebuild(_SliverAppBarDelegate oldDelegate) {
    return false;
  }
}

这实际上很简单,使用ScrollControllerOpacity小部件。这是一个基本示例:

https://gist.github.com/smkhalsa/ec33ec61993f29865a52a40fff4b81a2 https://gist.github.com/smkhalsa/ec33ec61993f29865a52a40fff4b81a2

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

如何在滚动时从 SliverAppBar 淡入/淡出小部件? 的相关文章

随机推荐

  • 如何获取select2:unselect的值

    我怎样才能获得未选择选项的值Select2 https select2 github io using select2 unselect mySelect on select2 unselect function e var unselec
  • 重命名android中的包名称

    我想在我的项目中重命名包名称 到目前为止我有 9 个包 当我更改包名称时 更改是在 java 和 xml 文件中完成的 但在Manifest xml文件中 活动定义部分 包活动在重命名包后不会改变 请帮我 Android Tools 中有一
  • Camel - 流缓存不缓存/无法转换?

    读完一遍之后 我似乎失去了 内在 的身体 请注意 我使用的是 Camel 的流缓存 并且输入是来自 http 组件的 json 文件 我有一个带有以下代码的处理器 log debug Body Type exchange getIn get
  • 使用 jsonp 来自 Jquery 的 REST WCF url 中的 javascript 错误

    当我尝试从 jsonp 执行 REST WCF 服务时 出现 javascript 错误 网页错误详细信息 User Agent Mozilla 4 0 compatible MSIE 8 0 Windows NT 6 1 WOW64 Tr
  • 如何在Android RxJava中使用flatMap在不使用lambda函数的情况下顺序调用三个Web服务?

    我的 API 客户端 public class ApiClient public static final String BASE URL http baseurl com wp json private static Retrofit r
  • 生成 test-jar 以及测试包中的 jar 文件

    我想将我的测试包打包成jar文件 如何从maven插件Surefire执行生成test jar 通过使用以下配置 您可以从测试中创建一个 jar
  • 相当于 Python 2 中 BytesIO 的 getbuffer

    在Python 3中 我可以通过以下方式获取ByteIO对象的大小object getbuffer nbytes where object ByteIO 但是什么是最好的等价物getbuffer 在 Python 2 中 做了一些探索 我发
  • Bash 中对除数进行四舍五入

    我如何舍入两个除数的结果 例如 3 2 就像我做的时候一样 testOne 3 2 testOne 包含 1 而它应该四舍五入为 2 作为 3 2 1 5 的答案 要在截断算术中进行舍入 只需添加 denom 1 到分子 示例 向下舍入 N
  • 使用用户定义或 python 命令序列的 C++ 线程不会在 gdb 异步模式下停止

    我在嵌入式 powerpc 目标上使用 gdb 7 4 1 对使用 pthread 的多线程 C 程序执行一些分析 我的最终目标是使用 python 编写 gdb 脚本来自动化一些常见的分析功能 问题是 当我单独运行命令与在 gdb 用户定
  • 通过 jQuery 检测对特定 HTML 5 功能的支持

    我正在编写一些 HTML5 演示代码 包括类似的内容
  • python 中的 Chrome 扩展?

    我想创建一个 google chrome 扩展 具体来说 我想制作一个打包应用程序 但不是托管应用程序 我认为这将我限制在 JavaScript 和 HTML CSS 方面是否正确 我的问题是我需要做一些复杂的数学 奇异值分解 因子分析 并
  • 如何在 OMNeT++ 仿真过程中更改网络配置?

    我想修改element的一些参数 iniOMNeT 中的文件 例如模拟运行期间节点的传输速率 例如当节点收到一些控制消息时 我发现信息表明可以以某种方式循环配置 如下所示 一些变量 几个值 但是里面没有条件子句 ini文件 并且无法将来自
  • 反应本机滚动视图-scrollToEnd-在Android上

    我正在尝试调用一个将在 onFocus on 上触发的函数TextInput这将使scrollView一直向下滚动 使用scrollToEnd 所以这是我的班级组件 class MyCMP extends Component constru
  • python维护两个不同的随机实例

    我正在尝试进行一些分析 出于 原因 我希望程序中的每个对象都有自己的种子 但没有全局种子 我能完成这样的事情吗 a random seed seed1 b random seed seed1 for a in range 5 print a
  • 在 C++ 中使用 getline() 进行文件输入

    我正在尝试用 C 完成一个简单的初学者任务 我有一个包含该行的文本文件 约翰 史密斯 31 就是这样 我想使用 ifstream 变量读取此数据 但我想将名称 John Smith 读入一个字符串变量 然后将数字 31 读入一个单独的 in
  • HTML5 Canvas 改变图像颜色

    我正在使用 jquery 滑块通过着色将图像颜色从蓝色更改为红色 范围为 100 到 100 这意味着当滑块值为 0 时 图像应看起来正常 默认值 并根据滑块值从蓝色 100 到 100 变化 在我的本地 我可以将图像加载到画布中 由于某种
  • 如何在 Python 中将整个列表作为命令行参数传递?

    我试图将两个包含整数的列表作为参数传递给 python 代码 但sys argv i 获取字符串列表形式的参数 输入看起来像 python filename py 2 3 4 5 1 2 3 4 我发现了以下 hack 来转换列表 strA
  • python获取函数中参数的变量名[重复]

    这个问题在这里已经有答案了 我想做这样的事情 fib 1 foo arg print arg argName the name of the variable that was put in for arg foo fib 并得到这个返回
  • 带有 .gitignore 的白名单目录

    我想在一个 git 存储库中有两个目录 我选择的方法是在顶级目录中创建 git 存储库 然后使用 gitignore 将感兴趣的两个目录列入白名单 要求位于我尝试的 gitignore 文件的注释中 Blacklist everything
  • 如何在滚动时从 SliverAppBar 淡入/淡出小部件?

    当用户在屏幕上滚动时 我想从 SliverAppBar 中 淡入 和 淡出 小部件 这是我想做的事情的一个例子 这是我的代码 没有 褪色 https gist github com nesscx 721cd823350848e3d594ba