【发布时间】:2023-03-14 12:55:01
【问题描述】:
我想要一个宽度适合父级宽度的表格。因此,我使用 double.infinity 作为子宽度...但这会导致此错误:
Assertion failed: file:///C:/flutter/packages/flutter/lib/src/rendering/shifted_box.dart:348:12
child!.hasSize
is not true
小部件:
class ObjectDataTable extends StatelessWidget {
final List<String> columnNames;
final List<String> rowData;
const ObjectDataTable({Key? key,required this.rowData, required this.columnNames})
: super(key: key);
@override
Widget build(BuildContext context) {
return
Container(
width: double.infinity,
child: Theme(
data:Theme.of(context).copyWith(
dividerColor: Colors.transparent),
child: DataTable(
columnSpacing: 0,
dividerThickness: 0,
columns: List<DataColumn>.generate(
columnNames.length,
(int index,) => DataColumn(
label: CustomCell(
width: double.infinity,
columnCnt:columnNames.length ,
start: (index==0),
end: (index==columnNames.length-1),
child: Text(columnNames[index], textAlign: TextAlign.center,),
color: AppColors().objectListHeader,),
numeric: false,
),
),
rows: <DataRow>[
DataRow(
cells: List<DataCell>.generate(
rowData.length,
(int index,) => DataCell(CustomCell(
width:double.infinity,
columnCnt:rowData.length ,
start: (index==0),
end: (index==rowData.length-1),
child: Text(rowData[index], textAlign: TextAlign.center,),
),
),
),
),
]
),
),
);
}
}
class CustomCell extends StatelessWidget {
final double width;
final bool start;
final bool end;
final Widget? child;
final int columnCnt;
final Color? color;
const CustomCell({Key? key,
required this.width,
required this.columnCnt,
this.color,
this.child,
this.start=false,
this.end=false}) : super(key: key);
BorderRadius getBorderRadius(){
BorderRadius borderRadius=BorderRadius.zero;
if (!(start&&end)) {
if (start) {
borderRadius = BorderRadius.only(
bottomLeft: Radius.circular(10),
topLeft: Radius.circular(10));
}
else if (end) {
borderRadius = BorderRadius.only(
bottomRight: Radius.circular(10),
topRight: Radius.circular(10));
}
}
return borderRadius;
}
Color getColor(){
Color myColor=AppColors().objectRow;
if (color!=null){
myColor=color!;
}
return myColor;
}
@override
Widget build(BuildContext context) {
return
Container(
child: child,
width: width/ columnCnt,
decoration: BoxDecoration(
color: getColor(),
borderRadius:getBorderRadius(),
),
);
}
}
呼叫:
child:ObjectDataTable(columnNames: loadColumnNames(),rowData: ["1","2","3","4","5"],),
我不知道为什么,因为错误只出现在“标题”部分...该行正常工作...
我想要的输出:
我的输出(因为错误):
【问题讨论】: