Flutter Can';t在LayoutBuilder小部件中设置ListView(颤振)

Flutter Can';t在LayoutBuilder小部件中设置ListView(颤振),flutter,dart,Flutter,Dart,我需要这样的结构 我使用LayoutBuilder获取内容的高度(在应用程序栏和TabsBottomNavigation之间)。在这里,我构建了配置文件信息容器,并希望使用一些列表平铺构建ListView,但当我尝试在布局生成器中构建它时,控制台中出现了错误 如果我用LayoutBuilder创建ListView,它会工作 请帮我解决它。 我的代码如下: Widget build(BuildContext context) { return LayoutBuilder(

我需要这样的结构

我使用
LayoutBuilder
获取内容的高度(在应用程序栏和
TabsBottomNavigation
之间)。在这里,我构建了配置文件信息容器,并希望使用一些列表平铺构建ListView,但当我尝试在布局生成器中构建它时,控制台中出现了错误

如果我用
LayoutBuilder
创建
ListView
,它会工作

请帮我解决它。 我的代码如下:

Widget build(BuildContext context) {
    return LayoutBuilder(
      builder: (BuildContext context, BoxConstraints viewportConstraints) {
        return SingleChildScrollView(
          child: Container(
            child: Column(
              children: <Widget>[
                Container(
                  height: viewportConstraints.maxHeight * .44,
                  color: Theme.of(context).primaryColor,
                  padding: EdgeInsets.only(bottom: 2),
                  child: Align(
                    child: Column(
                      mainAxisAlignment: MainAxisAlignment.center,
                      children: <Widget>[
                        _buildProfileImage(context),
                        SizedBox(height: 17),
                        Text(userName)
                      ],
                    ),
                  ),
                ),
                Expanded(
                  child: ListView(
                    children: <Widget>[
                      ListTile(
                        leading: Icon(Icons.print),
                        title: Text('asdad'),
                      )
                    ],
                  ),
                )
              ],
            ),
          ),
        );
      },
    );
  }
小部件构建(构建上下文){
返回布局生成器(
生成器:(BuildContext上下文,BoxConstraints视口Constraints){
返回SingleChildScrollView(
子:容器(
子:列(
儿童:[
容器(
高度:viewportConstraints.maxHeight*.44,
颜色:主题。背景。原色,
填充:仅限边缘设置(底部:2),
子对象:对齐(
子:列(
mainAxisAlignment:mainAxisAlignment.center,
儿童:[
_buildProfileImage(上下文),
尺寸箱(高度:17),
文本(用户名)
],
),
),
),
扩大(
子:ListView(
儿童:[
列表砖(
前导:图标(Icons.print),
标题:文本(“asdad”),
)
],
),
)
],
),
),
);
},
);
}
小部件构建(构建上下文){
返回列(
儿童:[
扩大(
子:布局生成器(
生成器:(BuildContext上下文,BoxConstraints视口Constraints){
返回SingleChildScrollView(
子:容器(
子:列(
儿童:[
容器(
高度:viewportConstraints.maxHeight*.44,
颜色:主题。背景。原色,
填充:仅限边缘设置(底部:2),
子对象:对齐(
子:列(
mainAxisAlignment:mainAxisAlignment.center,
儿童:[
_buildProfileImage(上下文),
尺寸箱(高度:17),
文本(用户名)
],
),
),
),
扩大(
子:ListView(
儿童:[
列表砖(
前导:图标(Icons.print),
标题:文本(“asdad”),
)
],
),
)
],
),
),
);
},
),
),
]
);
}

使用下面的
构建
方法将适用于您的情况。(我已经检查过了,它正在工作,所以我希望它在您的情况下也能工作,并且符合您的要求。)

小部件构建(构建上下文){
返回布局生成器(
生成器:(BuildContext上下文,BoxConstraints视口Constraints){
返回容器(
子:列(
儿童:[
容器(
高度:viewportConstraints.maxHeight*.44,
颜色:主题。背景。原色,
填充:仅限边缘设置(底部:2),
子对象:对齐(
子:列(
mainAxisAlignment:mainAxisAlignment.center,
儿童:[
_buildProfileImage(上下文),
尺寸箱(高度:17),
文本(用户名),
],
),
),
),
尺寸箱(高度:16),
灵活的(
子:ListView(
儿童:[
卡片(
孩子:ListTile(
前导:图标(Icons.print),
标题:文本(“asdad”),
),
),
],
),
),
],
),
);
},
);
}
我认为在这种情况下,
SingleChildScrollView
是没有用的,所以我删除了它,但如果你这样填写,你可以使用它

您仍然需要根据自己的意愿进行一些UI改进,因为这是符合您需求的基本结构

Widget build(BuildContext context) {
    return LayoutBuilder(
      builder: (BuildContext context, BoxConstraints viewportConstraints) {
        return Container(
          child: Column(
            children: <Widget>[
              Container(
                height: viewportConstraints.maxHeight * .44,
                color: Theme.of(context).primaryColor,
                padding: EdgeInsets.only(bottom: 2),
                child: Align(
                  child: Column(
                    mainAxisAlignment: MainAxisAlignment.center,
                    children: <Widget>[
                      _buildProfileImage(context),
                      SizedBox(height: 17),
                      Text(userName),
                    ],
                  ),
                ),
              ),
              SizedBox(height: 16),
              Flexible(
                child: ListView(
                  children: <Widget>[
                    Card(
                      child: ListTile(
                        leading: Icon(Icons.print),
                        title: Text('asdad'),
                      ),
                    ),
                  ],
                ),
              ),
            ],
          ),
        );
      },
    );
  }
希望这能对您有所帮助。

小部件构建(BuildContext){
 Widget build(BuildContext context) {
    return LayoutBuilder(
      builder: (BuildContext context, BoxConstraints viewportConstraints) {
        return SingleChildScrollView(
          child: ListView(
            shrinkWrap: true,
            children: <Widget>[
             new Container(
                height: MediaQuery.of(context).size.height/3,
                color: Theme.of(context).primaryColor,
                padding: EdgeInsets.only(bottom: 2),
                child: Align(
                  child: Column(
                    mainAxisAlignment: MainAxisAlignment.center,
                    children: <Widget>[
                      _buildProfileImage(context),
                      SizedBox(height: 17),
                      Text(userName)
                    ],
                  ),
                ),
              ),
             new ListView(
                shrinkWrap: true,
                children: <Widget>[
                  ListTile(
                    leading: Icon(Icons.print),
                    title: Text('asdad'),
                  )
                ],
              )
            ],
          ),
        );
      },
    );
  }
返回布局生成器( 生成器:(BuildContext上下文,BoxConstraints视口Constraints){ 返回SingleChildScrollView( 子:ListView( 收缩膜:对, 儿童:[ 新容器( 高度:MediaQuery.of(context).size.height/3, 颜色:主题。背景。原色, 填充:仅限边缘设置(底部:2), 子对象:对齐( 子:列( mainAxisAlignment:mainAxisAlignment.center, 儿童:[ _buildProfileImage(上下文), 尺寸箱(高度:17), 文本(用户名) ], ), ), ), 新列表视图( 收缩膜:对, 儿童:[ 列表砖( 前导:图标(Icons.print), 标题:文本(“asdad”), ) ], ) ], ), ); }, ); }
如果您阅读错误日志,它会显示
 Widget build(BuildContext context) {
    return LayoutBuilder(
      builder: (BuildContext context, BoxConstraints viewportConstraints) {
        return SingleChildScrollView(
          child: ListView(
            shrinkWrap: true,
            children: <Widget>[
             new Container(
                height: MediaQuery.of(context).size.height/3,
                color: Theme.of(context).primaryColor,
                padding: EdgeInsets.only(bottom: 2),
                child: Align(
                  child: Column(
                    mainAxisAlignment: MainAxisAlignment.center,
                    children: <Widget>[
                      _buildProfileImage(context),
                      SizedBox(height: 17),
                      Text(userName)
                    ],
                  ),
                ),
              ),
             new ListView(
                shrinkWrap: true,
                children: <Widget>[
                  ListTile(
                    leading: Icon(Icons.print),
                    title: Text('asdad'),
                  )
                ],
              )
            ],
          ),
        );
      },
    );
  }
Widget build(BuildContext context) {
    return LayoutBuilder(
      builder: (BuildContext context, BoxConstraints viewportConstraints) {
        return ListView(
          shrinkWrap: true, // That's it
          children: <Widget>[
            Container(
              color: Theme.of(context).primaryColor,
              height: viewportConstraints.maxHeight * .44,
              padding: EdgeInsets.only(bottom: 2),
              child: Column(
                mainAxisAlignment: MainAxisAlignment.center,
                children: <Widget>[
                  _buildProfileImage(context),
                  SizedBox(height: 17),
                  Text(userName)
                ],
              ),
            ),
            ListTile(
              leading: Icon(Icons.print),
              title: Text('asdad'),
            ),
            ListTile(
              leading: Icon(Icons.print),
              title: Text('asdad'),
            ),
            ListTile(
              leading: Icon(Icons.print),
              title: Text('asdad'),
            )
          ],
        );
      },
    );
  }
MediaQuery.of(context).padding.top //APP bar height
MediaQuery.of(context).padding.bottom //Bottom bar height
MediaQuery.of(context).size.height //Screen height