Flutter分页显示插件number_pagination的使用

发布于 1周前 作者 sinazl 来自 Flutter

Flutter分页显示插件number_pagination的使用

插件简介

number_pagination 是一个为Flutter应用提供可定制化分页功能的插件。它以直观和灵活的方式实现了分页,允许用户轻松地在多页内容中导航。

preview

主要特性

  • 页面数字按钮
  • 导航控件(首页、上一页、下一页、末页)
  • 可定制外观
  • 响应式设计

Document flutter package

安装

将以下内容添加到项目的 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

1 回复

更多关于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;
                });
              },
            ),
          ),
        ),
      ],
    );
  }
}

代码解释:

  1. 依赖导入

    • import 'package:flutter/material.dart';
    • import 'package:number_pagination/number_pagination.dart';
  2. 主应用

    • MyApp是主应用类,包含一个Scaffold,其body是一个PaginationDemo组件。
  3. 分页组件

    • PaginationDemo是一个有状态的组件(StatefulWidget),它维护当前页码(currentPage)和每页显示的项数(itemsPerPage)。
  4. 数据列表

    • items是一个包含100个字符串的列表。
  5. 分页逻辑

    • ListView.builder用于显示当前页的数据项。
    • NumberPagination组件用于显示分页按钮,并处理页码变化。
  6. 页码变化处理

    • 当用户点击分页按钮时,onPageChanged回调被触发,更新currentPage状态,从而触发UI的重新构建,显示新页的数据。

通过这种方式,你可以很方便地在Flutter应用中使用number_pagination插件来实现分页显示功能。希望这个示例对你有所帮助!

回到顶部