Flutter分页视图插件pageable_page_view的使用

Flutter分页视图插件pageable_page_view的使用

pageable_page_view 是一个用于在 Flutter 应用程序中实现分页操作的插件。该插件提供了一种可定制且高效的分页方式,增强了用户体验,提供了流畅的滚动效果和灵活的选项。

特性

  • list: 需要分页的数据列表。
  • itemPerPage: 每页显示的项目数量。
  • initialPage: 初始显示的页面索引。
  • child: 包含另一个 Widget 的 Widget。
  • shrinkWrap: 是否让 ListView 缩放其内容。
  • scrollDirection: ListView 的滚动方向。
  • physics: ListView 的物理属性。
  • titleDisplay: 返回用于显示标题的文本的函数。
  • subTitleDisplay: 返回用于显示副标题的文本的函数。
  • prefixIcon: 领先图标。
  • suffixIcon: 结尾图标。
  • listTileOnTap: 当 ListTile 被点击时调用的函数。

pageable

开始使用

安装

pubspec.yaml 文件中添加以下依赖项:

dependencies:
  pageable_page_view: ^latest_version

导入

在 Dart 文件中导入 pageable_page_view

import 'package:pageable_page_view/pageable_page_view.dart';

使用示例

下面是一个简单的示例,展示了如何使用 pageable_page_view 插件。

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

// 假设有一个 Pencil 类
class Pencil {
  final String color;
  final String size;

  Pencil(this.color, this.size);
}

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

class MyApp extends StatelessWidget {
  final List<dynamic> itemList = [
    Pencil('Red', 'M'),
    Pencil('Blue', 'M'),
    Pencil('Yellow', 'M'),
    Pencil('Orange', 'M'),
    Pencil('Black', 'M'),
    Pencil('White', 'M'),
    Pencil('White', 'L'),
  ];

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Pageable Page View Example'),
        ),
        body: Column(
          children: [
            Expanded(
              child: PageablePageView(
                list: itemList,
                itemPerPage: 2,
                initialPage: 0,
                titleDisplay: (item) => item.color,
                subTitleDisplay: (item) => item.size,
                listTileOnTap: (index) {
                  print("Item at index $index was tapped.");
                },
              ),
            ),
          ],
        ),
      ),
    );
  }
}

完整示例

以下是一个完整的示例,展示了如何使用 pageable_page_view 插件,并包含了一些额外的配置选项。

import 'package:flutter/material.dart';
import 'package:pageable_page_view/pageable_page_view.dart';
import 'package:pageable_pageview_example/pencil.dart'; // 假设有一个 Pencil 类

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

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Pageable Page View Demo',
      debugShowCheckedModeBanner: false,
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
        useMaterial3: true,
      ),
      home: const MyHomePage(title: 'Pageable Page View Demo'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({super.key, required this.title});
  final String title;

  [@override](/user/override)
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  final List<dynamic> itemList = [
    Pencil('Red', 'M'),
    Pencil('Blue', 'M'),
    Pencil('Yellow', 'M'),
    Pencil('Orange', 'M'),
    Pencil('Black', 'M'),
    Pencil('White', 'M'),
    Pencil('White', 'L'),
  ];

  void listOntp(int index) {
    print("Item at index $index was tapped.");
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        backgroundColor: Theme.of(context).colorScheme.inversePrimary,
        title: Text(widget.title),
      ),
      body: PageablePageView(
        list: itemList,
        itemPerPage: 2,
        initialPage: 0,
        titleDisplay: (item) => item.color,
        subTitleDisplay: (item) => item.size,
        listTileOnTap: listOntp,
      ),
    );
  }
}

更多关于Flutter分页视图插件pageable_page_view的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

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


当然,以下是一个关于如何在Flutter中使用pageable_page_view插件来实现分页视图的示例代码。这个插件允许你创建分页效果,类似于iOS的UICollectionView或者Android的ViewPager2。

首先,确保你已经在pubspec.yaml文件中添加了pageable_page_view依赖:

dependencies:
  flutter:
    sdk: flutter
  pageable_page_view: ^x.y.z  # 替换为最新的版本号

然后,运行flutter pub get来安装依赖。

接下来是一个简单的示例,展示如何使用PageablePageView来创建分页视图:

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

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

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

class PageablePageViewDemo extends StatefulWidget {
  @override
  _PageablePageViewDemoState createState() => _PageablePageViewDemoState();
}

class _PageablePageViewDemoState extends State<PageablePageViewDemo> {
  final List<String> items = List.generate(100, (index) => "Item ${index + 1}");
  final PageController pageController = PageController();

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('PageablePageView Demo'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(8.0),
        child: PageablePageView<String>(
          controller: pageController,
          itemCount: items.length,
          itemBuilder: (context, index, data) {
            return Center(
              child: Text(
                data,
                style: TextStyle(fontSize: 24),
              ),
            );
          },
          pageSize: 0.5, // 控制每页显示的项目比例,0.5表示每页显示一半的项目
          pageMargin: 16, // 页面之间的间距
          pageSnap: true, // 页面切换时是否吸附
          onPageChanged: (page) {
            print("Page changed to: $page");
          },
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: () {
          // 示例:跳转到第10页
          pageController.jumpToPage(10);
        },
        tooltip: 'Go to page 10',
        child: Icon(Icons.arrow_forward),
      ),
    );
  }

  @override
  void dispose() {
    pageController.dispose();
    super.dispose();
  }
}

代码解释

  1. 依赖引入:在pubspec.yaml中添加了pageable_page_view依赖。

  2. 创建应用:在MyApp中设置了应用的主题和主页。

  3. 数据准备:在PageablePageViewDemo的状态类中,我们创建了一个包含100个字符串项的列表items,以及一个PageController实例来控制分页视图的滚动。

  4. 构建UI

    • 使用Scaffold创建了一个包含AppBar和主体的布局。
    • body中,使用Padding组件添加了内边距,然后创建了一个PageablePageView
    • PageablePageView的参数包括:
      • controller:用于控制分页视图的滚动。
      • itemCount:项目的总数。
      • itemBuilder:用于构建每个项目的Widget。
      • pageSize:控制每页显示的项目比例。
      • pageMargin:页面之间的间距。
      • pageSnap:页面切换时是否吸附。
      • onPageChanged:页面改变时的回调。
    • 添加了一个FloatingActionButton,点击后跳转到第10页。
  5. 资源释放:在dispose方法中释放了PageController,以防止内存泄漏。

这个示例展示了如何创建一个基本的分页视图,并根据需要自定义每页显示的项目比例、间距、页面切换行为等。你可以根据实际需求进一步定制和扩展这个示例。

回到顶部