Flutter(四):SingleChildScrollView、GridView
SingleChildScrollView、GridView 遇到的问题
以下代码会报错:
class GridViewPage extends StatefulWidget {const GridViewPage({super.key});State<GridViewPage> createState() => _GridViewPage();
}class _GridViewPage extends State<GridViewPage> {Widget build(BuildContext context) {return Scaffold(appBar: AppBar(title: const Text('GridView 布局')),body: SingleChildScrollView(child: GridView.count(crossAxisCount: 1,children: [Container(color: Colors.red),Container(color: Colors.green),Container(color: Colors.blue),Container(color: Colors.black),Container(color: Colors.grey),],),),);}
}
修改方案一
存在问题:给定一个高度的方法虽然能解决报错问题,但是滚动区域会固定在所给高度内,无法自适应高度
class GridViewPage extends StatefulWidget {const GridViewPage({super.key});State<GridViewPage> createState() => _GridViewPage();
}class _GridViewPage extends State<GridViewPage> {Widget build(BuildContext context) {return Scaffold(appBar: AppBar(title: const Text('GridView 布局')),body: SizedBox(height: 500,child: GridView.count(crossAxisCount: 1,children: [Container(color: Colors.red),Container(color: Colors.green),Container(color: Colors.blue),Container(color: Colors.black),Container(color: Colors.grey),],),),);}
}
修改方案二
存在问题:页面不能滚动
shrinkWrap: true
: 自适应GridView高度
class GridViewPage extends StatefulWidget {const GridViewPage({super.key});State<GridViewPage> createState() => _GridViewPage();
}class _GridViewPage extends State<GridViewPage> {Widget build(BuildContext context) {return Scaffold(appBar: AppBar(title: const Text('GridView 布局')),body: SingleChildScrollView(child: GridView.count(crossAxisCount: 1,shrinkWrap: true,children: [Container(color: Colors.red),Container(color: Colors.green),Container(color: Colors.blue),Container(color: Colors.black),Container(color: Colors.grey),],),),);}
}
解决页面不能滚动问题
physics: const NeverScrollableScrollPhysics()
: 禁用GridView自带的滚动
class GridViewPage extends StatefulWidget {const GridViewPage({super.key});State<GridViewPage> createState() => _GridViewPage();
}class _GridViewPage extends State<GridViewPage> {Widget build(BuildContext context) {return Scaffold(appBar: AppBar(title: const Text('GridView 布局')),body: SingleChildScrollView(child: GridView.count(crossAxisCount: 1,shrinkWrap: true,physics: const NeverScrollableScrollPhysics(),children: [Container(color: Colors.red),Container(color: Colors.green),Container(color: Colors.blue),Container(color: Colors.black),Container(color: Colors.grey),],),),);}
}
实现 GridView 布局
属性 | 描述 |
---|---|
shrinkWrap | 自适应宽高 |
scrollDirection | 布局方向 |
childAspectRatio | 主轴、交叉轴 比 |
mainAxisSpacing | 主轴间距 |
crossAxisSpacing | 交叉轴间距 |
crossAxisCount | 交叉轴列数 |
maxCrossAxisExtent | 交叉轴列最尺寸 |
import 'package:flutter/material.dart';class TitleWidget extends StatelessWidget {final String title;const TitleWidget(this.title, {super.key});Widget build(BuildContext context) {return Container(margin: const EdgeInsets.fromLTRB(10, 5, 10, 5),padding: const EdgeInsets.only(left: 5),decoration: const BoxDecoration(border: Border(left: BorderSide(color: Colors.lightBlue, width: 5)),),child: Text(title),);}
}class ContainerWidget extends StatelessWidget {final Color color;final String title;const ContainerWidget({super.key, required this.color, required this.title});Widget build(BuildContext context) {return Container(decoration: BoxDecoration(color: color,borderRadius: const BorderRadius.all(Radius.circular(5)),),child: Center(child: Text(title)),);}
}class GridViewPage extends StatefulWidget {const GridViewPage({super.key});State<GridViewPage> createState() => _GridViewPage();
}class _GridViewPage extends State<GridViewPage> {List<ContainerWidget> containerWidgetList = const [ContainerWidget(color: Colors.red, title: 'RED'),ContainerWidget(color: Colors.orange, title: 'ORANGE'),ContainerWidget(color: Colors.yellow, title: 'YELLOW'),ContainerWidget(color: Colors.green, title: 'GREEN'),ContainerWidget(color: Colors.cyan, title: 'CYAN'),ContainerWidget(color: Colors.blue, title: 'BLUE'),ContainerWidget(color: Colors.purple, title: 'PURPLE'),ContainerWidget(color: Colors.grey, title: 'GREY'),];Widget build(BuildContext context) {return Scaffold(appBar: AppBar(title: const Text('GridView 布局')),body: SingleChildScrollView(child: Column(crossAxisAlignment: CrossAxisAlignment.start,children: [const TitleWidget('GridView.count'),SizedBox(height: 160,child: GridView.count(scrollDirection: Axis.horizontal,crossAxisCount: 1,padding: const EdgeInsets.only(left: 10, right: 10),crossAxisSpacing: 0,mainAxisSpacing: 10,childAspectRatio: 0.6,children: containerWidgetList,),),const TitleWidget('GridView.extent'),GridView.extent(shrinkWrap: true,physics: const NeverScrollableScrollPhysics(),scrollDirection: Axis.vertical,maxCrossAxisExtent: 200,childAspectRatio: 0.8,padding: const EdgeInsets.only(left: 10, right: 10),mainAxisSpacing: 10,crossAxisSpacing: 10,children: containerWidgetList,),const TitleWidget('SliverGridDelegateWithFixedCrossAxisCount'),SizedBox(height: 330,child: GridView(gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 2,crossAxisSpacing: 10,mainAxisSpacing: 10,childAspectRatio: 0.6,),scrollDirection: Axis.horizontal,padding: const EdgeInsets.only(left: 10, right: 10),children: containerWidgetList,),),const TitleWidget('SliverGridDelegateWithMaxCrossAxisExtent'),GridView(gridDelegate: const SliverGridDelegateWithMaxCrossAxisExtent(maxCrossAxisExtent: 200,childAspectRatio: 2,mainAxisSpacing: 10,crossAxisSpacing: 10,),shrinkWrap: true,physics: const NeverScrollableScrollPhysics(),scrollDirection: Axis.vertical,padding: const EdgeInsets.only(left: 10, right: 10, bottom: 10),children: containerWidgetList,),],),),);}
}
相关文章:

Flutter(四):SingleChildScrollView、GridView
SingleChildScrollView、GridView 遇到的问题 以下代码会报错: class GridViewPage extends StatefulWidget {const GridViewPage({super.key});overrideState<GridViewPage> createState() > _GridViewPage(); }class _GridViewPage extends State<GridViewPage&g…...

【C++】102.二叉树的层序遍历
题目描述 给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。 示例1: 输入:root [3,9,20,null,null,15,7] 输出:[[3],[9,20],[15,7]]示例 2࿱…...
Java学习笔记006——子类与父类的类型转换
在Java中,类型转换主要涉及到两种类型:向上类型转换(Upcasting)和向下类型转换(Downcasting)。 1. 向上类型转换(Upcasting): 向上类型转换是将子类的对象转换为父类类…...

FedAsync Asynchronous Federated Optimization
文章目录 IntroductionMethodologyConvergence analysisExperiments Introduction 联邦学习有三个关键属性: 不频繁的任务激活。对于弱边缘设备,学习任务只在设备空闲、充电、连接非计量网络时执行.沟通不频繁。边缘设备和远程服务器之间的连接可能经常不可用、缓…...

学习基于 JavaScript 语言 的计算机界三大神书”之一 ——SICP
如何阅读“计算机界三大神书”之一 ——SICP 《计算机程序的构造和解释》(Structure and Interpretation of Computer Programs,简记为SICP)是MIT的基础课教材,出版后引起计算机教育界的广泛关注,对推动全世界大学计算…...

【RISC-V 指令集】RISC-V 向量V扩展指令集介绍(一)-向量扩展编程模型
1. 引言 以下是《riscv-v-spec-1.0.pdf》文档的关键内容: 这是一份关于向量扩展的详细技术文档,内容覆盖了向量指令集的多个关键方面,如向量寄存器状态映射、向量指令格式、向量加载和存储操作、向量内存对齐约束、向量内存一致性模型、向量…...
K8s 镜像缓存管理 kube-fledged 认知
写在前面 博文内容为K8s 镜像缓存管理 kube-fledged 认知内容涉及: kube-fledged 简单介绍部署以及基本使用 理解不足小伙伴帮忙指正 不必太纠结于当下,也不必太忧虑未来,当你经历过一些事情的时候,眼前的风景已经和从前不一样了。…...
ModbusTcp协议
Modbus TCP是一种通信协议,用于工业设备之间的通信。它是Modbus协议家族中的一个成员,最初是为串行通信设计的,但后来扩展到了TCP/IP网络。Modbus TCP/IP是一种公开的标准,由Modbus组织制定,并且被广泛应用于工业自动化…...

常用工具——Gradle
前言 实践是最好的学习方式,技术也如此。 文章目录 前言一、Gradle 简介二、文件结构详解 一、Gradle 简介 Gradle 文件是一个独立于 android 之外的一个东西; 是什么 gradle 就是编译、打包 Android 工程的一个构建工具;build.gradle 文件&…...

OpenHarmony教程指南—Navigation开发 页面切换场景范例
简介 在应用开发时,我们常常遇到,需要在应用内多页面跳转场景时中使用Navigation导航组件做统一的页面跳转管理,它提供了一系列属性方法来设置页面的标题栏、工具栏以及菜单栏的各种展示样式。除此之外还拥有动态加载,navPathSta…...

2024-简单点-picamera2除了文档还有哪里可以学习实例?
picamera2学习例子 去github的picamera2库,找app和examples目录,然后学习...

JavaScript实现点击鼠标弹钢琴的效果
思路: 图片设置宽900px,找到鼠标按下时的x坐标和img距离body的x坐标,两个值相减,然后除100取整,赋值给a,通过判断a的值来确定放出那个音乐。 完整代码: <!DOCTYPE html> <html lan…...

docker-compose Install rustdesk
RustDesk RustDesk 是一款开源的远程支持和远程桌面工具,它旨在为用户提供便捷的远程协助和远程访问功能。 默认情况下,hbbs 监听21115(tcp), 21116(tcp/udp), 21118(tcp),hbbr 监听21117(tcp), 21119(tcp)。务必在防火墙开启这几个端口, 请注意21116同时要开启TCP和UDP。…...

初学C++
注释 变量 作用:给一段指定的内存空间起名,方便操作这段内容 数据类型 变量名 变量初始值; 常量 用于记录程序中不可更改的数据 宏常量: #define 宏常量 常量值 const修饰的变量: const 数据类型 常量名 常量值; 关键字 …...

数据分析-Pandas数据y轴双坐标设置
数据分析-Pandas数据y轴双坐标设置 数据分析和处理中,难免会遇到各种数据,那么数据呈现怎样的规律呢?不管金融数据,风控数据,营销数据等等,莫不如此。如何通过图示展示数据的规律? 数据表&…...

Android多线程实现方式及并发与同步,Android面试题汇总
一. 开发背景 想要成为一名优秀的Android开发,你需要一份完备的知识体系,在这里,让我们一起成长为自己所想的那样。 我们的项目需要开发一款智能硬件。它由 Web 后台发送指令到一款桌面端应用程序,再由桌面程序来控制不同的硬件设…...

2023年全国职业院校技能大赛中职组大数据应用与服务赛项题库参考答案陆续更新中,敬请期待…
2023年全国职业院校技能大赛中职组大数据应用与服务赛项题库参考答案陆续更新中,敬请期待… 武汉唯众智创科技有限公司 2024 年 2 月 联系人:辜渝傧13037102709 题号:试题01 模块三:业务分析与可视化 (一࿰…...

设计MySQL数据表的几个注意点
最近合作搞项目,发现了很多问题。特别的,数据库层面上的问题更为致命。记录一下,希望后面看到博客的同学们注意。 注意:以下观点只用于一般情况下的单体、微服务,不保证适用所有场景。 一、ID问题 ID名称问题 如下图…...
android 键盘遮挡输入框问题回忆
背景 刚开始做Android的时候,有一次遇到输入框位于页面底部,弹出的键盘老是遮挡输入框,这就给人一种感觉----不咋舒服。当时,网上百度了一遍,后面终于解决了,由于当时天天加班,没时间写博客&…...
ZJGSU 1737 链表
题目描述 请根据输入数据构造一个带头结点的单链表,链表结点的数据结构为struct node {int data; struct node *next;},试设计算法:按递增次序输出单链表中各结点的数据元素,并释放结点所占用的存储空间。 要求:不允…...

JavaScript 中的 ES|QL:利用 Apache Arrow 工具
作者:来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗?了解下一期 Elasticsearch Engineer 培训的时间吧! Elasticsearch 拥有众多新功能,助你为自己…...

多种风格导航菜单 HTML 实现(附源码)
下面我将为您展示 6 种不同风格的导航菜单实现,每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...

Map相关知识
数据结构 二叉树 二叉树,顾名思义,每个节点最多有两个“叉”,也就是两个子节点,分别是左子 节点和右子节点。不过,二叉树并不要求每个节点都有两个子节点,有的节点只 有左子节点,有的节点只有…...

Reasoning over Uncertain Text by Generative Large Language Models
https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829 1. 概述 文本中的不确定性在许多语境中传达,从日常对话到特定领域的文档(例如医学文档)(Heritage 2013;Landmark、Gulbrandsen 和 Svenevei…...
LeetCode - 199. 二叉树的右视图
题目 199. 二叉树的右视图 - 力扣(LeetCode) 思路 右视图是指从树的右侧看,对于每一层,只能看到该层最右边的节点。实现思路是: 使用深度优先搜索(DFS)按照"根-右-左"的顺序遍历树记录每个节点的深度对于…...

Python Ovito统计金刚石结构数量
大家好,我是小马老师。 本文介绍python ovito方法统计金刚石结构的方法。 Ovito Identify diamond structure命令可以识别和统计金刚石结构,但是无法直接输出结构的变化情况。 本文使用python调用ovito包的方法,可以持续统计各步的金刚石结构,具体代码如下: from ovito…...

从零开始了解数据采集(二十八)——制造业数字孪生
近年来,我国的工业领域正经历一场前所未有的数字化变革,从“双碳目标”到工业互联网平台的推广,国家政策和市场需求共同推动了制造业的升级。在这场变革中,数字孪生技术成为备受关注的关键工具,它不仅让企业“看见”设…...

【大模型】RankRAG:基于大模型的上下文排序与检索增强生成的统一框架
文章目录 A 论文出处B 背景B.1 背景介绍B.2 问题提出B.3 创新点 C 模型结构C.1 指令微调阶段C.2 排名与生成的总和指令微调阶段C.3 RankRAG推理:检索-重排-生成 D 实验设计E 个人总结 A 论文出处 论文题目:RankRAG:Unifying Context Ranking…...
精益数据分析(98/126):电商转化率优化与网站性能的底层逻辑
精益数据分析(98/126):电商转化率优化与网站性能的底层逻辑 在电子商务领域,转化率与网站性能是决定商业成败的核心指标。今天,我们将深入解析不同类型电商平台的转化率基准,探讨页面加载速度对用户行为的…...
比特币:固若金汤的数字堡垒与它的四道防线
第一道防线:机密信函——无法破解的哈希加密 将每一笔比特币交易比作一封在堡垒内部传递的机密信函。 解释“哈希”(Hashing)就是一种军事级的加密术(SHA-256),能将信函内容(交易细节…...