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

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

我希望用户能够点击Header.IngridientHeader和网格小部件应该切换(如果可见则隐藏,反之亦然)

编辑:

我试图做一些在 bootstrap 中被称为崩溃的事情.getbootstrap.com/docs/4.0/components/collapse

编辑2:

推荐答案

如果您希望将具有子部件的小部件折叠到零高度或零宽度,在折叠时会溢出,我建议使用SizeTransitionScaleTransition.

下面是ScaleTransition小部件用于折叠四个黑色按钮和状态文本容器的示例.我的ExpandedSection小部件与列一起使用,以获得以下 struct . An example of the ScaleTransition widget

通过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也可以,但如果子元素不能调整到零宽度或零高度,Flatter可能会抱怨溢出.

Flutter相关问答推荐

Android Emulator冻结,但在调整窗口大小时解冻

如何让一个名为ONTAP的回调函数、另一个名为onTapDown的回调函数和另一个名为onTapUp的回调函数不重叠?

Android Studio中的Ffltter&;Couchbase:进程C:/Program Files/Git/bin/bash以非零退出值35结束

在setState之后,Ffltter ListView.Builder未更新

在框中保存对象列表时,类型推断无法正常工作

摆动更改标记可轻敲文本按钮样式

如何让两个展开的Widget根据其子窗口的屏幕大小

Android工作室Flutter 热重新加载更新后不工作

有没有办法在 google_map 上移动标记(向左或向右移动一些像素)?

如何使Flutter 屏幕无法关闭?

更改下拉按钮的背景 colored颜色 - flutter

如何防止键盘将内容向上推?

如何与 PostgreSQL 和外部网站交互 flutter apk?

MediaQuery 在不同手机上不一致

Flutter - 根据从第一个 DropdownButtonForm 中 Select 的内容在第二个 DropdownButton 上显示选项

如何根据应用程序主题(深色和浅色)更改谷歌 map 的主题?

Flutter中如何连续获取TextField的文本是否为空?

Firebase Cloud Messaging (Flutter):订阅主题时出现错误消息

type '_InternalLinkedHashMap' 不是使用 http 包的'String' 类型的子类型

在 Flutter 中,如何使用文本字段和方形图像进行行布局