当前位置: 首页 > 面试题库 >

如何为扑中的倒塌元素制作动画

谭坚诚
2023-03-14
问题内容

当用户
使用动画点击不同的小部件(同级或父级)时,如何展开和折叠小部件?

new Column(
    children: <Widget>[
        new header.IngridientHeader(
            new Icon(
                Icons.fiber_manual_record,
                color: AppColors.primaryColor
            ),
            'Voice Track 1'
        ),
        new Grid()
    ],
)

我希望用户能够点击header.IngridientHeader,然后切换Grid小部件(如果可见和其他方式隐藏)

编辑:

即时通讯试图做的事情在引导中称为崩溃。getbootstrap.com /docs/4.0/components/collapse

编辑2:header.IngridientHeader应该始终在Grid()可滚动(水平)小部件的所有位置上。scrollable ( horizontal ) widget.


问题答案:

如果你想折叠小部件零高度,或者有一个孩子零宽度倒塌溢出的时候,我会建议
SizeTransition 或ScaleTransition 。

这是一个ScaleTransition小部件的示例,该小部件用于折叠
四个黑色按钮和状态文本的容器。我的ExpandedSection
小部件与一列一起使用,以获取以下结构。ScaleTransition小部件的示例

一个将动画与SizeTransition小部件一起使用的小部件的示例:

class ExpandedSection extends StatefulWidget {

  final Widget child;
  final bool expand;
  ExpandedSection({this.expand = false, this.child});

  @override
  _ExpandedSectionState createState() => _ExpandedSectionState();
}

class _ExpandedSectionState extends State<ExpandedSection> with SingleTickerProviderStateMixin {
  AnimationController expandController;
  Animation<double> animation;

  @override
  void initState() {
    super.initState();
    prepareAnimations();
    _runExpandCheck();
  }

  ///Setting up the animation
  void prepareAnimations() {
    expandController = AnimationController(
      vsync: this,
      duration: Duration(milliseconds: 500)
    );
    animation = CurvedAnimation(
      parent: expandController,
      curve: Curves.fastOutSlowIn,
    );
  }

  void _runExpandCheck() {
    if(widget.expand) {
      expandController.forward();
    }
    else {
      expandController.reverse();
    }
  }

  @override
  void didUpdateWidget(ExpandedSection oldWidget) {
    super.didUpdateWidget(oldWidget);
    _runExpandCheck();
  }

  @override
  void dispose() {
    expandController.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return SizeTransition(
      axisAlignment: 1.0,
      sizeFactor: animation,
      child: widget.child
    );
  }
}

AnimatedContainer 也可以工作,但是如果不能将孩子的大小调整为零宽度或零高度,Flutter可能会抱怨溢出。



 类似资料:
  • 构建(紧随其后) <代码>。/配置 不太熟悉bazel,但根据这个条件,针对jpeg的参数需要被传递,具体是什么参数,为什么指南没有提到这一点? 构建版本r1。6在Python2.7下,3.6都会以相同的错误失败。 配置过程:拒绝除jemalloc之外的所有支持。 我正在尝试构建源代码,因为在卸载tenorflow并重新安装后,它不起作用!虽然它在以前的版本中工作,但在ubuntu17.xx上,当

  • 本文向大家介绍为什么float会导致父元素塌陷?相关面试题,主要包含被问及为什么float会导致父元素塌陷?时的应答技巧和注意事项,需要的朋友参考一下 “当元素设置浮动后,会自动脱离文档流”, 翻译成白话就是说,元素浮动后,就不在整个文档流的管辖范围,那么它之前存在在父元素内的高度就随着浮动不复存在了,而此时父元素会默认自己里面没有任何内容 (前提是未给父元素设置固定高度,如果父元素本身有固定高度

  • 我有两个XML EditTexts。在一个EditText中,用户可以将一个数字作为分钟,在另一个EditText中,可以将一个数字作为秒。单击finish按钮后,seconds EditText应开始倒计时,并每秒更新其文本。 此外,我如何保持更新,直到它达到零分钟零秒?

  • 问题内容: 任何人都知道为什么overflow:hidden强制具有浮动元素的元素包装元素吗? 我真的很想了解内部工作原理,而不是仅仅使用它并相信“它确实有效”。 当包含元素的方向与浮动的子元素相同的方向时,我可以理解它的工作原理,但是overflow:hidden意味着裁剪溢出的内容(与position:absolute / relative一起使用时)。 任何信息表示赞赏。 问题答案: 浮点数

  • 问题内容: 我有一个滚动条,当我单击它时我想要一个链接,它将迫使其滚动以查看其中的元素。我这样写它的JavasSript: 但这会在滚动页面的同时滚动所有页面。如何解决? 我想这样说 问题答案: 您需要获取要滚动到视图中的元素相对于其父元素(滚动div容器)的顶部偏移量: 现在,将变量topPos设置为滚动div的顶部与希望显示的元素之间的距离(以像素为单位)。 现在,我们告诉div使用以下命令滚