Streambuilder和AnimatedContainer

时间:2019-11-15 14:35:32

标签: flutter

项目

嗨,我正试图在颤抖中使用这种布局

enter image description here

我希望将顶部容器设置为初始大小,然后让其尺寸由流控制

代码

  Column(
    children: <Widget>[
      StreamBuilder(
        stream: streamController.stream ,
        initialData: initialData ,
        builder: (BuildContext context, AsyncSnapshot snapshot){
          return AnimatedContainer(
            duration: Duration(milliseconds: 300),
            height: 200,
          );
        },
      ),
      Expanded(
        child: AnimatedContainer(
          duration: Duration(milliseconds: 300),
          color: Colors.green,
        ),
      )
    ],
  ),

问题在于这永远不会起作用,因为我必须为列的子代提供一个高度,在这种情况下,流生成器没有一个。 正如其他人所建议的那样,我已经尝试过将流构建器包装在灵活的小部件中并使用Flexfit.loose,但这对我来说不是解决方案,并且导致了以下结果:

enter image description here

有解决方案吗? 谢谢

1 个答案:

答案 0 :(得分:1)

您的代码可以按需要工作,不是吗?

demo

final streamController = StreamController<double>.broadcast();

@override
Widget build(BuildContext context) {
  return Scaffold(
    body: SafeArea(
      child: Row(
        children: <Widget>[
          Expanded(
            child: Column(
              children: <Widget>[
                StreamBuilder(
                  stream: streamController.stream,
                  initialData: 200.0,
                  builder: (BuildContext context, AsyncSnapshot snapshot) {
                    return AnimatedContainer(
                      duration: Duration(milliseconds: 300),
                      height: snapshot.data,
                      color: Colors.blue
                    );
                  },
                ),
                Expanded(
                  child: AnimatedContainer(
                    duration: Duration(milliseconds: 300),
                    color: Colors.green,
                  ),
                )
              ],
            ),
          )
        ],
      ),
    ),
    floatingActionButton: FloatingActionButton(
      onPressed: () {
        streamController.add(Random().nextDouble() * 200);
      },
    ),
  );
}