【Flutter】入门17-DataTable

数据模型

class MyModel {
  MyModel(this.id, this.name, {this.isSelected = false});
  int id;
  String name;
  bool isSelected;
}

 

DataTable

class MyHome extends StatefulWidget {
  @override
  _MyHomeState createState() => _MyHomeState();
}

class _MyHomeState extends State<MyHome> with SingleTickerProviderStateMixin {
  AnimationController _controller;

  @override
  void initState() {
    super.initState();
    _controller = AnimationController(vsync: this);
    _getDatas();
  }

  @override
  void dispose() {
    super.dispose();
    _controller.dispose();
  }
  //列表数据
  List<MyModel> _datas = [];
  //创建数据
  _getDatas() {
    debugPrint(_datas.length.toString());
    for (var i = 0; i < 50; i++) {
      _datas.add(MyModel(i, 'Gecer_$i'));
    }
  }
  //创建行
  List<DataRow> _getRows() {
    List<DataRow> result = [];
    for (var item in _datas) {
      result.add(DataRow(
          //选中
          selected: item.isSelected,
          onSelectChanged: (value) {
            debugPrint(value.toString());
            setState(() {
              if (item.isSelected != value) {
                item.isSelected = value;
              }
            });
          },
          cells: [
            DataCell(Text(item.id.toString())),
            DataCell(Text(item.name)),
          ]));
    }

    if (!_sortAscending) result = result.reversed.toList();

    return result;
  }

  int _sortColumnIndex;
  bool _sortAscending = true;
  TextStyle _titleStyle = TextStyle(fontSize: 18, color: Colors.redAccent);
  @override
  Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(title: Text('Gecer')),
        body: ListView(
          children: <Widget>[
            Container(
                padding: EdgeInsets.all(16.0),
                child: DataTable(
                  sortColumnIndex: _sortColumnIndex, //第几列排序
                  sortAscending: _sortAscending, //是否增序排列 --此处都是样式具体的排序方法还得自己写
                  columns: [
                    DataColumn(
                        label: Text(
                          'ID',
                          style: _titleStyle,
                        ),
                        onSort: (int index, bool sortAscending) {
                          setState(() {
                            _sortColumnIndex = index;
                            _sortAscending = sortAscending;
                          });
                        }),
                    DataColumn(
                        label: Text(
                      'Name',
                      style: _titleStyle,
                    ))
                  ],
                  rows: _getRows(), //每次排序都会重新调用此方法
                ))
          ],
        ));
  }
}

 

发布了72 篇原创文章 · 获赞 5 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_39370093/article/details/104196659
今日推荐