返回

沉浸式动画,B站播放器暂停时的header效果实现

见解分享

前言

在Flutter中,NestedScrollView是一个非常强大的控件,它可以让我们轻松实现复杂的滚动效果。而extended_nested_scroll_view是FlutterCandies全家桶中的一款控件,它对NestedScrollView进行了扩展,使我们能够实现更加丰富的滚动效果。

实现步骤

1. 导入必要的库

首先,我们需要导入必要的库。

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

2. 创建NestedScrollView

接下来,我们需要创建一个NestedScrollView。

NestedScrollView(
  headerSliverBuilder: (BuildContext context, bool innerBoxIsScrolled) {
    return <Widget>[
      SliverAppBar(
        expandedHeight: 200.0,
        floating: false,
        pinned: true,
        flexibleSpace: FlexibleSpaceBar(
          title: Text('B站播放器'),
          background: Image.network(
            'https://img.zcool.cn/community/01c684594a15330000018c1b091485.jpg',
            fit: BoxFit.cover,
          ),
        ),
      ),
    ];
  },
  body: ListView.builder(
    itemCount: 100,
    itemBuilder: (BuildContext context, int index) {
      return ListTile(
        title: Text('Item $index'),
      );
    },
  ),
);

3. 使用extended_nested_scroll_view

为了实现B站播放器暂停时的header效果,我们需要使用extended_nested_scroll_view。

ExtendedNestedScrollView(
  headerSliverBuilder: (BuildContext context, bool innerBoxIsScrolled) {
    return <Widget>[
      SliverAppBar(
        expandedHeight: 200.0,
        floating: false,
        pinned: true,
        flexibleSpace: FlexibleSpaceBar(
          title: Text('B站播放器'),
          background: Image.network(
            'https://img.zcool.cn/community/01c684594a15330000018c1b091485.jpg',
            fit: BoxFit.cover,
          ),
        ),
      ),
    ];
  },
  body: ListView.builder(
    itemCount: 100,
    itemBuilder: (BuildContext context, int index) {
      return ListTile(
        title: Text('Item $index'),
      );
    },
  ),
);

4. 设置maxHeight和minHei

最后,我们需要设置maxHeight和minHei属性。

maxHeight: 200.0,
minHei: 50.0,

这样,当用户滚动页面时,header就会从200.0像素的高度缩小到50.0像素的高度。

总结

以上就是如何在Flutter中使用NestedScrollView和extended_nested_scroll_view来实现B站播放器暂停时的header效果。希望本文对您有所帮助。