第二百六十四回

这篇具有很好参考价值的文章主要介绍了第二百六十四回。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


我们在上一章回中介绍了SliverPadding组件相关的内容,本章回中将介绍Sliver综合示例.闲话休提,让我们一起Talk Flutter吧。

概念介绍

我们在前面的章回中介绍了各种Sliver相关的组件:SliverList,SliverGrid,SliverAppBar和SliverPadding,本章回将综合使用它们。下面是示例程序的
运行效果图。不过在使用之前还需要介绍一个新组件:CustomScrollView。该组件相当于一个粘合剂,它可以把各个Sliver组件组合在一起。010slivers

使用方法

和其它组件类似,该组件提供了相关的属性来控制自己,
下面是该组件中常用的属性,掌握这些属性后就可以使用该组件了。

  • scrollDirection属性:主要用来控制列表中滚动方向;
  • controller属性:主要用来控制某个列表的位置;
  • slivers属性:主要用来存放Sliver相关的组件,它的用法类似Column组件中的children属性;
    介绍完这些常用属性后,我们将在后面的小节中通过具体的示例代码来演示它的使用方法。

示例代码

CustomScrollView(
  slivers: [
    SliverAppBar(
      title: const Text('Title of SliverAppBar'),
      backgroundColor: Colors.purpleAccent,
      ///关闭和展开时的高度
      collapsedHeight: 60,
      expandedHeight: 300,

      ///appBar空间扩展后显示的内容
      flexibleSpace: FlexibleSpaceBar(
        ///这个title在appBar的最下方,可以不设定,缩小后它会和SliverAppBar的title重合
        title: const Text('title of FlexibleSpaceBar'),
        background: Container(
          decoration: const BoxDecoration(
            image:DecorationImage(
              opacity: 0.8,
              image: AssetImage("images/ex.png"),
              fit: BoxFit.fill,
            ),
          ),
          ///扩展空间中主要显示的内容
          child: const Center(child: Text('child of container')),
        ),
        centerTitle: true,
        ///拉伸和折叠时的样式,效果不是很明显
        collapseMode: CollapseMode.pin,
        stretchModes: const [
          StretchMode.zoomBackground,
          StretchMode.blurBackground,
          StretchMode.fadeTitle,
        ],
      ),
    ),
    ///SliverAppBar下方显示的内容,这个需要和SliverAppBar一起添加,否则不会出现滑动效果
    ///这个只是一个简单的SliverList,用来配合SliverAppBar使用,真正的介绍在下面的程序中
    SliverList(
      delegate: SliverChildListDelegate(
      // List.generate(40, (index) => Icon(Icons.recommend),),
      List.generate(5, (index) => Text('Item ${index+1}'),),
      ),
    ),
    ///SliverGrid和工厂方法
    SliverGrid.count(
      ///交叉轴显示内容的数量,这里相当于3列
      crossAxisCount: 3,
      ///主轴上显示内容的空间设置,相当于行距
      mainAxisSpacing: 10,
      ///交叉轴上显示内容的空间设置,相当于列距
      crossAxisSpacing: 10,
      childAspectRatio: 1.2,
      ///Grid中显示的内容,一共9个自动换行,分3行显示
      children:List.generate(9, (index) {
        return Container(
          alignment: Alignment.center,
          ///使用固定颜色和随机颜色
          // color: Colors.redAccent,
          // color:Colors.primaries[index%5],
          ///修改为圆角,颜色移动到圆角中
          decoration: BoxDecoration(
            color: Colors.primaries[index%5],
            borderRadius: BorderRadius.circular(20),
          ),
          child: Text('item: $index'),
        );
      }).toList(),
    ),
    ///不使用工厂方法,直接使用SliverGrid的构造方法
    SliverGrid(
      ///Grid中显示的内容,可以使用BuilderDelete直接创建显示内容,或者使用已经有的list
      delegate: SliverChildBuilderDelegate((context,index){
        return const Icon(Icons.face_3_outlined); },
      childCount: 20,
      ),
      ///配置Grid的相关属性,
      gridDelegate:const SliverGridDelegateWithFixedCrossAxisCount(
        ///主轴上显示内容的空间设置,相当于行距
        mainAxisExtent: 20,///这个值不能小于显示内容,否则最后一行的内容会被遮挡
        mainAxisSpacing: 20,
        ///交叉轴显示内容的数量,这里相当于4列
        crossAxisCount: 4,
        ///交叉轴上显示内容的空间设置
        crossAxisSpacing: 20,
        ///显示内容的宽高比
        childAspectRatio: 1.2,
      ),
    ),
    ///不使用工厂方法,直接使用SliverGrid的构造方法,和上一个类似,只是创建显示内容的方法不同
    SliverGrid(
      ///Grid中显示的内容,可以使用BuilderDelete直接创建显示内容,或者使用已经有的list
      delegate: SliverChildListDelegate(
        List.generate(20,
              (index) => const Icon(Icons.camera,color: Colors.blue,),),
      ),
      ///配置Grid的相关属性,同上。不同之处在于交叉轴显示内容的数量不固定,而是与空间有关
      gridDelegate:const SliverGridDelegateWithMaxCrossAxisExtent(
        maxCrossAxisExtent: 40,
        mainAxisExtent: 40,
        mainAxisSpacing: 20,
        crossAxisSpacing: 5,
        childAspectRatio: 1.6,
      ),
    ),
    ///SliverList,可以理解为对ListView的封装,以便用于Sliver中创建delegate对象,使用builder方法。
    SliverList(
      delegate: SliverChildBuilderDelegate((context,index){
        return Container(
          height: 60,
          alignment: Alignment.center,
          child: Text('This is ${index+1} item'),
        );
      },
        ///list的数量
        childCount:5,
      ),
    ),
    ///与上面的SliverList类似,只是不有创建delegate对象,而是直接使用现成的list对象
    SliverList(
      delegate: SliverChildListDelegate(
        List.generate(5, (index) => const Icon(Icons.add),),
      ) ,
    ),
    ///调整显示内容的边距,在上下左右四个方向添加,SliverList,SliverList效果不明显
    SliverPadding(
     ///在上下左右四个方向上添加边距
     // padding: EdgeInsets.only(left: 10,right: 10),
     padding: const EdgeInsets.all(10),
     sliver:SliverList(
       delegate:SliverChildListDelegate(
         List.generate(5,
               (index) => Container(
                 color: Colors.grey,
                 child: Text('Item ${index+1}'),
               ),
         ),
       ) ,
     ) ,
    ),
    ///调整显示内容的边距,在上下左右四个方向添加,配合Grid内部的边距效果比较明显
    SliverPadding(
      padding: const EdgeInsets.all(10),
      sliver: SliverGrid.count(
        mainAxisSpacing: 10,
        crossAxisCount: 4,
        crossAxisSpacing: 10,
        children: List.generate(9, (index) => Container(
          alignment: Alignment.center,
          color: Colors.primaries[index%5],
          child: Text('Item ${index+1}'),
        ),) ,
      ),
    ),
  ],
),

上面是的代码中使用了前面章回中介绍过的所有与Sliver相关的组件,整个界面的外层使用CustomScollView当作容器,容器里的组件全部是SliVer相关的组件,最
上方是SliverAppBar组件,它下面是SliverList和SliverGrid组件,向上滑动时SliverBar会被折叠,SliverList和SliverGrid会跟着一起滚动,不过它们
是做为一个整体来滚动而不是像ListView中一个条目,一个条目地滚动。具体的滚动效果可以看开篇的程序运行效果图。这个程序中包含的内容比较多,单是SliverList
就有好几个,大家可以对比着看,建议大家自己动手去实践,这样可以真正体会到SliverList等组件的功能,以及它们包含的细节。
看官们,与"Sliver综合示例"相关的内容就介绍到这里,欢迎大家在评论区交流与讨论!文章来源地址https://www.toymoban.com/news/detail-802289.html

到了这里,关于第二百六十四回的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 冥想第九百六十二天

    1.周二,太忙了,来补日记,被客户批了,因为一个case没有测到,不过度谴责自己,提高就好。 2.下班跑了6公里很舒服。毫无压力。心率平稳并且低。 3.感谢父母,感谢朋友,感谢家人,感谢不断进步的自己。

    2024年02月06日
    浏览(35)
  • 每天一个数据分析题(一百六十)

    以下关于代码片段(使用sklearn)的使用和PCA(主成分分析)的描述中,哪项是正确的? A. preprocessing.scale(data)用于对数据进行归一化处理,确保PCA分析前各特征处于同一量级。 B. PCA(n_components=9)将数据降维了9个主成分。 C. pca.explained_variance_输出的是降维后各主成分的方差。

    2024年02月20日
    浏览(49)
  • JAVA面试题分享一百六十三:Kafka如何实现延时推送?

    目录 一、延时队列定义 二、技术实现方案 1. Redis 2. Kafka 3. RabbitMQ 4. RocketMQ 三、Kafka延时队列背景 四、Kafka延时队列实现思路 六、Kafka延时队列架构图 七、kafka延时任务代码实现 1. KafkaDelayQueue:Kafka延迟队列 2. KafkaDelayQueueFactory:Kafka延迟队列工厂 3. KafkaPollListener:Kafka延迟队

    2024年02月04日
    浏览(74)
  • JAVA面试题分享一百六十二:Kafka消息重复消费问题?

    消息重复消费的根本原因都在于:已经消费了数据,但是offset没有成功提交。 其中很大一部分原因在于发生了再均衡。 1)消费者宕机、重启等。导致消息已经消费但是没有提交offset。 2)消费者使用自动提交offset,但当还没有提交的时候,有新的消费者加入或者移除,发生

    2024年02月03日
    浏览(46)
  • 第九十四回 如何打造一个网络框架

    我们在上一章回中介绍了\\\"如何mock数据\\\"相关的内容,本章回中将介绍如 何打造一个网络框架 闲话休提,让我们一起Talk Flutter吧。 最近在项目中使用dio处理网络相关的内容,有些地方的代码不能利用,有些地方的代码耦合度比较高,因此准备在dio上面封装一层网络层,这些可

    2024年02月15日
    浏览(48)
  • JAVA面试题分享五百六十五:为啥Redis用哈希槽,不用一致性哈希?

    无论是哈希槽,还是一致性hash,都属于hash取模数据分片。 先从经典的hash取模数据分片说起 假如 Redis集群的节点数为3个,使用经典的hash取模算法进行数据分片,实际上就是一个节点一个数据分片,分为3片而已。 每次请求使用 hash(key) % 3 的方式计算对应的节点,或者进行

    2024年04月16日
    浏览(52)
  • 一百六十九、Hadoop——Hadoop退出NameNode安全模式与查看磁盘空间详情(踩坑,附截图)

    在海豚跑定时跑kettle的从Kafka到HDFS的任务时,由于Linux服务器的某个文件磁盘空间满了,导致Hadoop的NodeName进入安全模式,此时光执行 hdfs dfsadmin -safemode leave命令语句没有效果( 虽然显示Safe mode is OFF,但没效果,一旦执行还是报错 ) Caused by: org.apache.hadoop.ipc.RemoteException(org

    2024年02月10日
    浏览(44)
  • 一百六十、Kettle——Linux上安装的Kettle9.2.0连接Hive3.1.2

    Kettle9.2.0在Linux上安装好后,需要与Hive3.1.2数据库建立连接 之前已经在本地上用kettle9.2.0连上Hive3.1.2 kettle9.2.0安装包网盘链接 链接:https://pan.baidu.com/s/15Zq9wNDwyMnc3qFVxYOMXw?pwd=zwae  提取码:zwae 1、Hive312的lib里面MySQL驱动包的版本是mysql-connector-java-5.1.37.jar 2、Kettle9.2里MySQL驱动包的

    2024年02月12日
    浏览(67)
  • 一起Talk Android吧(第五百四十回:ImageView的缩放)

    各位看官们大家好,上一回中咱们说的例子是\\\"RxJava中的总结\\\",本章回中介绍的例子是\\\"I mageView的缩放 \\\"。闲话休提,言归正转,让我们一起Talk Android吧! 通常情况下ImageView组件主要用来显示图片,因此需要使用图片当作显示内容,这个可以通过 ImageView 的src属性来设置被显示的

    2023年04月09日
    浏览(49)
  • 一百六十八、Kettle——用海豚调度器定时调度从Kafka到HDFS的任务脚本(持续更新追踪、持续完善)

    在实际项目中,从Kafka到HDFS的数据是每天自动生成一个文件,按日期区分。而且Kafka在不断生产数据,因此看看kettle是不是需要时刻运行?能不能按照每日自动生成数据文件? 为了测试实际项目中的海豚定时调度从Kafka到HDFS的kettle任务情况,特地提前跑一下海豚定时调度这个

    2024年02月10日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包