首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

颤动。如何在GridView.builder为空时折叠它(没有任何元素)

在Flutter中,可以使用ExpansionPanelList来实现在GridView.builder为空时折叠它的效果。ExpansionPanelList是一个可展开的面板列表,可以根据需要展开或折叠面板。

首先,需要创建一个ExpansionPanelList,并将其包裹在一个ListView中,以便可以滚动展开的面板列表。然后,为ExpansionPanelList提供一个ExpansionPanel的列表,每个ExpansionPanel都包含一个header和一个body。

在这个特定的情况下,我们可以将GridView.builder作为ExpansionPanel的body,并在GridView.builder为空时折叠它。以下是一个示例代码:

代码语言:txt
复制
import 'package:flutter/material.dart';

class MyWidget extends StatefulWidget {
  @override
  _MyWidgetState createState() => _MyWidgetState();
}

class _MyWidgetState extends State<MyWidget> {
  bool _isExpanded = false;

  @override
  Widget build(BuildContext context) {
    return ListView(
      children: [
        ExpansionPanelList(
          elevation: 1,
          expandedHeaderPadding: EdgeInsets.zero,
          expansionCallback: (int index, bool isExpanded) {
            setState(() {
              _isExpanded = !isExpanded;
            });
          },
          children: [
            ExpansionPanel(
              headerBuilder: (BuildContext context, bool isExpanded) {
                return ListTile(
                  title: Text('GridView'),
                );
              },
              body: _isExpanded
                  ? GridView.builder(
                      gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
                        crossAxisCount: 2,
                      ),
                      itemCount: 0, // 设置为0,即为空
                      itemBuilder: (BuildContext context, int index) {
                        return Container(
                          color: Colors.grey,
                          margin: EdgeInsets.all(8),
                        );
                      },
                    )
                  : Container(),
              isExpanded: _isExpanded,
            ),
          ],
        ),
      ],
    );
  }
}

在上面的示例中,我们使用了一个布尔值_isExpanded来控制面板的展开和折叠状态。当点击面板的header时,会调用expansionCallback函数来切换_isExpanded的值,从而实现面板的展开和折叠。

在ExpansionPanel的body中,我们使用了GridView.builder来展示网格视图。当GridView.builder的itemCount为0时,即为空,我们将其包裹在一个Container中,以实现折叠的效果。

这样,当GridView.builder为空时,面板将折叠起来,不显示任何元素;当GridView.builder有元素时,面板将展开,显示网格视图。

希望这个答案能够满足你的需求。如果有任何疑问,请随时提问。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

构建实用的Flutter文件列表:从简到繁的完美演进

如果没有,不要担心,你可以通过命令flutter create 文件列表项目来创建一个新的Flutter项目。 接下来,让我们打开项目,并找到lib文件夹。...渲染文件列表数据 现在我们已经有了一个的文件列表页面,接下来让我们来渲染一些假数据,以便我们能够看到文件列表的样子。 我们可以使用Flutter中的ListView组件来展示文件列表。...美化界面 除了均匀布局之外,我们还可以通过添加一些装饰性的元素来美化文件列表的界面,使其更加吸引人。...解决文本溢出问题:让文件名更清晰可见 当文件名过长,可能会导致文件列表中的文本溢出问题,这会影响用户体验。...,这样当文件名超出一定长度,文本将自动截断,并在末尾显示省略号,使文件名更加清晰可见。

19611

CSS进阶07-浮动Floats

如果水平方向没有足够的空间容纳浮动,它将下移直至能够放下或者没有其他浮动存在。 由于浮动不在标准流中,在浮动之前或之后创建的非定位块盒将垂直摆放,如同浮动不存在一样。...如果行盒被缩短到不能容纳任何内容,那么行盒将下移(其宽度会重新计算)直到可以容纳内容或不再有浮动。当前行中,任何在浮动盒之前的内容将重排到同一行中的浮动的另一侧。...当浮动出现两个折叠外边距之间,浮动会如同它有一个参与标准流的匿名父块一样来定位。该父块的位置由关于外边距折叠那章的规则定义。...来看两个例子: eg1:假设(简单起见)有三个盒,顺序如下: B1 块的下外边距bottom margin M1 ( B1 没有元素没有padding和border);浮动块 F 的高度 H..., B2 块top margin M2 (没有padding或border,没有元素)。

1.4K40

Flutter响应式编程:Streams和BLoC

此后,我将向您展示如何在实践中实施和使用它们。 什么是Stream? 介绍 为了便于想象Stream的概念,我们可以简单把Stream想象一个有两个端口的管道,只有其中的一个允许插入一些东西。...新的监听器将在开始收听Stream收到事件。 基本例子 任何类型的数据 第一个示例显示了“单订阅”Stream,只是打印输入的数据。 你可能会看到无关紧要的数据类型。...当然,没有什么能阻止这种类型的实现。 然而, 一个InheritedWidget没有提供任何dispose方法,请记住,在不再需要资源总是释放资源是一种很好的做法。...使这项工作的示例代码可以是: 我不知道您的意见,但就个人而言,如果我没有任何与代码移植/共享相关的限制,我发现这太笨重了,我宁愿在需要使用常规的getter / setter并使用Streams /...当GridView.builder监听该Stream(= movieBloc.outMoviesList),后者请求重建相应的MovieCard。 由于我们现在拥有数据,我们可以渲染了。

4.1K90

CSS--外边距合并的问题

请看下图: image.png 当一个元素包含在另一个元素(假设没有内边距或边框把外边距分隔开),它们的上和/或下外边距也会发生合并。...假设有一个元素,它有外边距,但是没有边框或填充。...设置了overflow属性的元素和它的子元素之间的margin不会被折叠(overflow取值visible除外)。...注意,那些已经被折叠覆盖的元素的位置对其他已经被折叠元素的位置没有任何影响;只有在对这些元素的子元素定位,border-top边界位置才是必需的。 根元素的垂直margin不会被折叠。...min-height属性设置0,那么它所拥有的margin是相邻的,并且没有border-top和border- bottom,也没有padding-top和padding-bottom,的height

1.3K20

Flutter | 滚动组件,ListView,GridVIew等

可滚动组件 当组件内容超过当前显示视口(ViewPort),如果没有特殊处理,Flutter 就会提示 Overflow 错误,为此,Flutter 提供了多种可滚动组件,用于显示列表和长布局; 可滚动组件都直接或间接的包含一个...reverse true , 滑动方向就是从右往左。..., 当滑动方向垂直方向 (ScrollDirection 值 Axis.vertical ) 并且没有指定 controller ,primary 默认为 true。...上面介绍的都需要一个子 Widget数组 作为其子元素,这些方式会提前创建好 widget,只适用于 widget 数量较小的时候,当 widget 比较多的时候,可以通过 GridView.builder...GridView.builder 必须指定的构造参数有两个: GridView.builder( ...

8.5K20

FAQ | 大屏幕设备构建应用的常见问题解答

,整理成这一篇关于折叠屏和大屏幕设备构建应用的常见问题和解答,如果您在构建过程中有任何其他的问题,欢迎通过留言的方式让我们知道。...答: 首先是思维的转变,过去直板手机开发应用,如今要切换到形状各异且尺寸不一的设备开发应用,开发者需要转变思维来考虑界面如何在各种尺寸的设备上运行,因为大屏设备的市场重要性已经毋庸置疑了。...此外开发者还需要考虑可折叠设备的形态,高级布局支持等。...这些都是需要考虑的非常重要的事项,如何在不同折叠形态下操作起来符合人体工学设计。...大家所知可折叠设备层出不穷,我们推出了 Jetpack WindowManager 库,帮助开发者对应用做出调整,以充分利用可折叠设备用户提供全新的体验。

3.5K10

Monoid_Haskell笔记9

(摘自Identity element) 单位元定义在集合里的二元运算上,与单位元结合做运算,其它元素不变(运算结果仍是该元素)。...正规(严谨)描述如下: 幺半群是一个带有二元运算*: M × M → M的集合M,符合下列公理: 结合律:对任何在M内的a、b、c ,(a*b)*c = a*(b*c) 幺元:存在一在M内的元素...,走到树根,运算结果就是Any True getAny取出折叠结果True P.S.注意,生成Any树与遍历折叠是在一次遍历中同时进行的,并不是遍历两遍(第一遍做映射,第二遍折叠),上面拆开看只是便于理解...,运算结果就是[树上所有元素] 直接输出折叠结果,就是[树上所有元素] 一句话完成包含性判断,一句话完成树上元素收集,相当惊艳的操作 P.S.要对树求和、求积、过滤元素呢?...G,连同一个运算·,结合任何两个元素a和b而形成另一个元素,记为a·b,要求该运算满足结合律和封闭性,集合里要有幺元,并且每个元素都有逆元 P.S.逆元是说,对于每个G中的a,存在G中的一个元素b使得

81530

sparksql源码系列 | 最全的logical plan优化规则整理(spark2.3)

,并将所有常量折叠一个。...这可以通过以下方式实现:1.在其计算结果始终true的情况下,省略Filter。2.当筛选器的计算结果总是false,替换成一个伪关系。3.消除子节点输出给定约束始终true的条件。...这个规则处理下面的情况:1.如果子节点的最大行数小于或等于1;2.如果排序顺序或排序顺序没有任何引用;3.如果排序运算符是本地排序且子节点已排序;4.如果有另一个排序运算符被 0...n 个 Project...,这意味着输入和输出的类型都是非原始类型;2.没有自定义集合类指定数据项的表示形式。MapObjects将给定表达式应用于集合项的每个元素,并将结果作为ArrayType或ObjectType返回。...TypedFilter将func应用于子元素的每个元素并按最终产生的布尔值过滤它们。这在逻辑上等于一个普通的Filter运算符,其条件表达式将输入行解码对象,并将给定函数应用于解码的对象。

2.5K10

可视化格式模型-浮动

上面B的宽度50px,和浮动元素A的包含块都是C,宽度200px。浮动元素在放置后,还有足够的空间放置B,所以,B 被紧挨着A 的margin 框被放置。...适用于哪些元素 可设置给任意元素,但只适用于生成非绝对定位框的元素。对于绝对定位的元素,浮动没有任何效果。这也体现了浮动和绝对定位之间的一种平衡。 值的含义 该属性指定框应当向左右移动或者不移动。...例,把left2当作当前元素,那么,前面有left1生成的浮动框,所以,它会贴着left1的右 margin 边排列。而到left3 的时候,剩余的空间已经不能够放置了,所以,折行放置。 4....当一个浮动框发生在两个margin折叠的中间,浮动元素的定位好像它有另一个的块级父框位于常规流中。 第一句好理解,说的是顶边不能超出包含块,跟左边右边不能超出一个道理。...后面的规则是说,当浮动框处于两个发生margin折叠的地方,会被当作被包含在一个的块框中,上面和下面的margin会穿过发生margin折叠,当它不存在。 <!

1.2K100

知识整理之CSS篇

CSS权重计算 内联样式,style=''。权值1000。 id选择器,#content,权值0100。...important(权重),没有特殊性值,但它的优先级是最高的,为了方便记忆,可以认为的特殊性值1,0,0,0,0。 CSS那些属性可以继承?...此时偏移属性参照的是离自身最近的定位祖先元素,如果没有定位的祖先元素,则一直回溯到body元素。 盒子的偏移位置不影响常规流中的任何元素,其margin不与其他任何margin折叠(触发BFC)。...注意 另外,要注意,自身的margin-botom和margin-top相邻也会发生重叠,只有当自身内容,垂直方向上border,padding,均为0,自身的margin-top与margin-bottom...慎用CSS express 慎用高性能属性:浮动、定位 尽量减少页面重排、重绘: 去除规则 属性值0,不加单位(优化) 属性值浮点数0.

1.6K20

《精通CSS》第3章 可见格式化模型

外边距的折叠有以下几种情况(很重要!)。 当两个元素垂直堆叠,上方元素的下边距会与下方元素的上边距发生折叠。...对于嵌套的父子元素(假设只有一个子元素),如果父元素没有内边距和边框,那么它们的上下边距均会发生折叠。...甚至同一个元素的外边距也会折叠,如果存在一个元素,只有外边距没有边框和内边距,此时自身的上下边距接触,发生折叠折叠后的外边距又接触其他元素的外边距,还会继续折叠。...之所以说“几乎”,是因为浮动元素会影响其后常规文档流中块级盒子的文本内容。文本内容会记住浮动元素的大小,并在排布避开,形成文字包围的效果,如下图。 ?...clear解决元素塌陷问题 当然,这样做会有一个无用的元素,所以我们可以通过::after伪元素来替代这一元素。这样会简化 HTML 标签。

1.3K20

折叠屏上应用设计规范,了解一下?

深入理解布局 深入理解布局指南 介绍了布局容器的相关概念,提供了一个整体框架,可帮助开发者思考如何在屏幕上排列导航栏、工具栏和内容等界面元素。...列表/详情 对列表/详情而言,AndroidX 中有个名为 SlidingPaneLayout 的专用控件,使用前需的两个子元素指定 layout_width,在运行期间,SlidingPaneLayout...在主页横幅布局中,我们强调某个特定元素,重新排布周围的其他支持元素。...当然我们有很多方法可以实现这一点,但 ConstraintLayout 的灵活性最大,因为提供了很多种方式来约束子元素的尺寸,以及相对于其他子元素的位置。...在如下媒体类示例应用,的首图限制在 16:9 的宽高比内,描述窗格占 60% 宽度,剩余空间留给其他元素

4.3K20

CSS进阶11-表格table

在其他文档语言(XML应用程序)中,可能没有预定义的表格元素。因此,CSS 2.2允许开发者通过“display”属性将文档语言元素“映射”到表格元素。...CSS模型不要求文档语言包含对应这些组件的每一个元素。对于没有预定义表元素的文档语言(XML应用程序),作者必须将文档语言元素映射到表元素,这是通过“display”属性完成的。...“visibility”属性设置“hidden”的单元格和单元格被视为没有可见内容。...当这个属性的值'show',在单元格周围/背后绘制边框和背景(像普通单元格一样)。 'hide'的值表示在单元格周围/后面没有绘制边框或背景(参见17.5.1中的点6 )。...底部边框宽度等于最大折叠底部边框的一半。 当确定表是否溢出某个祖先,会考虑溢出到margin中的任何border(参见'overflow')。 ?

6.5K20

那些年,我们被耍过的bug——haslayout

上图的例子中,三个 div 各包含一个 p 元素,三个 div 及其包含的 p 元素都有顶部和底部的外边距,但只有第三个 div 的边距没有与它的子元素 p 的外边距折叠。...这是因为第三个 div 使用 zoom: 1 触发了 hasLayout ,阻止了它与它的子元素的外边距折叠。...2.可以包含浮动的子元素,即计算高度包括其浮动子元素 效果如图: ?...上图的例子中,有两个 div ,它们各包含一个设置了浮动的 p 元素,但第一个 div 实际被浏览器判断没有高度和宽度,即高度 0 ,上下边框重叠在一起。...本例子中没有触发元素的 BFC ,这是因为在现代浏览器中,元素本身并没有背景图显示问题。

67010

【Flutter】自定义滚动开关

没有跟上实际状态。为了保持状态,它将调用onChanged属性。假设此属性的价值回报true,则此开关ON,OFF则为false。当此属性无效,开关小部件会失效。...该演示视频展示了如何在颤动中创建自定义滚动开关。显示了自定义滚动开关如何在flutter应用程序中使用lite_rolling_switch包工作。...显示了在用户按下按钮后进行的切换交互,该开关将滚动到具有动画效果的另一侧,并且在滚动该开关将更改图标和文本。...**colorOn:**此属性用于在开关打开显示颜色。 **colorOff:**此属性用于在开关Off显示颜色。...当我们运行应用程序时,我们应该获得屏幕的输出,屏幕下方的截图所示。

33.3K60

CSS margin合并问题

两个相邻的外边距都是负数折叠结果是两者绝对值的较大值。 两个外边距一正一负折叠结果是两者的相加的和。 2....高度0并且最小高度也0,不包含常规文档流的子元素,并且自身没有建立新的BFC的元素的margin-top和margin-bottom 2.1 条件解读 创建了新的BFC的元素(例如浮动元素或者'overflow...'值'visible'以外的元素)与它的子元素的外边距不会折叠 浮动元素不与任何元素的外边距产生折叠(包括其父元素和子元素) 绝对定位元素不与任何元素的外边距产生折叠 inline-block元素不与任何元素的外边距产生折叠...注意: 浮动元素和绝对定位元素不与其他盒子产生外边距折叠是因为元素会脱离当前的文档流,违反了上面所述的两个margin是邻接的条件同时,又因为浮动和绝对定位会使元素的内容创建新的BFC,因此该元素和子元素所处的...但是浮动元素脱离了当前的BFC并不影响后面的兄弟元素,后面的兄弟元素与浮动元素前面的元素依然在同一个BFC当中,所以,它们之间的margin还是会折叠的。

1.3K30

BuildAdmin02:前端架构布局和菜单栏折叠的实现

,这便是防止出现指针异常的可选链写法,原则就是:有就用,没有就不用。 假设一个对象obj,没有name属性。如果obj.name则会报指针错误,如果使用obj?.name则输出的是obj。...el-container里面就没有el-header元素了,所以就变成水平分布,这样header就在main的就布局在同一水平线上了,而非上下排列。...aside渲染 aside.vue中此时只有一个\元素,此时我们需要定义的css样式。 1. css 在style中定义css,指定sasscss预处理器。...菜单折叠功能 菜单的折叠功能如下图所演示: 在点击logo旁的折叠按钮,可以观察到4种变化: aside变窄,不再是260px 折叠按钮图标变化 logo折叠(消失) 菜单栏折叠,只剩图标 当点击折叠按钮...在pinia中定义了 menuWidth() 来计算宽度:当menuCollapsetrue,即菜单折叠,宽度是64;false不折叠,宽度menuWidth,即260。

64941

59道CSS面试题(附答案)

通配符选择器对特殊性没有任何贡献值。 当把选择器组合使用的时候,相应的层级权重也会递增,例如# id .class的权重为0.1.1.0。 2、CSS的引入方式有哪些?...浮动的元素可以向左或向右移动,直到的外边缘碰到包含元素(父元素)或另一个浮动元素的边框为止。要想使元素浮动,必须元素设置一个宽度( width)。...22、内联元素可以实现浮动吗? 在CSS中,任何元素都可以浮动。不论浮动元素本身是何种元素,都会生成个块级框。因此,对于内联元素,如果设置浮动,会产生和块级框相同的效果。...38、如果设置的font-sze10rem,那么当用户重置或拖曳浏览器窗口的文本会不会受到影响? 不会 39、谈谈你对BFC规范的理解。...(1)当两个相邻的外边距都是正数折叠的结果是它们两者中较大的值 (2)当两个相邻的外边距都是负数折叠的结果是两者中绝对值较大的值。 (3)当两个外边距一正一负折叠的结果是两者相加的和。

4.9K50
领券