数据模型
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(), //每次排序都会重新调用此方法
))
],
));
}
}