class ExpenseDataGrid extends StatefulWidget {
@override
_ExpenseDataGridState createState() => _ExpenseDataGridState();
}
class _ExpenseDataGridState extends State<ExpenseDataGrid> {
@override
Widget build(BuildContext context) {
return Consumer<ExpenseData>(
builder: (context, expenseData, child) {
var expenseDataSource =
ExpenseGridSource(expenseData: expenseData.getExpenseList());
return Scaffold(
body: SafeArea(
///
/// TODO: Handle no swipe problem
///
child: SfDataGrid(
allowSwiping: true,
swipeMaxOffset: 100.0,
source: expenseDataSource,
columnWidthMode: ColumnWidthMode.fill,
startSwipeActionsBuilder: (context, row) {
return GestureDetector(
child: Container(
width: 100.0,
color: Colors.orange,
child: Center(
child: Icon(
Icons.edit,
),
),
),
onTap: () {
int index = expenseDataSource._expenseData.indexOf(row);
EditExpense(index: index);
},
);
},
endSwipeActionsBuilder: (context, row) {
return GestureDetector(
child: Container(
width: 100.0,
color: Colors.red,
child: Center(
child: Icon(
Icons.delete,
),
),
),
onTap: () {
int index = expenseDataSource._expenseData.indexOf(row);
Provider.of<ExpenseData>(context).deleteExpense(index);
},
);
},
columns: <GridColumn>[
GridTextColumn(
columnName: 'item',
label: Container(
color: Colors.red,
padding: EdgeInsets.all(8.0),
alignment: Alignment.centerLeft,
child: Text(
'Item',
style: TextStyle(color: Colors.white),
),
),
),
GridTextColumn(
columnName: 'cost',
label: Container(
color: Colors.red,
padding: EdgeInsets.all(8.0),
alignment: Alignment.centerLeft,
child: Text(
'Cost',
style: TextStyle(color: Colors.white),
),
),
),
GridTextColumn(
columnName: 'expenseDate',
label: Container(
color: Colors.red,
padding: EdgeInsets.all(8.0),
alignment: Alignment.centerLeft,
child: Text(
'Expense Date',
style: TextStyle(color: Colors.white),
overflow: TextOverflow.ellipsis,
),
),
),
GridTextColumn(
columnName: 'status',
label: Container(
color: Colors.red,
padding: EdgeInsets.all(8.0),
alignment: Alignment.centerLeft,
child: Text(
'Status',
style: TextStyle(color: Colors.white),
),
),
),
GridTextColumn(
columnName: 'dateAdded',
label: Container(
color: Colors.red,
padding: EdgeInsets.all(8.0),
alignment: Alignment.centerLeft,
child: Text(
'Date Added',
style: TextStyle(color: Colors.white),
),
),
),
],
),
),
);
},
);
}
}