Skip to content

Commit

Permalink
add scroll mode
Browse files Browse the repository at this point in the history
  • Loading branch information
AbdelbassitAb committed Jan 27, 2025
1 parent d527515 commit e81e395
Show file tree
Hide file tree
Showing 7 changed files with 103 additions and 11 deletions.
1 change: 1 addition & 0 deletions example/android/gradle.properties
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError
android.useAndroidX=true
android.enableJetifier=true
org.gradle.java.home=C:/Program Files/Java/jdk-17
7 changes: 6 additions & 1 deletion example/lib/main.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import 'package:example/builder_page.dart';
import 'package:example/dropdown_page.dart';
import 'package:example/numbers_page.dart';
import 'package:example/only_arrows_page.dart';
import 'package:example/scrollable_numbers.dart';
import 'package:flutter/material.dart';

void main() => runApp(const MyApp());
Expand All @@ -28,7 +29,7 @@ class HomePage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return DefaultTabController(
length: 4,
length: 5,
child: Scaffold(
appBar: AppBar(
backgroundColor: Theme.of(context).colorScheme.inversePrimary,
Expand All @@ -37,17 +38,21 @@ class HomePage extends StatelessWidget {
tabs: [
Tab(child: Text("Hidden")),
Tab(child: Text("Numbers")),
Tab(child: Text("Scrollable Numbers")),
Tab(child: Text("Dropdown")),
Tab(child: Text("Custom Builder")),

],
),
),
body: const TabBarView(
children: [
OnlyArrowsPage(),
NumbersPage(),
ScrollableNumbers(),
DropdownPage(),
BuilderPage(),

],
),
),
Expand Down
3 changes: 1 addition & 2 deletions example/lib/numbers_page.dart
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ class _NumbersPageState extends State<NumbersPage> {
Widget build(BuildContext context) {
var pages = List.generate(
_numPages,
(index) => Center(
(index) => Center(
child: Text(
"Page ${index + 1}",
style: Theme.of(context).textTheme.displayLarge,
Expand All @@ -32,7 +32,6 @@ class _NumbersPageState extends State<NumbersPage> {
margin: EdgeInsets.zero,
elevation: 4,
child: NumberPaginator(
// by default, the paginator shows numbers as center content
numberPages: _numPages,
onPageChange: (int index) {
setState(() {
Expand Down
46 changes: 46 additions & 0 deletions example/lib/scrollable_numbers.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
import 'package:flutter/material.dart';
import 'package:number_paginator/number_paginator.dart';

class ScrollableNumbers extends StatefulWidget {
const ScrollableNumbers({Key? key}) : super(key: key);

@override
_ScrollableNumbersState createState() => _ScrollableNumbersState();
}

class _ScrollableNumbersState extends State<ScrollableNumbers> {
final int _numPages = 100;
int _currentPage = 0;

@override
Widget build(BuildContext context) {
var pages = List.generate(
_numPages,
(index) => Center(
child: Text(
"Page ${index + 1}",
style: Theme.of(context).textTheme.displayLarge,
),
),
);

return Scaffold(
backgroundColor: Theme.of(context).colorScheme.primaryContainer,
body: pages[_currentPage],
// card for elevation
bottomNavigationBar: Card(
margin: EdgeInsets.zero,
elevation: 4,
child: NumberPaginator(
config: const NumberPaginatorUIConfig(mode: ContentDisplayMode.scrollableNumbers),
numberPages: _numPages,
onPageChange: (int index) {
setState(() {
_currentPage = index;
});
},
),
),
);
}
}
1 change: 1 addition & 0 deletions lib/src/model/display_mode.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,5 @@ enum ContentDisplayMode {
hidden,
numbers,
dropdown,
scrollableNumbers,
}
15 changes: 7 additions & 8 deletions lib/src/ui/widgets/paginator_content.dart
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,14 @@ import 'package:number_paginator/src/model/display_mode.dart';
import 'package:number_paginator/src/ui/widgets/inherited_number_paginator.dart';
import 'package:number_paginator/src/ui/widgets/paginator_content/dropdown_content.dart';
import 'package:number_paginator/src/ui/widgets/paginator_content/number_content.dart';
import 'package:number_paginator/src/ui/widgets/paginator_content/scrollable_numbers_content.dart';

class PaginatorContent extends StatelessWidget {
final int currentPage;

const PaginatorContent({
super.key,
required this.currentPage,
super.key,
required this.currentPage,
});

@override
Expand All @@ -18,13 +19,11 @@ class PaginatorContent extends StatelessWidget {

switch (mode) {
case ContentDisplayMode.numbers:
return NumberContent(
currentPage: currentPage,
);
return NumberContent(currentPage: currentPage);
case ContentDisplayMode.dropdown:
return DropDownContent(
currentPage: currentPage,
);
return DropDownContent(currentPage: currentPage);
case ContentDisplayMode.scrollableNumbers:
return ScrollableNumberContent(currentPage: currentPage);
default:
return Container();
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
import 'package:auto_size_text/auto_size_text.dart';
import 'package:flutter/material.dart';
import 'package:number_paginator/src/ui/widgets/buttons/paginator_button.dart';
import 'package:number_paginator/src/ui/widgets/inherited_number_paginator.dart';

class ScrollableNumberContent extends StatelessWidget {
final int currentPage;

const ScrollableNumberContent({
super.key,
required this.currentPage,
});

@override
Widget build(BuildContext context) {
var numberPages = InheritedNumberPaginator.of(context).numberPages;

return SizedBox(
//height: 50, // Set a fixed height
child: ListView.builder(
scrollDirection: Axis.horizontal, // Enable scrolling
itemCount: numberPages,
itemBuilder: (context, index) {
return _buildPageButton(context, index);
},
),
);
}

/// Builds a **clickable page button**.
Widget _buildPageButton(BuildContext context, int index) => PaginatorButton(
onPressed: () =>
InheritedNumberPaginator.of(context).onPageChange?.call(index),
selected: index == currentPage,
child: AutoSizeText(
(index + 1).toString(),
maxLines: 1,
minFontSize: 5,
),
);
}

0 comments on commit e81e395

Please sign in to comment.