Flutter 如何根据内容在颤振中自动调整卡片视图的大小

Flutter 如何根据内容在颤振中自动调整卡片视图的大小,flutter,dart,flutter-layout,cardview,flutter-widget,Flutter,Dart,Flutter Layout,Cardview,Flutter Widget,我在Flitter中遇到了一个问题,我在一个卡片小部件中有一个listview。我正在从SQLite数据库读取数据以填充我的listview。我不知道listview需要多长时间。我的问题是,目前我正在为cardview设置一个固定的高度,因为我的listview可以是长的也可以是短的,所以我得到了一个溢出像素错误 这是我的密码: import 'package:flutter/material.dart'; import 'package:finsec/widget/single_line_l

我在Flitter中遇到了一个问题,我在一个卡片小部件中有一个listview。我正在从SQLite数据库读取数据以填充我的listview。我不知道listview需要多长时间。我的问题是,目前我正在为cardview设置一个固定的高度,因为我的listview可以是长的也可以是短的,所以我得到了一个溢出像素错误

这是我的密码:

import 'package:flutter/material.dart';
import 'package:finsec/widget/single_line_list_view.dart';
import 'package:finsec/widget/header.dart';

import 'package:finsec/data/cardview_list_item.dart';

class cardView extends StatelessWidget {
  cardView({
    this.header,
    this.elevation,
    this.padding,
    this.query,
    this.iconColor
  });

  String header, query;
  double elevation, padding;
  Color iconColor;

  final shape = const RoundedRectangleBorder(
      borderRadius: BorderRadius.only(
        topLeft: Radius.circular(8.0),
        topRight: Radius.circular(8.0),
        bottomLeft: Radius.circular(8.0),
        bottomRight: Radius.circular(8.0),
      )
  );

  @override
  Widget build(BuildContext context) {
    return Padding(
      padding: EdgeInsets.fromLTRB(0.0, padding, 0.0, 0.0),  //vertical padding between cardivew and $s0.00
      child: new Card(
        elevation: elevation,
        shape: shape,
        child: new Container(
          width: MediaQuery
              .of(context)
              .size
              .width,
          height: 165.00,
          child: new Column(
            children:[
              Header(text: header,
                textSize: 24.0,
                backgroundColor: Color(0xffC4C4C4),
                textColor: Colors.black,
                height: 50,
                padding: 20.0,
                headerRadius: 8.0
              ),
            CardviewListItemData(query)  //listview goes here

            ],
          ),
        ),
      ),
    );
  }
}
如果我的listview返回2项,则cardview看起来正常,但在3项或更多项之后,我会出现溢出像素错误。原因是我正在手动将容器高度设置为165.00。
见下图


如何修复代码,使cardview根据listview中的项数自动调整大小?例如,如果我的listview返回5项,则cardview应显示所有5项。我无法手动设置高度,因为我不知道列表上的项目数。是否有任何方法可以动态调整cardview的大小,以显示listview返回的任意数量的项目?

您可以尝试在
小部件中找到您的卡,该小部件位于
IntrinsicHeight
小部件的crossAxisAlignment:crossAxisAlignment.stretch中

这样,行(您的卡)的子级将垂直展开,但行占用的垂直空间最少

Container(
  child: IntrinsicHeight(
    child: Row(
      crossAxisAlignment: CrossAxisAlignment.stretch,
      children: <Widget>[
        YourCard(
          width: 20.0,
        ),
      ],
    ),
  )
)
容器(
孩子:内在的(
孩子:排(
crossAxisAlignment:crossAxisAlignment.stretch,
儿童:[
你的名片(
宽度:20.0,
),
],
),
)
)

列表视图似乎在列中,请尝试将您的CardviewListItemData包装在一个灵活的小部件中。

谢谢Anirudh,但我尝试了您的解决方案,但没有成功。我得到以下错误。╡ 渲染库I/flatter(6170)捕获异常:在performLayout()期间引发了以下断言:I/flatter(6170):RenderShrinkWrappingViewport不支持返回内部维度。I/flatter计算内部维度需要实例化视口的每个子对象,I/flatter(6170):克服了视口懒惰的问题。I/flatter(6170):如果您只是尝试在主轴方向收缩包裹视口,则应该能够在容器没有固定大小时发生这种情况。你能试着给iti增加一些高度和宽度吗。您能否在carview中编写listview的示例/代码,以说明如何解决问题并与我共享代码?这是否回答了您的问题?