iOS 风格 页面大标题滚动后显示 headBar CupertinoSliverNavigationBar

在这里插入图片描述

在这里插入图片描述

我觉得不用监听滚动去改变背景颜色,应该是有相关参数可以做处理的,但我找不到。

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

class SliverNavBar extends StatefulWidget {
  SliverNavBar({Key? key}) : super(key: key);

  @override
  _SliverNavBarState createState() => _SliverNavBarState();
}

class _SliverNavBarState extends State<SliverNavBar> {

  late ScrollController _scrollController;
  bool _scrollTop = false;

  void _scrollListener () {
    // log("scroll" + _scrollController.offset.toString());
    if (_scrollController.offset < 10 && _scrollTop) {
      setState(() {
        _scrollTop = false;
      });
    } else if (_scrollController.offset > 10 && !_scrollTop) {
      setState(() {
        _scrollTop = true;
      });
    }
  }

  @override
  void initState() {
    _scrollController = new ScrollController();
    _scrollController.addListener(_scrollListener);

    super.initState();
  }


  Widget _buildGird () {
    return SliverGrid(
      gridDelegate: SliverGridDelegateWithMaxCrossAxisExtent(
        maxCrossAxisExtent: 200.0,
        mainAxisSpacing: 10.0,
        crossAxisSpacing: 10.0,
        childAspectRatio: 3 / 2,
      ),
      delegate:
      SliverChildBuilderDelegate(
            (BuildContext context, int index) {
          return Container(
            alignment: Alignment.center,
            color: Colors.blue[100 * (index % 9)],
            child: Text('Grid Item $index'),
          );
        },
        childCount: 20,
      ),
    );
  }


  @override
  Widget build(BuildContext context) {

    Color bgColor = Theme.of(context).scaffoldBackgroundColor;

    return CupertinoPageScaffold(
        backgroundColor: bgColor,
        child: CustomScrollView(
          controller: _scrollController,
          slivers: [
            CupertinoSliverNavigationBar(
              backgroundColor: _scrollTop ? Color(0xFFF1F1F1) : bgColor,
              border: Border.all(width: 0.0, color: _scrollTop ? Color(0xFFcccccc) : bgColor),
              leading: Container(),
              largeTitle: Text(
                'Large Title',
                style: TextStyle(
                  color: Colors.pink
                )
              ),
            ),
            _buildGird(),
          ],
        ));
  }
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值