Flutter:错误使用 ParentDataWidget

Flutter: Incorrect use of ParentDataWidget

我正在尝试创建一个主页,在我放置 ListView.builder 后,它可以滚动显示 3 或 4 个标题和一个水平的产品列表,我收到此错误:不正确使用 ParentDataWidget。

有人可以给我最好的解决方案吗?

我已经为 ListView.builder 尝试了扩展和灵活,但没有任何效果。

如果我删除了 Expanded,错误将是:水平视口被赋予无限高度。

我的代码片段:

 Widget build(BuildContext context) {
return Scaffold(
  appBar: AppBar(
    leading: IconButton(
      icon: Icon(
        Icons.menu,
        color: Colors.black,
        size: 30,
      ),
    ),
    title: Text("Home"),
    actions: [
      IconButton(
        icon: Icon(
          Icons.search,
          color: Colors.black,
          size: 30,
        ),
        onPressed: () {},
      ),
    ],
  ),
  body: (_isLoading)
      ? ListView(
          children: [
            SizedBox(
              height: 10,
            ),
            TitleSlider(title: 'Category'),
            Expanded(
              child: ListView.builder(
                  scrollDirection: Axis.horizontal,
                  padding: EdgeInsets.all(0),
                  itemCount: thisTwoCategories.length,
                  itemBuilder: (context, int index) {
                    return _buildCategoryThumbnail(
                        thisTwoCategories[index], index);
                  }),
            )
          ],
        )
      
      : Center(
          child: CircularProgressIndicator(),
        ),
);

}

  Widget _buildCategoryThumbnail(Collection category, int index) {
return InkWell(
  onTap: () {
    _navigateToCollectionDetailScreen(
        thisTwoCategories[index].id, thisTwoCategories[index].title);
  },
  child: Container(
    alignment: Alignment.topCenter,
    width: MediaQuery.of(context).size.width / 2.1,
    height: displayHeight(context) * .10,
    decoration: category.image.originalSource != null
        ? BoxDecoration(
            borderRadius: BorderRadius.all(Radius.circular(15)),
            image: DecorationImage(
                fit: BoxFit.cover,
                image: NetworkImage(
                  category.image.originalSource,
                )))
        : BoxDecoration(),
    child: Container(
      width: MediaQuery.of(context).size.width,
      alignment: Alignment.bottomCenter,
      child: Text(
        category.title,
        overflow: TextOverflow.ellipsis,
        style: TextStyle(
            color: Colors.black, fontSize: 20, fontWeight: FontWeight.bold),
      ),
    ),
  ),
);

}

我解决了这个问题谢谢大家!

SingleChildScrollView(
          child: Container(
              child: Column(
            children: [
              SizedBox(
                height: 10,
              ),
              TitleSlider(title: 'Category'),
              Container(
                height: 200,
                child: ListView.builder(
                    scrollDirection: Axis.horizontal,
                    padding: EdgeInsets.all(0),
                    itemCount: thisTwoCategories.length,
                    itemBuilder: (context, int index) {
                      return _buildCategoryThumbnail(
                          thisTwoCategories[index], index);
                    }),
              ),
              SizedBox(
                height: 10,
              ),
              TitleSlider(title: 'Category'),
              Container(
                height: 200,
                child: ListView.builder(
                    scrollDirection: Axis.horizontal,
                    padding: EdgeInsets.all(0),
                    itemCount: thisTwoCategories.length,
                    itemBuilder: (context, int index) {
                      return _buildCategoryThumbnail(
                          thisTwoCategories[index], index);
                    }),
              ),
              SizedBox(
                height: 10,
              ),
              TitleSlider(title: 'Category'),
              Container(
                height: 200,
                child: ListView.builder(
                    scrollDirection: Axis.horizontal,
                    padding: EdgeInsets.all(0),
                    itemCount: thisTwoCategories.length,
                    itemBuilder: (context, int index) {
                      return _buildCategoryThumbnail(
                          thisTwoCategories[index], index);
                    }),
              ),

您不能将 Expanded 用作 ListView 的子项。如果您使用类似下面的代码,它将起作用。使用ListView时需要给高度or/and宽度

Container(
width: something,
child: aWidget,
)

试试下面的代码

return Scaffold(
  appBar: AppBar(
    leading: IconButton(
      icon: Icon(
        Icons.menu,
        color: Colors.black,
        size: 30,
      ),
    ),
    title: Text("Home"),
    actions: [
      IconButton(
        icon: Icon(
          Icons.search,
          color: Colors.black,
          size: 30,
        ),
        onPressed: () {},
      ),
    ],
  ),
  body: (_isLoading)
      ? Container(child:Column(
          children: [
            SizedBox(
              height: 10,
            ),
            TitleSlider(title: 'Category'),
            Expanded(
              child: ListView.builder(
                  scrollDirection: Axis.horizontal,
                  padding: EdgeInsets.all(0),
                  itemCount: thisTwoCategories.length,
                  itemBuilder: (context, int index) {
                    return _buildCategoryThumbnail(
                        thisTwoCategories[index], index);
                  }),
            )
          ],
        ))
      
      : Center(
          child: CircularProgressIndicator(),
        ),
);

ListView 必须是 Expanded 的子项,Expanded 必须是 Column 的子项。

要解决此问题,您必须删除 Expanded 小部件或 Flex 小部件。

ListView 不应在 ExpandedFlexible 中使用。只允许 row, column or flex

固定width/height或ConstrainedBoxContainer都可以使用

例如:

ConstrainedBox(
  constraints: BoxConstraints(minHeight: 50, maxHeight: 500),
  child: ListView.builder(...),
)