![Developer Challenge](https://img.shields.io/badge/developer-challenge-informational?logo=data:image/svg%2bxml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDI1LjQuMSwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPgo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IgoJIHZpZXdCb3g9IjAgMCAyNCAyNCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgMjQgMjQ7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KCS5zdDB7ZmlsbDojRTZFNkU2O30KPC9zdHlsZT4KPGc+Cgk8ZyBpZD0iTGF5ZXJfMl8xXyI+CgkJPGcgaWQ9IkxheWVyXzEtMl8yXyI+CgkJCTxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik00LjIsOC40aDEuOWMwLjIsMCwwLjMsMC4xLDAuMywwLjNjMCwwLjEsMCwwLjItMC4xLDAuMmwtMi45LDIuOWMtMC4xLDAuMS0wLjEsMC4zLDAsMC41bDIuOSwyLjkKCQkJCWMwLjEsMC4xLDAuMSwwLjMsMCwwLjVjLTAuMSwwLjEtMC4xLDAuMS0wLjIsMC4xSDQuMmMtMC4xLDAtMC4zLTAuMS0wLjQtMC4ybC0zLjEtMy4xYy0wLjItMC4yLTAuMi0wLjYsMC0wLjhsMy4xLTMuMQoJCQkJQzQsOC40LDQuMSw4LjQsNC4yLDguNHoiLz4KCQkJPHBhdGggY2xhc3M9InN0MCIgZD0iTTE5LjgsMTUuNmgtMS45Yy0wLjIsMC0wLjMtMC4xLTAuMy0wLjNjMC0wLjEsMC0wLjIsMC4xLTAuMmwyLjktMi45YzAuMS0wLjEsMC4xLTAuMywwLTAuNWwtMi45LTIuOQoJCQkJYy0wLjEtMC4xLTAuMS0wLjMsMC0wLjVjMC4xLTAuMSwwLjEtMC4xLDAuMi0wLjFoMS45YzAuMSwwLDAuMywwLjEsMC40LDAuMmwzLjEsMy4xYzAuMiwwLjIsMC4yLDAuNiwwLDAuOGwtMy4xLDMuMQoJCQkJQzIwLDE1LjYsMTkuOSwxNS42LDE5LjgsMTUuNnoiLz4KCQkJPHBhdGggY2xhc3M9InN0MCIgZD0iTTkuOSwxNC45YzAtMC4xLTAuMS0wLjEtMC4xLTAuMWMwLDAsMCwwLTAuMSwwYy0xLDEuOC0yLjksMi44LTQuOSwyLjhINC4zYy0wLjIsMC0wLjMsMC4xLTAuMywwLjN2Mi4zCgkJCQljMCwwLjIsMC4xLDAuMywwLjMsMC4zaDAuNGMyLjUsMCw0LjktMS4xLDYuNS0yLjljMCwwLDAtMC4xLDAtMC4xQzEwLjYsMTYuOCwxMC4yLDE1LjksOS45LDE0Ljl6Ii8+CgkJCTxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik05LjksOWMwLjMtMSwwLjgtMS45LDEuNC0yLjdjMCwwLDAtMC4xLDAtMC4xYy0xLjYtMS45LTQtMi45LTYuNS0yLjlINC41QzQuMiwzLjIsNCwzLjUsNCwzLjhsMCwwdjIuMQoJCQkJYzAsMC4yLDAuMSwwLjMsMC4zLDAuM2wwLDBoMC40YzIsMCwzLjksMS4xLDQuOSwyLjhDOS43LDkuMSw5LjgsOS4xLDkuOSw5QzkuOCw5LjEsOS44LDkuMSw5LjksOXoiLz4KCQkJPHBhdGggY2xhc3M9InN0MCIgZD0iTTE5LjMsNi4yaDAuM2MwLjIsMCwwLjMtMC4xLDAuMy0wLjNWMy44YzAtMC4zLTAuMi0wLjUtMC41LTAuNWgtMC4xYy00LjgsMC04LjgsMy45LTguOSw4LjcKCQkJCWMwLDQuOCwzLjksOC44LDguNyw4LjhjMCwwLDAsMCwwLjEsMGgwLjJjMC4zLDAsMC41LTAuMiwwLjUtMC41djB2LTIuMWMwLTAuMi0wLjEtMC4zLTAuMy0wLjNsMCwwaC0wLjRjLTMuMiwwLTUuOC0yLjYtNS44LTUuOAoJCQkJYzAsMCwwLTAuMSwwLTAuMUMxMy41LDguNywxNi4yLDYuMiwxOS4zLDYuMnoiLz4KCQk8L2c+Cgk8L2c+CjwvZz4KPC9zdmc+Cg==)
Example
![nongroup](https://i.hizliresim.com/7h67hlp.gif)
int currentPage = 1;
Pagination(
paginateButtonStyles: PaginateButtonStyles(),
prevButtonStyles: PaginateSkipButton(
borderRadius: const BorderRadius.only(
topLeft: Radius.circular(20),
bottomLeft: Radius.circular(20))),
nextButtonStyles: PaginateSkipButton(
borderRadius: const BorderRadius.only(
topRight: Radius.circular(20),
bottomRight: Radius.circular(20))),
onPageChange: (number) {
setState(() {
currentPage = number;
});
},
useGroup: false,
totalPage: 30,
show: 2,
currentPage: currentPage,
)
Example 2
![group](https://i.hizliresim.com/aay9j7m.gif)
Pagination(
width: MediaQuery.of(context).size.width * .6, // this prop is optional
paginateButtonStyles: PaginateButtonStyles(),
prevButtonStyles: PaginateSkipButton(
borderRadius: const BorderRadius.only(
topLeft: Radius.circular(20),
bottomLeft: Radius.circular(20))),
nextButtonStyles: PaginateSkipButton(
borderRadius: const BorderRadius.only(
topRight: Radius.circular(20),
bottomRight: Radius.circular(20))),
onPageChange: (number) {
setState(() {
currentPage = number;
});
},
useGroup: true,
totalPage: 30,
show: 4,
currentPage: currentPage,
)
Note: If show value greater than totalPage It will throw error.
Note2: Height value default:50. And works with only groupped pagination. Also width works with too
-- Styling
![stylingimage](https://i.hizliresim.com/4mkcuv7.PNG)
Pagination(
paginateButtonStyles: PaginateButtonStyles(
backgroundColor: Colors.pink,
activeBackgroundColor: Colors.black,
activeTextStyle: const TextStyle(color: Colors.red)),
prevButtonStyles: PaginateSkipButton(
buttonBackgroundColor: Colors.orange,
icon: const Icon(
Icons.arrow_back_ios,
size: 30,
),
borderRadius: const BorderRadius.only(
topLeft: Radius.circular(20),
bottomLeft: Radius.circular(20))),
nextButtonStyles: PaginateSkipButton(
buttonBackgroundColor: Colors.purple,
icon: const Icon(
Icons.arrow_right_alt,
color: Colors.white,
),
borderRadius: const BorderRadius.only(
topRight: Radius.circular(20),
bottomRight: Radius.circular(20))),
onPageChange: (number) {
setState(() {
currentPage = number;
});
},
useGroup: true,
totalPage: 30,
show: 4,
currentPage: currentPage,
)
```
| Required Fields | Type |
|----------------------|----------------------|
| totalPage | integer |
| currentPage | integer |
| onPageChange | (number) => void |
| nextButtonStyles | PaginateSkipButton |
| prevButtonStyles | PaginateSkipButton |
| paginateButtonStyles | PaginateButtonStyles |