You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter使用SingleChildScrollView让Column与ListView.builder可滚动及报错处理

问题原因
  • RenderFlex children have non-zero flex but incoming height constraints are unbounded 报错的核心逻辑是:SingleChildScrollView本身不会给子组件施加高度约束,内部的Column高度完全由子组件总高度决定,而Expanded要求父组件必须有明确的高度边界才能分配剩余空间,二者逻辑冲突。
  • 同时你嵌套了两个垂直滚动组件(SingleChildScrollView + ListView.builder),默认状态下二者会争抢滚动事件,也无法实现整体滚动的需求。
修复方案

只需要修改ListView.builder的外层和配置即可,具体改动点:

  1. 删除包裹ListView.builder的Expanded组件
  2. 给ListView.builder添加两个配置参数:
    • shrinkWrap: true:让ListView只占用自身子项总高度,而非尽可能占满父组件高度
    • physics: const NeverScrollableScrollPhysics():禁用ListView自身的滚动能力,所有滚动事件都交给外层的SingleChildScrollView处理
修改后的完整代码
import 'package:flutter/material.dart';
import 'package:ionicons/ionicons.dart';
import 'package:provider/provider.dart';
import '../widgets/product_item.dart';
import '../providers/products.dart';

class ProductsOverviewScreen extends StatelessWidget {
  const ProductsOverviewScreen({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    final productsData = Provider.of<Products>(context);
    final products = productsData.items;
    return Scaffold(
      appBar: AppBar(
        leading: IconButton(
          onPressed: () {},
          icon: const Icon(
            Ionicons.notifications_outline,
          ),
        ),
        title: SizedBox(
          width: MediaQuery.of(context).size.width * 0.3,
          height: MediaQuery.of(context).size.height * 0.1,
          child: Image.asset(
            'assets/logo.png',
            fit: BoxFit.contain,
          ),
        ),
        actions: [
          IconButton(
            onPressed: () {},
            icon: const Icon(
              Ionicons.cart_outline,
            ),
          ),
        ],
      ),
      body: SingleChildScrollView(
        child: Column(
          mainAxisSize: MainAxisSize.min,
          children: [
            Container(
              height: 140,
              width: MediaQuery.of(context).size.width * 0.9,
              decoration: BoxDecoration(
                borderRadius: BorderRadius.circular(26.0),
                color: Colors.grey[300],
              ),
            ),
            Row(
              children: const [
                Padding(
                  padding: EdgeInsets.only(
                    left: 15.0,
                    top: 20.0,
                  ),
                  child: Text(
                    'Place Order',
                    style: TextStyle(
                      fontWeight: FontWeight.bold,
                      fontSize: 18.0,
                    ),
                  ),
                ),
              ],
            ),
            ListView.builder(
              shrinkWrap: true,
              physics: const NeverScrollableScrollPhysics(),
              scrollDirection: Axis.vertical,
              itemCount: products.length,
              itemBuilder: (ctx, i) => ProductItem(
                products[i].id,
                products[i].name,
                products[i].size,
                products[i].price,
                products[i].image,
              ),
            )
          ],
        ),
      ),
    );
  }
}

内容的提问来源于stack exchange,提问作者supremo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 11:27:03