flutter (RenderViewport不支持返回内部尺寸

1bqhqjot  于 2022-11-17  发布在  Flutter
关注(0)|答案(3)|浏览(343)

我面临此例外:
FlutterError(RenderViewport不支持返回固有维度。计算固有维度需要示例化视口的每个子级,这克服了视口懒惰的缺点。如果您只是尝试在主轴方向收缩视口,请考虑RenderShrinkWrappingViewport渲染对象(ShrinkWrappingViewport小部件),该对象无需实现固有维度API即可实现该效果。)
当我添加ProductsWidget时,发生异常。

产品小工具的代码为:

class ProductsWidget extends GetResponsiveView<HomeTabController> {
  @override
  Widget build(BuildContext context) {
    return ListView.builder(
      shrinkWrap: true,
      itemCount: 3,
      // padding: EdgeInsets.symmetric(vertical: 20),
      physics: NeverScrollableScrollPhysics(),
      itemBuilder: (context, index) => Column(
        children: [
          Row()])}}

调用代码为:

body: LayoutBuilder(
          builder: (BuildContext context, BoxConstraints constraints) {
        return SingleChildScrollView(
          child: ConstrainedBox(
            constraints: BoxConstraints(
              minHeight: constraints.maxHeight,
            ),
            child: IntrinsicHeight(
              child: Column(
                mainAxisSize: MainAxisSize.min,
                children: [
                  Expanded(
                      //  flex: 1,
                      child: HomeAppBar()),
                  // listView
                  // i made shrinkWrap=true
                  // neverScroll
                  Flexible(fit: FlexFit.tight, child: ProductsWidget()),
                ],
              ),
            ),
          ),
        );
      }),
2nbm6dog

2nbm6dog1#

尝试将ProductsWidget Package 在SizedBox中,并为其给予宽度(宽度:double.maxFinite)和可能的高度。
我有一个类似的问题,我发现下面的帖子很有帮助:flutter listview with radio not showing in alertDialog

n7taea2i

n7taea2i2#

这是因为ListView构建每个子级都很慢。您可以使用 Package 在SingleChildScrollView中的Column来代替ListView。

6xfqseft

6xfqseft3#

SingleChildScrollView替换为CustomScrollView,如下所示:

return Scaffold(
  appBar: AppBar(
    title: Text('Expanded Scrollable'),
  ),
  body: CustomScrollView(
    physics: AlwaysScrollableScrollPhysics(),
    slivers: [
      SliverFillRemaining(
        fillOverscroll: true,
        child: Column(
          children: <Widget>[
            Text('Hello ... '),
            Divider(
              height: 2,
            ),
            Expanded(
              child: Container(color: Colors.red,), // replace this Container with your listview
            )
          ],
        ),
      )
    ],
  ),
);

相关问题