dc_datatable_paginator 1.0.1 dc_datatable_paginator: ^1.0.1 copied to clipboard
Widget Datatable with pagination
ScreenShot #
Usage #
-
Add reference to pubspec.yaml.
-
Import:
import 'package:dc_datatable_paginator/dc_datatable_paginator.dart';
- Create Model:
class ModelExample {
final int id;
final String name;
final String description;
ModelExample({
required this.id,
required this.name,
required this.description,
});
@override
bool operator ==(Object other) {
if (identical(this, other)) return true;
return other is ModelExample &&
other.id == id &&
other.name == name &&
other.description == description;
}
@override
int get hashCode => id.hashCode ^ name.hashCode ^ description.hashCode;
}
- Create DcSource:
import 'package:dc_datatable_paginator/dc_datatable_paginator.dart';
import 'package:flutter/material.dart';
import 'model_example.dart';
class MyDataSource extends DcSource {
//create columns
@override
List<DataColumn> get columns {
return const [
DataColumn(label: Text('Id')),
DataColumn(label: Text('Name')),
DataColumn(label: Text('Description')),
];
}
//get data from API
@override
Future<DcPaged> onLoadData() async {
List<ModelExample> dados = List.generate(10, (i) {
i++;
return ModelExample(
id: i,
name: "Name $i",
description: "Description: Record:$i Page: $currentPage");
});
return DcPaged(data: dados, totalRecords: 110);
}
//create row from each record
@override
DataRow getRow(int i, List data, List dataSelected) {
ModelExample model = data[i];
return DataRow(
cells: <DataCell>[
DataCell(Text(model.id.toString())),
DataCell(Text(model.name)),
DataCell(Text(model.description)),
],
selected: dataSelected.contains(model),
onSelectChanged: (value) {
if (dataSelected.contains(model)) {
dataSelected.remove(model);
} else {
dataSelected.add(model);
}
debugPrint("Row Selected $i");
});
}
}
- Add MyDataSource in Providers:
void main() {
runApp(ChangeNotifierProvider(
create: (_) => MyDataSource(),
child: const MyApp(),
));
}
- Get Provider and use your UI:
import 'package:dc_datatable_paginator/dc_datatable_paginator.dart';
import 'package:flutter/material.dart';
import 'my_data_source.dart';
// ignore: depend_on_referenced_packages
import 'package:provider/provider.dart';
class MyHomePage extends StatelessWidget {
final String title;
const MyHomePage({Key? key, required this.title}) : super(key: key);
@override
Widget build(BuildContext context) {
//
MyDataSource source = Provider.of<MyDataSource>(context, listen: true);
return Scaffold(
appBar: AppBar(
title: Text(title),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
DcDataTablePaginator(
labelPage: 'Page',
labelRecords: 'Records',
source: source,
)
],
),
),
);
//record search simulation in an api
}
} //end class