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

标签 mobile flutter fadein fadeout flutter-sliver

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

这是我想做的一个例子:

enter image description here

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

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

导入'package: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

关于mobile - 滚动时如何从 SliverAppBar 淡入/淡出小部件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51321804/

相关文章:

flutter - 如何使用Flutter dart中的共享首选项保存和读取类对象的列表?

flutter - 如何从 flutter_reactive_ble 示例获取 deviceServices

android - 无法更新 Dart SDK。重试

jquery 多个元素悬停时淡入淡出

ios - 使用 Flash develop 导出 DSYM

android - 在移动设备上存储 API key

html - 使 960 像素宽的网站适合移动设备

javascript - Jquery:如何检查输入是否聚焦

javascript - 淡入淡出的元素正在改变和调整

javascript - 在带有视频的页面上缓慢淡入 - Chrome