Flutter分页显示插件number_pagination的使用
Flutter分页显示插件number_pagination的使用
插件简介
number_pagination
是一个为Flutter应用提供可定制化分页功能的插件。它以直观和灵活的方式实现了分页,允许用户轻松地在多页内容中导航。
主要特性
- 页面数字按钮
- 导航控件(首页、上一页、下一页、末页)
- 可定制外观
- 响应式设计
安装
将以下内容添加到项目的 pubspec.yaml
文件中:
dependencies:
number_pagination: ^1.1.0
使用示例
下面是一个完整的示例代码,展示了如何在Flutter项目中使用 number_pagination
插件:
import 'package:flutter/material.dart';
import 'package:number_pagination/number_pagination.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'NumberPagenation Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: const Scaffold(body: MyHomePage()),
);
}
}
class MyHomePage extends StatefulWidget {
const MyHomePage({super.key});
@override
State<MyHomePage> createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
int selectedPageNumber = 3;
@override
Widget build(BuildContext context) {
return Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
Flexible(
child: Container(
alignment: Alignment.center,
height: 100,
color: Colors.yellow[200],
child: Text('PAGE INFO $selectedPageNumber'), // 显示当前页信息
),
),
NumberPagination(
onPageChanged: (int pageNumber) {
setState(() {
selectedPageNumber = pageNumber;
});
},
visiblePagesCount: 15, // 显示的页码数量
totalPages: 100, // 总页数
currentPage: selectedPageNumber, // 当前选中的页码
buttonElevation: 5, // 按钮阴影
buttonRadius: 5, // 按钮圆角半径
controlButtonSize: Size(48, 48), // 控制按钮大小
numberButtonSize: Size(48, 48), // 数字按钮大小
selectedTextColor: Colors.white, // 选中文字颜色
unSelectedTextColor: Colors.black, // 未选中文字颜色
selectedButtonColor: Colors.black, // 选中按钮背景色
unSelectedButtonColor: Colors.white, // 未选中按钮背景色
controlButtonColor: Colors.white, // 控制按钮背景色
firstPageIcon: Icon(Icons.first_page), // 首页图标
previousPageIcon: Icon(Icons.keyboard_arrow_left), // 上一页图标
nextPageIcon: Icon(Icons.keyboard_arrow_right), // 下一页图标
lastPageIcon: Icon(Icons.last_page), // 末页图标
navigationButtonSpacing: 4.0, // 导航按钮间距
sectionSpacing: 10.0, // 导航按钮与数字按钮之间的间距
betweenNumberButtonSpacing: 3, // 数字按钮之间的间距
),
],
);
}
}
自定义选项
NumberPagination
提供了丰富的自定义选项,以满足不同场景下的需求。以下是主要的自定义参数及其默认值:
Page Display
Option | Type | Description | Default |
---|---|---|---|
visiblePagesCount |
int |
显示的页码数量 | 10 |
currentPage |
int |
当前显示的页码 | Required |
totalPages |
int |
总页数 | Required |
Text Styling
Option | Type | Description | Default |
---|---|---|---|
fontSize |
double |
字体大小 | 15 |
fontFamily |
String? |
字体系列 | null |
Button Styling
Option | Type | Description | Default |
---|---|---|---|
buttonElevation |
double |
按钮阴影 | 5 |
buttonRadius |
double |
按钮圆角半径 | 0 |
controlButtonSize |
Size |
控制按钮大小 | Size(48, 48) |
numberButtonSize |
Size |
数字按钮大小 | Size(48, 48) |
Colors
Option | Type | Description | Default |
---|---|---|---|
selectedTextColor |
Color |
选中文字颜色 | Colors.white |
unSelectedTextColor |
Color |
未选中文字颜色 | Colors.black |
selectedButtonColor |
Color |
选中按钮背景色 | Colors.black |
unSelectedButtonColor |
Color |
未选中按钮背景色 | Colors.white |
controlButtonColor |
Color |
控制按钮背景色 | Colors.white |
Icons
Option | Type | Description | Default |
---|---|---|---|
firstPageIcon |
Widget |
首页图标 | Icon(Icons.first_page) |
previousPageIcon |
Widget |
上一页图标 | Icon(Icons.keyboard_arrow_left) |
nextPageIcon |
Widget |
下一页图标 | Icon(Icons.keyboard_arrow_right) |
lastPageIcon |
Widget |
末页图标 | Icon(Icons.last_page) |
Spacing
Option | Type | Description | Default |
---|---|---|---|
navigationButtonSpacing |
double |
导航按钮间距 | 4.0 |
sectionSpacing |
double |
导航按钮与数字按钮之间的间距 | 10.0 |
betweenNumberButtonSpacing |
double |
数字按钮之间的间距 | 3 |
Callback
Option | Type | Description |
---|---|---|
onPageChanged |
Function(int) |
页面变化时触发的回调函数 |
通过这些自定义选项,您可以根据应用程序的需求调整 NumberPagination
的外观和行为,使其更好地融入您的应用设计中。
更多关于Flutter分页显示插件number_pagination的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter分页显示插件number_pagination的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是一个关于如何在Flutter中使用number_pagination
插件来实现分页显示的示例代码。这个插件允许你通过简单的配置来实现分页功能,非常适合用于列表或网格数据的分页显示。
首先,确保你的pubspec.yaml
文件中已经添加了number_pagination
依赖:
dependencies:
flutter:
sdk: flutter
number_pagination: ^2.0.0 # 请根据需要选择最新版本
然后运行flutter pub get
来安装依赖。
接下来是一个完整的示例代码,展示了如何使用number_pagination
来实现分页功能:
import 'package:flutter/material.dart';
import 'package:number_pagination/number_pagination.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Flutter Pagination Example'),
),
body: PaginationDemo(),
),
);
}
}
class PaginationDemo extends StatefulWidget {
@override
_PaginationDemoState createState() => _PaginationDemoState();
}
class _PaginationDemoState extends State<PaginationDemo> {
final List<String> items = List.generate(100, (index) => "Item ${index + 1}");
int currentPage = 1;
int itemsPerPage = 10;
@override
Widget build(BuildContext context) {
int totalPages = (items.length / itemsPerPage).ceil();
return Column(
children: [
Expanded(
child: ListView.builder(
itemCount: itemsPerPage,
itemBuilder: (_, index) {
int itemIndex = (currentPage - 1) * itemsPerPage + index;
if (itemIndex >= items.length) return null;
return ListTile(
title: Text(items[itemIndex]),
);
},
),
),
Padding(
padding: const EdgeInsets.all(8.0),
child: Center(
child: NumberPagination(
currentPage: currentPage,
totalPages: totalPages,
onPageChanged: (page) {
setState(() {
currentPage = page;
});
},
),
),
),
],
);
}
}
代码解释:
-
依赖导入:
import 'package:flutter/material.dart';
import 'package:number_pagination/number_pagination.dart';
-
主应用:
MyApp
是主应用类,包含一个Scaffold
,其body
是一个PaginationDemo
组件。
-
分页组件:
PaginationDemo
是一个有状态的组件(StatefulWidget
),它维护当前页码(currentPage
)和每页显示的项数(itemsPerPage
)。
-
数据列表:
items
是一个包含100个字符串的列表。
-
分页逻辑:
ListView.builder
用于显示当前页的数据项。NumberPagination
组件用于显示分页按钮,并处理页码变化。
-
页码变化处理:
- 当用户点击分页按钮时,
onPageChanged
回调被触发,更新currentPage
状态,从而触发UI的重新构建,显示新页的数据。
- 当用户点击分页按钮时,
通过这种方式,你可以很方便地在Flutter应用中使用number_pagination
插件来实现分页显示功能。希望这个示例对你有所帮助!