如何修复错误数据表'columns.isNotEmpty': is not true

问题描述 投票:0回答:1

我正在使用 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);
                  },)])]),],),),);
            })));
  }
}
flutter
1个回答
0
投票

删除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,
          )),
        ],
      ),
    );
© www.soinside.com 2019 - 2024. All rights reserved.