Flutter开发(十一)—— 五种布局之Sliver滚动布局

Flutter 中的 SliverGrid 小部件:全面指南 SliverGrid您可以使用不同的类(如等)来创建不同的网格布局。 阅读详情

演示代码
以下代码中列举了Sliver关于SliverAppBar、SliverGrid、SliverList等组件属性的使用。

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

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      home: SliverLayout(),
      theme: ThemeData(
        primarySwatch: Colors.deepPurple, //主题背景颜色
        highlightColor: Colors.purple, //按下按钮时 高亮颜色
        splashColor: Colors.white,
      ),
    );
  }
}

// Sliver
class SliverLayout extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: CustomScrollView(
        slivers: <Widget>[
          // SliverAppBar 是可以跟随内容滚动的
          SliverAppBar(
            // title: Text('RedKey'),
            // pinned: true, //将标题固定在顶部

            floating: true, //标题随着滚动消失
            expandedHeight: 200.0, //伸展高度
            // flexibleSpace  可伸缩区域设置内容
            flexibleSpace: FlexibleSpaceBar(
              title: Text(
                'Redkeyset'.toUpperCase(), //toUpperCase()转成大写
                style: TextStyle(
                    fontSize: 18.0, //文字大小
                    letterSpacing: 2.5, //字间距
                    fontWeight: FontWeight.w400), //设置文字粗细
              ),
              // flexibleSpace 增加背景图片
              background:
                  Image.network('https://dwz.cn/xZbPzbOs', fit: BoxFit.cover),
            ),
          ),

          //安全区域显示,确保显示正常
          SliverSafeArea(
            sliver: SliverPadding(
              padding: EdgeInsets.all(8.0),
              // sliver: SliverGridDemo(),  //Grid
              sliver: SliverListDemo(), //List
            ),
          )
        ],
      ),
    );
  }
}

//  SliverGrid
class SliverGridDemo extends StatelessWidget {
  List<Animal> animals = Animal.allAnimal();
  @override
  Widget build(BuildContext context) {
    return SliverGrid(
      gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
        crossAxisCount: 2, //每行2个item
        crossAxisSpacing: 8.0,
        mainAxisSpacing: 8.0,
        childAspectRatio: 1.5, // 长/宽的比例
      ),
      delegate: SliverChildBuilderDelegate(
        (BuildContext context, int index) {
          return Container(
            child: Image.network(
              animals[index].image,
              fit: BoxFit.cover,
            ),
          );
        },
        childCount: animals.length, //如果这里不设置数量,默认是无限多,界面超出部分报错。
      ),
    );
  }
}

//  SliverList
class SliverListDemo extends StatelessWidget {
  List<Animal> animals = Animal.allAnimal();
  @override
  Widget build(BuildContext context) {
    return SliverList(
      delegate: SliverChildBuilderDelegate(
        (BuildContext context, int index) {
          return Padding(
            padding: EdgeInsets.only(bottom: 40.0), //仅设置底部有padding
            child: Material(
              borderRadius: BorderRadius.circular(16.0), //设置Material倒角16.0
              elevation: 20.0, //设置阴影高度10.0
              shadowColor: Colors.grey.withOpacity(0.5), //设置阴影颜色,灰色透明度0.3
              // 使用层叠布局,图片上面还有文字
              child: Stack(
                children: <Widget>[
                  // AspectRatio 调整child到设置的宽高比
                  AspectRatio(
                    aspectRatio: 18 / 9, //指定长高比例
                    child: Container(
                      decoration: new BoxDecoration(
                        // border设置边框
                        border: new Border.all(width: 2.0, color: Colors.red),
                        //设置Container倒角16.0
                        borderRadius: BorderRadius.circular(16.0),
                        image: new DecorationImage(
                            image: new NetworkImage(
                              animals[index].image,
                            ),
                            fit: BoxFit.cover),
                      ),
                    ),
                  ),

                  //  Positioned控件主要用来设置绝对布局,必须配合Stack控件来使用
                  Positioned(
                    right: 20,
                    bottom: 20,
                    child: Column(
                      //纵向布局
                      crossAxisAlignment: CrossAxisAlignment.start,
                      children: <Widget>[
                        Text(animals[index].name,
                            style: TextStyle(
                              fontSize: 18.0,
                              color: Colors.orangeAccent,
                            )),
                        Text(animals[index].description,
                            style: TextStyle(
                              fontSize: 14.0,
                              color: Colors.purpleAccent,
                            )),
                      ],
                    ),
                  )
                ],
              ),
            ),
          );
        },
        childCount: animals.length, //如果这里不设置数量,默认是无限多,界面超出部分报错。
      ),
    );
  }
}

效果演示:
在这里插入图片描述

Flutter跨平台开发实战: 鸿蒙与循环交互艺术:Sliver 视差滚动与沉浸式布局 本文探讨了在Flutter中实现视差滚动效果的原理与方法。通过分析视差几何学的线性映射关系,利用SliverPersistentHeaderDelegate构建具有沉浸感的品牌详情头部。核心代码展示了背景层、遮罩层和前景内容的分层实现,并针对鸿蒙高刷屏提出了平滑曲线优化方案。视差布局通过简单的相对速度计算,在二维界面创造出三维深度错觉,为移动应用带来更丰富的交互体验。 阅读详情

相关推荐

Computer Networks 和 Computer & Security投稿经验

论文投稿

qq_50604294的博客 9225

Flutter---Listview横向滚动列表(1)

这是一个使用ListView.builder来建造的横向滚动水果数据列表,当点击的时候会有一个选中图标和选中边框,并且文字的颜色也会发生更改。为什么callback能够直到当前用户点击的是哪个子项?1.准备数据,并且定义一个值为当前选中索引。2.定义UI,设置最底层的渐变背景。或者可以自定义数据类来使用。6.设置通用的功能小卡片。4.设置横向滚动列表。

m0_50891221的博客 509

深度理解嵌入(embedding)层

首先从one_hot开始: one_hot的优点:计算方便快捷、表达能力强。 one_hot的缺点:过于稀疏,过于占用资源,尤其是在数据量特别大时;数据之间完全独立。

weixin_44441131的博客 5658

Flutter 组件之 SliverGrid

和GridView差不到。

Tools_are的博客 642

YOLOv8 模型进化全解析:百种创新模块集成方法与实战部署指南(附资料链接)

动态网络 | DeformableConv/DynamicHead| +2.8% || 轻量化卷积 | GhostConv/MobileConv | +1.2% || 多尺度融合 | AFPN/ASFF | +3.5% || 注意力机制 | CA/EMA/SimAM | +1.8-4.2% |

FJN110的博客 110

【开发必备插件】iframe嵌套报“拒绝连接请求”的本地解决方法

关键词:iframe 拒绝连接、X-Frame-Options、Chrome 插件、前端调试、Allow X-Frame-Options前几天我在本地项目里调试一个第三方网站的嵌入页面时,遇到了一个非常经典的报错:xxx.com 拒绝了我们的连接请求。熟悉的老前端们一眼就知道——这是。但对于日常开发来说,我们经常需要在本地测试 iframe 嵌套外部页面(比如嵌第三方登录页、支付页、可视化报表系统等)。而线上站点配置了或DENY时,就会直接导致 iframe 加载失败。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 1539

Flutter 滚动布局的几种常见效果处理

文章目录一、滚动布局嵌套Column布局二、强制子控件充满屏幕 一、滚动布局嵌套Column布局 有这么一种效果,编写的Column列表布局或者其它控件布局,如果超过屏幕的话需要能够进行上下滚动,或者如果弹出输入框的时候屏幕不会出现控件超出屏幕的问题。在这里主要是使用SingleChildScrollView进行解决。 效果如下: 代码如下: class ScrollColumn extends StatelessWidget { @override Widget build(BuildConte

Mr_Tony的专栏 5698

第154章 点云大规模并行处理(GPU加速)

优化点云处理✨ 使用。

yumeiguo的博客 374

【Flutter】二十、Flutter中常用组件—— CustomScrollView

一、CustomScrollView二、Sliver2.1 SliverAppBar 一、CustomScrollView CustomScrollView是可以使用sliver自定义滚动模型(效果)的widget。其中sliver包括SliverList、SliverFixedExtentList、SliverGrid、SliverPadding、SliverAppBar,对于大多数Sliv...

MAXLZ的博客 2586

如何使用 Python 爬虫获取猫眼电影数据:电影评分与评论分析

随着互联网的快速发展,越来越多的人开始使用各种在线平台来了解电影信息,猫眼电影作为一个非常流行的在线电影票务平台,提供了详细的电影评分、评论和票房数据。本篇博客将详细介绍如何使用 Python 爬虫技术获取猫眼电影平台上的电影数据,重点关注电影评分和用户评论的爬取,分析其背后的数据处理和反爬虫技术。如果你对数据分析、电影评论分析等话题感兴趣,可以根据本文的示例进一步深入挖掘更多的数据,为决策提供支持,或为电影产业的相关研究提供有价值的分析依据。有些猫眼电影的页面数据是动态加载的,使用。

2201_76125261的博客 1622

RK3588S之CPU--benchmark(一)

本章会基于RK3588S来介绍有关CPU常用的benchmark工具及测试过程

文艺小少年的博客 1498

Flutter 滚动布局:sliver模型

Flutter中可滚动布局基本都来自Sliver模型,本文探讨sliver模型原理。

Mamong's blog 2980

RH850从0搭建Autosar开发环境【3X】- Davinci Configurator之EcuM模块配置详解(上)

RH850从0搭建Autosar开发环境【3X】- Davinci Configurator之EcuM模块配置详解(上)

weixin_42412049的博客 1014

sliver_tools:Flutter滚动布局的终极解决方案,打造流畅UI的10个核心技巧

sliver_tools是一套强大的Flutter滚动布局工具集,弥补了Flutter框架中缺失的关键Sliver组件功能。通过这些实用工具,开发者可以轻松实现复杂的滚动效果,提升应用UI的流畅度和用户体验。无论是处理交叉轴约束、实现固定头部,还是创建动画过渡效果,sliver_tools都能提供简单高效的解决方案。 ## 为什么选择sliver_tools? 在Flutter开发中,Sliv

gitblog_00414的博客 1049

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

sliver_tools最佳实践:避免常见错误的7个Flutter开发技巧

sliver_tools是一套实用的Flutter Sliver工具集,弥补了Flutter框架中缺失的Sliver功能。本文将分享7个关键技巧,帮助开发者避免使用sliver_tools时的常见错误,提升滚动界面开发效率。 ## 1. 正确配置MultiSliver的pushPinnedChildren参数 MultiSliver允许将多个Sliver组合成单个组件返回,是实现复杂滚动布局的

gitblog_01169的博客 805

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

sliver_tools与Flutter原生Sliver对比:为什么你需要这个强大的工具库

Flutter框架中的Sliver组件为构建复杂滚动界面提供了强大基础,但在实际开发中往往需要更多定制化功能。**sliver_tools**作为一个轻量级工具库,弥补了Flutter原生Sliver的功能缺口,让开发者能够轻松实现跨轴约束、动态 paint 范围、固定头部等高级交互效果。本文将深入对比原生Sliver与sliver_tools的核心差异,帮助你快速掌握这个提升开发效率的必备工具。

gitblog_00253的博客 640

探索Flutter Sliver 家族:打造流畅的复杂滚动体验

Flutter 的 Sliver 家族是一组专为构建复杂的滚动效果而设计的小部件。对于更复杂的滚动布局需求,比如自定义滚动动画、滚动时的动态布局变化或者是在同一个滚动视图中混合使用不同类型的内容布局(例如列表和网格的组合),ListView 和 GridView 的功能可能就显得不够灵活和强大。:这是一个非常流行的 Sliver 小部件,它可以创建一个在页面滚动时动态变化的应用栏。它要求所有的子项有相同的固定高度,这可以优化性能,因为所有的子项渲染高度是预先知道的。:这个小部件用于填充滚动视图的剩余空间。

夏目艾拉的学习之路 1759

如何快速上手sliver_tools:Flutter开发者必学的滚动组件库完整指南

sliver_tools是一套为Flutter开发者打造的实用滚动组件库,弥补了Flutter框架中缺失的多种Sliver工具。本文将带你快速掌握这个强大工具库的核心功能与使用方法,让你的滚动界面开发效率提升300%! [![sliver_tools logo](https://raw.gitcode.com/gh_mirrors/sl/sliver_tools/raw/e52731670ec0

gitblog_00516的博客 952

深入了解Flutter中的Sliver:介绍与使用场景

Sliver是Flutter中的一种特殊的滚动元素,它可以用来构建复杂的滚动效果,例如可伸缩的头部、悬浮的导航栏等。

爱喝水程序员的博客 2002

Flutter - 循序渐进 Sliver

列表组件在移动端上尤为重要,Sliver 作为 Flutter 列表组件中重要的一部分,开发者非常有必要了解 Sliver 的原理和用法。 两种类型的布局 Flutter 的布局可以分为两种: Box ( RenderBox ): 2D 绘制布局 Sliver ( RenderSliver ):滚动布局 重要的概念 Sliver Sliver 是 Flutter 中的一个概念,表示可滚动布局中的一部分,它的 child 可以是普通的 Box Widget。 ViewPort ViewPort

大灰狼的小绵羊哥哥的博客 4526

MultiSliver深度解析:Flutter复杂滚动布局的终极分组解决方案

在Flutter应用开发中,处理复杂的滚动布局一直是开发者面临的挑战之一。**sliver_tools**项目的**MultiSliver**组件为这个问题提供了完美的解决方案,让开发者能够轻松实现复杂的滚动布局分组功能。MultiSliver允许将多个Sliver组件组合成一个单一的Widget,这在构建现代移动应用界面时特别有用。😊 ## 🔍 MultiSliver是什么? **Mul

gitblog_00672的博客 765

第13篇 Flutter Sliver 动画:滚动视差效果

Flutter Sliver 动画让滚动体验更加丰富。记住,像素不能偏差 1px。

Leo 4106

SliverStack实战教程:轻松实现Flutter滚动层叠布局效果

Flutter开发者们,你们是否曾为创建复杂的滚动布局而烦恼?🤔 想要在Sliver组件上添加装饰效果却无从下手?今天我要为大家介绍一个强大的Flutter插件——**sliver_tools**,特别是其中的**SliverStack**组件,它能让你轻松实现Flutter滚动层叠布局效果!✨ ## 🎯 什么是SliverStack? **SliverStack**是sliver_too

gitblog_00089的博客 989

Flutter Sliver 动画在复杂滚动布局中的性能突破与实战

电商首页:顶部大 Banner + 分类网格 + 瀑布流商品列表 + 底部悬浮按钮。产品经理说"要丝般顺滑"——在 iPhone 12 上确实丝般顺滑,但在同事的 Redmi Note 9 上 FPS 只有 37。Profiler 看了 3 小时,发现 CPU 热点不在 build() 不在 paint(),而在 Dart VM 的 GC——每次创建和销毁 Sliver 子组件时产生的临时对象触发了频繁的 Minor GC。问题不在"列表太长",而在于 Sliver 的回收策略和动画耦合:当快速滑动时,Sl

Leo 4668

flutter学习-day12-可滚动组件和监听

通常可滚动组件的子组件可能会非常多、占用的总高度也会非常大;如果要一次性将子组件全部构建出将会非常昂贵!为此,Flutter中提出一个Sliver(中文为“薄片”的意思)概念,Sliver 可以包含一个或多个子组件。Sliver 的主要作用是配合:加载子组件并确定每一个子组件的布局和绘制信息,如果 Sliver 可以包含多个子组件时

鹏多多的博客 1730

Flutter 笔记 | Flutter 核心原理(五)Box 布局模型和 Sliver 布局模型

Flutter Box 布局模型和 Sliver 布局模型,Flutter Box 布局模型和 Sliver 布局模型,Flutter Box 布局模型和 Sliver 布局模型,Flutter Box 布局模型和 Sliver 布局模型,Flutter Box 布局模型和 Sliver 布局模型,Flutter Box 布局模型和 Sliver 布局模型,Flutter Box 布局模型和 Sliver 布局模型,Flutter Box 布局模型和 Sliver 布局模型,Flutter Box 布局模型

川峰的博客 1582
上一篇: Flutter开发(十)—— 五种布局之Card Widget 卡片布局
下一篇: Ubuntu 启动AndroidStudio模拟器报错 --- KVM is required to run this AVD. /dev/kvm device: permission denied.
RedKeyer
博客等级 码龄11年 33粉丝 67原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值