我正在使用 flutter 数据表。
我正在使用
List<DataColumn> and List<DataRow>
。
单击按钮后,我需要查看填充的表格。
我在运行时收到错误:
'columns.isNotEmpty' is not true
我找不到错误的根源。
请告知如何修复该错误。
谢谢你,
这是我的代码:
class MyHomePageState extends State<MyHomePage> {
List<DataColumn> myDataColumnList = [];
List<DataRow> myDataRowList = [];
int i = 0;
@override
void initState() {
super.initState();
}
addToList(){
setState(() {
myDataColumnList.add(DataColumn(label: Text('Column Label: '+i.toString())));
myDataRowList.add(DataRow(cells: <DataCell>[DataCell(placeholder: true,Text('x1: '+i.toString())),DataCell(placeholder: true,Text('x2: '+i.toString()))]));
i = i + 1;
});
}
@override
Widget build(BuildContext context) {
return MaterialApp(home: Scaffold(resizeToAvoidBottomInset: true,
body: LayoutBuilder(
builder: (BuildContext ctx, BoxConstraints constraints) {
return Container(child: SingleChildScrollView(child: Column(mainAxisAlignment: MainAxisAlignment.spaceEvenly,mainAxisSize: MainAxisSize.min,
children: <Widget>[
TextButton(onPressed: addToList, child: const Text('addToList')),
Table(children: [TableRow(children: <Widget>[ListView.builder(shrinkWrap: true,itemBuilder: (BuildContext context, int index) {
return DataTable(columns: myDataColumnList, rows: myDataRowList);
},)])]),],),),);
})));
}
}
删除setState方法中的更新
myDataColumnList
,
addToList() {
setState(() {
// myDataColumnList
// .add(DataColumn(label: Text('Column Label: ' + i.toString())));
myDataRowList.add(DataRow(cells: <DataCell>[
DataCell(placeholder: true, Text('x1: ' + i.toString())),
DataCell(placeholder: true, Text('x2: ' + i.toString()))
]));
i = i + 1;
});
}
相反,您可以在 initstate
中初始化您的
myDataColumnList
尝试类似:
return Scaffold(
resizeToAvoidBottomInset: true,
body: Column(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
mainAxisSize: MainAxisSize.min,
children: <Widget>[
TextButton(onPressed: addToList, child: const Text('addToList')),
Expanded(
child: DataTable(
columns: [
///Create your column list in initstate and use it here
DataColumn(label: Text('Column Label: 1')),
DataColumn(label: Text('Column Label: 2')),
],
rows: myDataRowList,
)),
],
),
);