Flutter基础七:Sliver,设置一些样式

SliverGrid网格视图

class SliverDemo extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      //Scaffold小部件提供了一种界面结构,空白的页面
      body: CustomScrollView(
        //CustomScrollView有个sliver属性
        slivers: <Widget>[
          //一组sliver类型的小部件
          SliverGrid(
            gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
                crossAxisCount: 2, crossAxisSpacing: 8.0, mainAxisSpacing: 8.0),
            delegate:
                SliverChildBuilderDelegate((BuildContext context, int index) {
              return Container(
                child: Text("Text$index"),
                /*child: Image.network(
                  posts[index].imageUrl,
                  fit: BoxFit.cover,
                ),*/
              );
            }),
          ), //SliverGrid和GridView类似
        ],
      ),
    );
  }
}

6 SliverPadding(内边距) 与 SliverSafeArea(安全区)

import 'package:flutter/material.dart';
import 'package:ninghao_flutter/model/post.dart';

class SliverDemo extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      //Scaffold小部件提供了一种界面结构,空白的页面
      body: CustomScrollView(
        //CustomScrollView有个sliver属性
        slivers: <Widget>[
          SliverPadding(
            padding: EdgeInsets.all(8.0),
            sliver: SliverGridDemo(), //SliverGrid和GridView类似)
            //一组sliver类型的小部件
          )
        ],
      ),
    );
  }
}

class SliverGridDemo extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return SliverGrid(
      gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
          crossAxisCount: 2, crossAxisSpacing: 8.0, mainAxisSpacing: 8.0),
      delegate: SliverChildBuilderDelegate((BuildContext context, int index) {
        return Container(
          child: Text("Text$index"),
          /*child: Image.network(
                  posts[index].imageUrl,
                  fit: BoxFit.cover,
                ),*/
        );
      }),
    );
  }
}

import 'package:flutter/material.dart';
import 'package:ninghao_flutter/model/post.dart';

class SliverDemo extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      //Scaffold小部件提供了一种界面结构,空白的页面
      body: CustomScrollView(
        //CustomScrollView有个sliver属性
        slivers: <Widget>[
          SliverSafeArea(
              //在安全的区域内显示
              sliver: SliverPadding(
            padding: EdgeInsets.all(8.0),
            sliver: SliverGridDemo(), //SliverGrid和GridView类似)
            //一组sliver类型的小部件
          ))
        ],
      ),
    );
  }
}

class SliverGridDemo extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return SliverGrid(
      gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
          crossAxisCount: 2, crossAxisSpacing: 8.0, mainAxisSpacing: 8.0),
      delegate: SliverChildBuilderDelegate(
        (BuildContext context, int index) {
          return Container(
            child: Text("Text$index"),
            /*child: Image.network(
                  posts[index].imageUrl,
                  fit: BoxFit.cover,
                ),*/
          );
        },
        childCount: posts.length,
      ),
    );
  }
}


SliverList列表视图,设置一些样式

class SliverListDemo extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return SliverList(
      delegate: SliverChildBuilderDelegate((BuildContext context, int index) {
        return Padding(
          //设置一些样式
          padding: EdgeInsets.only(bottom: 32.0),
          child: Material(
            borderRadius: BorderRadius.circular(12.0), //圆角
            elevation: 14.0, //阴影
            shadowColor: Colors.grey.withOpacity(0.5), //阴影颜色
            child: Container(
              color: Colors.red,
              child: Text("Text$index"),
              /*child: Image.network(
                    posts[index].imageUrl,
                    fit: BoxFit.cover,
                ),*/
            ),
          ),
        );
      }),
    );
  }
}

设置比列的话

class SliverListDemo extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return SliverList(
      delegate: SliverChildBuilderDelegate((BuildContext context, int index) {
        return Padding(
          //设置一些样式
          padding: EdgeInsets.only(bottom: 32.0),
          child: Material(
            borderRadius: BorderRadius.circular(12.0), //圆角
            elevation: 14.0, //阴影
            shadowColor: Colors.grey.withOpacity(0.5), //阴影颜色
            color: Colors.red,
            child: AspectRatio(
              aspectRatio: 16 / 9, //设置比列的话
              child: Text("Text$index"),
              /*child: Image.network(
                    posts[index].imageUrl,
                    fit: BoxFit.cover,
                ),*/
            ),
          ),
        );
      },
      childCount: posts.length,
      ),
    );
  }
}

添加一些文字并设置文字样式

class SliverListDemo extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return SliverList(
      delegate: SliverChildBuilderDelegate(
        (BuildContext context, int index) {
          return Padding(
            //设置一些样式
            padding: EdgeInsets.only(bottom: 32.0),
            child: Material(
              borderRadius: BorderRadius.circular(12.0), //圆角
              elevation: 14.0, //阴影
              shadowColor: Colors.grey.withOpacity(0.5), //阴影颜色
              color: Colors.red,
              child: Stack(children: <Widget>[
                AspectRatio(
                  aspectRatio: 16 / 9, //设置比列的话
                  child: Text("Text$index"),
                  /*child: Image.network(
                  posts[index].imageUrl,
                  fit: BoxFit.cover,
                ),*/
                ),
                Positioned(
                    top: 32.0,
                    left: 32.0,
                    child: Column(
                      crossAxisAlignment: CrossAxisAlignment.start, //交叉轴的对齐
                      children: [
                        Text(posts[index].title,
                            style: TextStyle(
                                //设置文字样式
                                fontSize: 20.0,
                                color: Colors.white)),
                        Text(posts[index].author,
                            style: TextStyle(
                                //设置文字样式
                                fontSize: 13.0,
                                color: Colors.white)),
                      ],
                    ))
              ]),
            ),
          );
        },
        childCount: posts.length,
      ),
    );
  }
}

在这里插入图片描述

注意SliverList和SliverGrid都要加childCount属性

8 SliverAppBar:应用工具栏

和AppBar类似,AppBar是固定在屏幕上方。SliverAppBar可以去设置一些行为。

class SliverDemo extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      //Scaffold小部件提供了一种界面结构,空白的页面
      body: CustomScrollView(
        //CustomScrollView有个sliver属性
        slivers: <Widget>[
          SliverAppBar(
            //会有个渐进的效果,滚动到一定程度会消失或再现
            title: Text('ninghao'),
            //pinned: true, //固定在顶部,不消失
            floating: true,//向下滚动会消失,向上滚动一点就马上显示出来
          ),
          SliverSafeArea(
              //在安全的区域内显示
              sliver: SliverPadding(
            padding: EdgeInsets.all(8.0),
            sliver: SliverListDemo(), //SliverGrid和GridView类似)
            //一组sliver类型的小部件
          ))
        ],
      ),
    );
  }
}

在这里插入图片描述

9 带渐近动画的可伸缩空间,和背景

class SliverDemo extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      //Scaffold小部件提供了一种界面结构,空白的页面
      body: CustomScrollView(
        //CustomScrollView有个sliver属性
        slivers: <Widget>[
          SliverAppBar(
            //会有个渐进的效果,滚动到一定程度会消失或再现
            //title: Text('ninghao'),
            //pinned: true, //固定在顶部,不消失
            floating: true, //向下滚动会消失,向上滚动一点就马上显示出来
            expandedHeight: 178.0,
            flexibleSpace: FlexibleSpaceBar(
              title: Text(
                'ninghaoFlutter'.toUpperCase(),
                style: TextStyle(
                  fontSize: 15.0, //文字大小
                  letterSpacing: 3.0, //文字间距
                  fontWeight: FontWeight.w100, //文字粗细
                ),
              ),
              background: Image.network(//添加背景,是一张图片
                'https://resources.ninghao.net/images/overkill.png',
                fit: BoxFit.cover,
              ),
            ),
          ),
          SliverSafeArea(
              //在安全的区域内显示
              sliver: SliverPadding(
            padding: EdgeInsets.all(8.0),
            sliver: SliverListDemo(), //SliverGrid和GridView类似)
            //一组sliver类型的小部件
          ))
        ],
      ),
    );
  }
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值