动态添加项目到小部件不会更新小部件的高度

har*_*ger 5 dart flutter flutter-layout

当我在初始加载后动态地将小部件添加到slider_up_panel小部件时,面板的高度不会增加,这意味着面板的底部被切断并且我收到错误A RenderFlex overflowed by 27 pixels on the bottom.

在这种情况下,我该怎么做才能确保面板更新其高度?

重现

通过逻辑动态地将小部件添加到面板condition ? widget : widget。例如:

@override
  Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(
          title: Text("SlidingUpPanelExample"),
        ),
        body: Stack(
          children: <Widget>[
            Center(child: Text("This is the Widget behind the sliding panel"),),

            SlidingUpPanel(
              panel: Container(
                child: Column(
                  crossAxisAlignment: CrossAxisAlignment.start,
                  children: [
                    myFirstVariable ? Text("This is a sliding Widget") : Container(),
                    mySecondVariable ? Text("This is another sliding Widget") : Container(),
                  ],
                ),
              )
            )
          ],
        )
    );
  }
Run Code Online (Sandbox Code Playgroud)

非常感谢!

Abd*_*rim 1

SlidingUpPanel部件不会根据其子部件调整其高度。

解决您的问题的方法是将 SingleChildScrollView 添加到面板内容中,并使用 panelBuilder 而不是 panel 属性。

panelBuilder 通过为您提供一个可以提供给 SingleChildScrollView 的控制器来承担管理滚动和滑动冲突的负担,您的代码将更改为如下所示:

    @override
  Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(
          title: Text("SlidingUpPanelExample"),
        ),
        body: Stack(
          children: <Widget>[
            Center(child: Text("This is the Widget behind the sliding panel"),),
            SlidingUpPanel(
              panelBuilder:(sc) => SingleChildScrollView(
                controller: sc,
                child: Column(
                  crossAxisAlignment: CrossAxisAlignment.start,
                  children: [
                    myFirstVariable ? Text("This is a sliding Widget") : Container(),
                    mySecondVariable ? Text("This is another sliding Widget") : Container(),
                  ],
                ),
              )
            )
          ],
        )
    );
  }
Run Code Online (Sandbox Code Playgroud)

这样,您不会遇到任何溢出问题,并且当面板的内容溢出时,SingleChildScrollView 将变得可滚动。