第四百三十九回

2024-04-04 11:04
文章标签 第四 三十九

本文主要是介绍第四百三十九回,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 1. 概念介绍
  • 2. 实现方法
  • 3. 示例代码

我们在上一章回中介绍了dart语言中的setter/getter相关的内容,本章回中将介绍局部动态列表.闲话休提,让我们一起Talk Flutter吧。

在这里插入图片描述

1. 概念介绍

在正常情况下列表位于整个页面中,而且可以在整个页面中滚动,我们在这里说的局部动态列表是指在页面中的某一部分区域中显示一个列表,列表的滚动范围只限于这个
局部区域,我们把这样的列表叫作局部动态列表。在实际项目中这样的场景比较多,本章回中将详细介绍如何实现局部动态列表。

2. 实现方法

我们首先使用使用Column组件划分布局,然后把ListView当作该组件的子组件,这样就创建好了局部动态列表。这个步骤看着简单,不过还有一些细节需要说明,不然
这样的程序会有编译错误:Failed assertion: line 1966 pos 12: 'hasSize。其在原因是Column要求子组件有固定的大小,而子组件ListView没有固定的大小。解决方法有两个:

  • 在ListView外面嵌套一个容器组件,比如Container,并且指定容器的高度,相当于间接指定了ListView的高度。
  • 使用shrinkWrap属性,该属性默认值为false.将它设置为true.表示让ListView拥有一个可扩展的最大值。相当于指定了ListView的高度。
    上面的两种方法都可以,在使用第一种方法时还有一些特殊情况需要注意,为了显示ListView中更多的内容,把它外层嵌套的容器高度放大一些,这样做会有超过屏幕高
    度的风险,此时可以容器的外层再嵌套一个可滚动的组件,比如SingleChildScrollView,这样即使显示的内容超过屏幕了也可以滚动显示。
    在使用第二个方法时,主要是不好理解shrinkWrap属性的功能,大家可以查看源代码中的注释,这个注释写的比较清楚,详细如下:
  /// {@template flutter.widgets.scroll_view.shrinkWrap}/// Whether the extent of the scroll view in the [scrollDirection] should be/// determined by the contents being viewed.////// If the scroll view does not shrink wrap, then the scroll view will expand/// to the maximum allowed size in the [scrollDirection]. If the scroll view/// has unbounded constraints in the [scrollDirection], then [shrinkWrap] must/// be true.////// Shrink wrapping the content of the scroll view is significantly more/// expensive than expanding to the maximum allowed size because the content/// can expand and contract during scrolling, which means the size of the/// scroll view needs to be recomputed whenever the scroll position changes.////// Defaults to false.////// {@youtube 560 315 https://www.youtube.com/watch?v=LUqDNnv_dh0}/// {@endtemplate}final bool shrinkWrap;

3. 示例代码

Column(children: [const Image(width: double.infinity,height: 200,image: AssetImage("images/ex.png"),fit:BoxFit.fill, ),const Text('data sample'),Container(decoration:BoxDecoration(color: Colors.green,borderRadius: BorderRadius.circular(8)) ,height: 200,child: ListView.builder(///column中嵌套ListView会报hassize类型的的错误,即使指定list数量也不行///Failed assertion: line 1966 pos 12: 'hasSize///解决方法1:在ListView外层嵌套一个容器,指定容器大小来限定ListView的大小。///该方法相当于创建了个局部List,容器内的List可以自由滚动,也可以通过physics属性让它不滚动///解决方法2:使用shrinkWrap属性,itemCount: 10,// physics: const NeverScrollableScrollPhysics(),itemBuilder: (context,index){return const Card(child: Padding(padding: EdgeInsets.all(10),child: Text("List item"),),);},),),Container(color: Colors.lightBlue,child: ListView.builder(///用来控制List内部的边距,包含head和tail,如果去掉head和tail可以使用only方法padding: const EdgeInsets.all(10),shrinkWrap: true,physics: const NeverScrollableScrollPhysics(),itemCount: 20,itemBuilder:(context,index){return const Card(color: Colors.orange,child: Padding(///这个padding可以控制card的大小,也就是listItem的大小padding: EdgeInsets.all(8),child: Text('Another List Item'),),);},),),],
),

上面的示例代码中通过两个ListView演示了两种解决方法,大家可以去掉外层的容器,或者修改shrikWrap属性值来看看程序出错时的样子,然后按照我们介绍的方法
来解决错误,这样做的效果比较好,建议大家自己动手去实践。
看官们,关于"局部动态列表"相关的内容就介绍到这里,欢迎大家在评论区交流与讨论!

这篇关于第四百三十九回的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/875610

相关文章

项目实战系列三: 家居购项目 第四部分

购物车 🌳购物车🍆显示购物车🍆更改商品数量🍆清空购物车&&删除商品 🌳生成订单 🌳购物车 需求分析 1.会员登陆后, 可以添加家居到购物车 2.完成购物车的设计和实现 3.每添加一个家居,购物车的数量+1, 并显示 程序框架图 1.新建src/com/zzw/furns/entity/CartItem.java, CartItem-家居项模型 /***

C语言深度剖析--不定期更新的第四弹

哈哈哈哈哈哈,今天一天两更! void关键字 void关键字不能用来定义变量,原因是void本身就被编译器解释为空类型,编译器强制地不允许定义变量 定义变量的本质是:开辟空间 而void 作为空类型,理论上不应该开辟空间(针对编译器而言),即使开辟了空间,也只是作为一个占位符看待(针对Linux来说) 所以,既然无法开辟空间,也无法作为正常变量使用,既然无法使用,干脆编译器不让它编译变

实习三十九:harbor私有仓库管理

一、harbor私有仓库管理 是python的包管理工具,和yum对redhat的关系是一样的 yum -y install epel-release yum  -y install python2-pip pip install --upgrade pip pip list  pip 8x pip install --upgrade pip pip install --upgrade pip=

第四讲:拟合算法

与插值问题不同,在拟合问题中不需要曲线一定经过给定的点。拟合问题的目标是寻求一个函数(曲线)使得该曲线在某种准则下与所有的数据点最为接近,即曲线拟合的最好(最小化损失函数)。 插值算法中,得到的多项式f(x)要经过所有样本点。但是如果样本点太多,那么这个多项式次数过高,会造成龙格现象。 尽管我们可以选择分段的方法避免这种现象,但是更多时候我们更倾向于得到-个确定的曲线,尽管这条曲线不能经过每

(第四十天)配置完整的考试系统,完成前端和后端并优化,mysql后端,nginx前端,java连接

回顾 1 、使用 harbor 仓库 python --version yum -y update yum -y install python2-pip pip install --upgrade pip == 20 .3 -i ....... pip install docker-compose -i .......

Go游戏服务器开发的一些思考(三十九):go reflect的正确使用方法

错误的使用 go reflect包,在写一些通用库、通用模块时,提供了不少便利。 但是需要注意,go reflect包是非常慢的! 下图,就是一次失败使用go reflect包的尝试: (CStructGO 是 本人使用go reflect包写的一个C-Style Struct协议库:cstruct-go) 可以看到,同样的功能,cstruct-go比protobuf慢了一个数量级。

小白Sass教程---通过实例学Sass--第四讲--属性嵌套

CSS规则在sass中可以进行嵌套,css属性也可以进行嵌套,属性嵌套的规则是: 有中横线的属性可以拆解嵌套,以中横线为界限进行拆解,依次嵌套 废话不多说,直接上代码: .lesson3-demo2{.box{height: 100px;width: 800px;padding: {top: 20px;left: 30px;}border: {left: 5px solid #3da7f5

sqli-libs第四关详解

首先判断是数字型注入还是字符型注入 正常显示,说明是字符型注入,那么尝试单引号闭合 还是正常显示,尝试双引号闭合 有报错信息,含有括号,这时就应该想到,sql代码是("$id")这样写的了。直接采取闭合,判断字段数。 4不行,那就是3个字段,再看看哪些地方可以显示数据,把数据库名和版本也搞出来 后面就是利用information_schema这个库查询信息了,先看看s

数字芯片设计验证经验分享系列文章(第四部分):将ASIC IP核移植到FPGA上——如何测试IP核的功能和考虑纯电路以外的其他因素

作者:Philipp Jacobsohn,SmartDV首席应用工程师 Sunil Kumar,SmartDV FPGA设计总监 本系列文章从数字芯片设计项目技术总监的角度出发,介绍了如何将芯片的产品定义与设计和验证规划进行结合,详细讲述了在FPGA上使用IP核来开发ASIC原型项目时,必须认真考虑的一些问题。文章从介绍使用预先定制功能即IP核的必要性开始,通过阐述开发ASIC原型设计时需要考

Java程序员从笨鸟到菜鸟(三十九)DOM 和 BOM

DOM(文档对象模型(Document Object Model)) 一、概念 在网页中,页面或文档的对象被组织在一个树形结构中,用来表示文档中对象的标准模型 二、背景 DOM可以以一种独立于平台和语言的方式访问和修改一个文档的内容和结构,使得页面可以动态地变化,如可以动态地显示或隐藏一个元素,改变属性,增加元素等,使得页面的交互性大大地增强 DOM类型 核心DOM -针对任何结