SliverAppBar简单应用和说明

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

class SliverAppBarDemo extends StatefulWidget{
  @override
  _SliverAppBarDemoState createState()=>_SliverAppBarDemoState();
}
class _SliverAppBarDemoState extends State<SliverAppBarDemo>{
  ScrollController _customerScrollViewController;
  @override
  void initState() {
    // TODO: implement initState
    super.initState();
    _customerScrollViewController=ScrollController();
  }
  @override
  void dispose() {
    // TODO: implement dispose
    super.dispose();
  }
  @override
  Widget build(BuildContext context) {
    // TODO: implement build
    return Scaffold(
      //appBar: null,
      body: CustomScrollView(
        scrollDirection: Axis.vertical,//默认vertical,设置试图的滚动方向,是上下滚动,还是左右滚动
        reverse: false,//默认值false,滚动方向是否沿着读取方向滚动,如果当前是从上往下滚动,设置为true,那么就是从下往上滚动
        controller: _customerScrollViewController,//滚动对象,可以控制该视图的滚动位置
        primary: false,//默认true,是否与父级关联主滚动视图,controller默认设置为null
        physics: AlwaysScrollableScrollPhysics(),//滚动视图应如何响应用户输入。AlwaysScrollableScrollPhysics,总是允许用户滚动
        shrinkWrap: false,//默认false,[scrollDirection]中滚动视图的范围是否应由正在查看的内容确定。
        semanticChildCount: 10,//子控件的数量
        slivers: [
          SliverAppBar(
            //leading,标题前面的控件,例如默认给的返回按钮
            leading: IconButton(icon: Icon(Icons.ac_unit),onPressed: (){
              Navigator.pop(context,'');
            },),
            //前导小部件的宽度,默认56
            leadingWidth:50,
            //标题
            title: Text("SliverAppbarDemo SliverAppbarDemo SliverAppbarDemo SliverAppbarDemo SliverAppbarDemo SliverAppbarDemo",
              maxLines: 3,
            ),
            //actions,标题后面现实的控件
            actions: [
              IconButton(icon: Icon(Icons.access_alarm),onPressed:(){}),
            ],
            //堆叠在状态栏和标题栏后面,设置了flexibleSpace,会遮挡backgroundColor背景色,brightness亮度
            flexibleSpace: Container(
              //height: 250,
              //width: 500,
              color: Colors.red,
              child: Column(
                mainAxisAlignment: MainAxisAlignment.start,
                crossAxisAlignment: CrossAxisAlignment.start,
                children: [
                  Icon(Icons.home),
                  Text('flexibleSpace'),
                  Icon(Icons.home),
                  Icon(Icons.home),
                  Icon(Icons.home),
                ],
              ),
            ),
            //在标题栏下面的控件,一般是tabbar,也可以是其他
            bottom: PreferredSize(
              preferredSize: Size(MediaQuery.of(context).size.width,100),
              child: Container(
                height: 100,
                width: 100,
                color: Colors.green,
              ),
            ),
            //标题栏下方阴阳范围
            elevation: 10.0,
            //标题栏下方阴影颜色
            shadowColor: Colors.yellow,
            //是否显示合适的阴影
            forceElevated: true,
            //标题栏背景色
            backgroundColor: Colors.blue,
            //标题栏的亮度
            brightness: Brightness.dark,
            //Icon的主题样式
            iconTheme: IconThemeData(
              color: Colors.amber,//颜色
              size: 30,//大小
              opacity: 0.5,//透明度
            ),
            //actions里面的Icon的主题样式
            actionsIconTheme: IconThemeData(
              color: Colors.blue,//颜色
              size: 30,//大小
              opacity: 0.5,//透明度
            ),
            //文本样式
            textTheme: TextTheme(
              //设置title标题样式
              headline6: TextStyle(
                fontSize: 16,
                color: Colors.green,
              ),

            ),
            //标题栏是否显示在顶部,默认true
            primary: true,
            //标题是否居中,默认true
            centerTitle: false,
            //标题是否根据语义换行,默认false
            excludeHeaderSemantics:true,
            //标题title左右的间距,0为没有间距
            titleSpacing:0.0,
            //title标题换行后的高度
            collapsedHeight:80,
            //标题栏和标题栏底部bottom,flexibleSpace的总高度
            expandedHeight:200,
            //滚动后,是否立即显示标题栏,必须和snap设置相同
            floating:true,
            //滚动时,标题栏是否保持显示
            pinned:false,
            //如果[snap]和[floating]为true,则浮动应用程序栏将“捕捉”进入视图。
            //如果[snap]为true,则显示浮动应用程序栏的滚动条将触发动画,将整个应用栏滑动到视图中。
            snap: true,
            //应用栏是否应拉伸以填充过度滚动区域。
            stretch: true,
            //触发stretch拉伸动画的滚动偏移量,默认100
            stretchTriggerOffset:100,
          ),
          SliverFixedExtentList(
            itemExtent: 120.0,
            delegate: SliverChildBuilderDelegate((context, int index) {
              Container _piece;
              if (index == 0){
                _piece = Container(
                  child: Text('行一一一一一',),
                );
              }else{
                _piece = Container(
                  child: Text('行行行行行二',),
                );
              }
              return _piece;
            },
              childCount: 20,
            ),
          ),

        ],
      ),
    );

  }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值