Flutter页面切换插件pager的使用

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

Flutter页面切换插件Pager的使用

Pager简介

Pager 是一个适用于多种场景的数字分页组件,例如自定义分页表格等。它可以帮助开发者轻松实现页面切换功能。

Pager Example 1

Pager Example 2

开始使用

添加依赖

首先,在你的 pubspec.yaml 文件中添加 pager 作为依赖:

dependencies:
  pager: ^0.0.6

然后运行 flutter pub get 来安装这个包。

导入包

在需要使用的 Dart 文件顶部导入 pager 包:

import 'package:pager/pager.dart';

使用方法

基本用法

Pager 是一个简单的分页组件,你可以通过以下方式创建并使用它:

Pager(
  currentPage: _currentPage,
  totalPages: 5,
  onPageChanged: (page) {},
),

这里我们指定了当前页码 _currentPage 和总页数 totalPages,并且当页面改变时会触发 onPageChanged 回调函数。

示例代码

下面是一个完整的例子,展示了如何在Flutter应用中使用 Pager 组件。

示例1:简单分页示例

import 'package:flutter/material.dart';
import 'package:pager/pager.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Pagination Example',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: const MyHomePage(),
    );
  }
}

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

  @override
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  int _currentPage = 1;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text("Pagination Example"),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            Container(
              height: 200,
              margin: const EdgeInsets.all(32),
              color: Colors.blue,
              child: Center(
                child: Text(
                  "PAGE: $_currentPage",
                  style: const TextStyle(color: Colors.white, fontSize: 20),
                ),
              ),
            ),
            Pager(
              currentPage: _currentPage,
              totalPages: 5,
              onPageChanged: (page) {
                setState(() {
                  _currentPage = page;
                });
              },
            ),
          ],
        ),
      ),
    );
  }
}

示例2:带有每页显示条目数量选择器的分页示例

此示例展示了更复杂的用法,包括了每页显示条目的选择器。

import 'package:flutter/material.dart';
import 'package:pager/pager.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Pagination Example',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: const MyHomePage(),
    );
  }
}

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

  @override
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  late int _currentPage;
  late int _itemsPerPage;
  List<int> pages = [5, 10, 18, 50, 100];
  late int _totalPages;
  final int _totalElements = 100;

  @override
  void initState() {
    super.initState();
    _currentPage = 1;
    _itemsPerPage = pages.first;
    _totalPages = (_totalElements / _itemsPerPage).ceil();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('Pagination Example'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(32.0),
        child: Center(
          child: Column(
            mainAxisSize: MainAxisSize.min,
            children: [
              Container(
                height: 180,
                width: 400,
                color: Colors.blue,
                child: Column(
                  mainAxisAlignment: MainAxisAlignment.spaceAround,
                  children: [
                    Text(
                      "TOTAL ELEMENTS: $_totalElements",
                      style: const TextStyle(color: Colors.white, fontSize: 18),
                    ),
                    Text(
                      "CURRENT PAGE: $_currentPage",
                      style: const TextStyle(color: Colors.white, fontSize: 18),
                    ),
                    Text(
                      "ITEMS PER PAGE: $_itemsPerPage",
                      style: const TextStyle(color: Colors.white, fontSize: 18),
                    ),
                    Text(
                      "TOTAL PAGES: $_totalPages",
                      style: const TextStyle(color: Colors.white, fontSize: 18),
                    ),
                  ],
                ),
              ),
              const SizedBox(height: 32),
              Pager(
                currentItemsPerPage: _itemsPerPage,
                currentPage: _currentPage,
                totalPages: _totalPages,
                onPageChanged: (page) {
                  setState(() {
                    _currentPage = page;
                  });
                },
                showItemsPerPage: true,
                onItemsPerPageChanged: (itemsPerPage) {
                  setState(() {
                    _itemsPerPage = itemsPerPage;
                    _totalPages = (_totalElements / _itemsPerPage).ceil();
                    _currentPage = 1;
                  });
                },
                itemsPerPageList: pages,
              ),
            ],
          ),
        ),
      ),
    );
  }
}

以上就是关于 Pager 插件的基本介绍和使用方法,希望对您有所帮助!如果您有任何问题或需要进一步的帮助,请随时提问。


更多关于Flutter页面切换插件pager的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter页面切换插件pager的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter中,pager 并不是一个官方或广泛认可的页面切换插件。不过,假设你指的是一个用于页面导航和切换的自定义或第三方库(比如 flutter_pager,尽管这不是一个真实存在的库名,仅作为示例),以下是一个基于 Flutter 页面切换功能的示例代码,通常这种功能可以通过 Navigator 和一些自定义的页面切换逻辑来实现。

如果你是在寻找一个具体的第三方库,你可能需要查找该库的文档或GitHub仓库来获取确切的使用示例。不过,以下是一个使用 Flutter 内置的 Navigator 来实现页面切换的示例:

示例代码

  1. 创建一个 Flutter 项目(如果你还没有的话):
flutter create my_pager_app
cd my_pager_app
  1. 修改 main.dart 文件
import 'package:flutter/material.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Pager Example',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  int _selectedIndex = 0;

  final List<Widget> _widgetOptions = [
    Text('First Page'),
    Center(child: Text('Second Page')),
    Center(child: Text('Third Page')),
  ];

  void _onItemTapped(int index) {
    setState(() {
      _selectedIndex = index;
    });

    // 使用 Navigator 切换到新的页面(如果需要完全独立的页面堆栈)
    // Navigator.push(
    //   context,
    //   MaterialPageRoute(builder: (context) => _widgetOptions[index]),
    // );
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Page Navigation Example'),
      ),
      body: Center(
        child: _widgetOptions[_selectedIndex],
      ),
      bottomNavigationBar: BottomNavigationBar(
        items: [
          BottomNavigationBarItem(
            icon: Icon(Icons.home),
            label: 'Home',
          ),
          BottomNavigationBarItem(
            icon: Icon(Icons.business),
            label: 'Business',
          ),
          BottomNavigationBarItem(
            icon: Icon(Icons.school),
            label: 'School',
          ),
        ],
        currentIndex: _selectedIndex,
        onTap: _onItemTapped,
      ),
    );
  }
}

解释

  • MyApp:这是应用程序的根 widget,它创建了一个 MaterialApp,其中包含应用程序的主题和主页。
  • MyHomePage:这是一个有状态的 widget,它包含了一个底部导航栏(BottomNavigationBar)和一个根据当前选择的索引显示不同内容的中心区域。
  • _widgetOptions:这是一个包含不同页面的列表。在这个例子中,它们只是简单的 Text widgets,但在实际应用中,它们可以是任何复杂的页面。
  • _onItemTapped:这是一个处理底部导航栏项点击事件的函数。它更新当前选择的索引,并使用 setState 来重建 widget,从而显示新的页面。

注意

  • 如果你想要完全独立的页面堆栈(例如,在点击底部导航栏项时,不是简单地替换中心区域的内容,而是创建一个全新的页面堆栈),你可以使用 Navigator.push 方法,如注释中所示。
  • 在实际项目中,你可能需要为每个页面创建一个单独的 widget 类,而不是在 _widgetOptions 列表中直接定义它们。

希望这个示例能帮助你理解如何在 Flutter 中实现页面切换。如果你指的是一个特定的第三方库,请查阅该库的文档或示例代码。

回到顶部