Flutter翻页效果插件better_page_turn的使用

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

Flutter翻页效果插件better_page_turn的使用

better_page_turn 是一个用于Flutter的简单翻页效果小部件。它提供了水平翻页和滑动翻页两种效果,适用于需要实现书本翻页或卡片切换的应用场景。

安装与配置

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

    dependencies:
      better_page_turn: ^0.0.6
    
  2. 安装依赖
    在终端中运行以下命令以安装依赖:

    $ flutter packages get
    

使用示例

下面是一个完整的示例代码,展示了如何使用 better_page_turn 插件来实现翻页效果。该示例包括了水平翻页(HorizontalFlipPageTurn)和滑动翻页(SliderPageTurn),并提供了按钮来控制翻页方向和位置。

import 'package:better_page_turn/better_page_turn.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';

void main() {
  runApp(
    CupertinoApp(
      home: CupertinoPageScaffold(
        child: SafeArea(
          child: MyApp(),
        ),
      ),
    ),
  );
}

class MyApp extends StatefulWidget {
  [@override](/user/override)
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  // 创建控制器,用于控制翻页动画
  HorizontalFlipPageTurnController horizontalFlipPageTurnController = HorizontalFlipPageTurnController();
  SliderPageTurnController sliderPageTurnController = SliderPageTurnController();

  [@override](/user/override)
  Widget build(BuildContext context) {
    return CupertinoPageScaffold(
      child: Wrap(
        children: [
          // 水平翻页效果
          Container(
            child: Padding(
              padding: EdgeInsets.all(20.0),
              child: LayoutBuilder(builder: (context, constraints) {
                return HorizontalFlipPageTurn(
                  // 子页面内容,这里使用颜色作为背景
                  children: [Colors.pink.value, Colors.teal.value, Colors.orange.value, Colors.indigo.value]
                      .map((e) => _buildWidget(e, Color(e)))
                      .toList(),
                  // 设置每个页面的大小
                  cellSize: Size(constraints.maxWidth, 200),
                  // 绑定控制器
                  controller: horizontalFlipPageTurnController,
                );
              }),
            ),
          ),

          // 滑动翻页效果
          Container(
            child: Padding(
              padding: EdgeInsets.all(20.0),
              child: LayoutBuilder(builder: (context, constraints) {
                return SliderPageTurn(
                  // 子页面内容,这里使用颜色作为背景
                  children: [Colors.pink.value, Colors.teal.value, Colors.orange.value, Colors.indigo.value]
                      .map((e) => _buildWidget(e, Color(e)))
                      .toList(),
                  // 设置每个页面的大小
                  cellSize: Size(constraints.maxWidth, 200),
                  // 绑定控制器
                  controller: sliderPageTurnController,
                );
              }),
            ),
          ),

          // 控制翻页的按钮
          CupertinoButton(
            child: Text("向左翻页"),
            onPressed: () {
              // 触发水平翻页和滑动翻页的向左动画
              horizontalFlipPageTurnController.animToLeftWidget();
              sliderPageTurnController.animToLeftWidget();
            },
          ),
          CupertinoButton(
            child: Text("向右翻页"),
            onPressed: () {
              // 触发水平翻页和滑动翻页的向右动画
              horizontalFlipPageTurnController.animToRightWidget();
              sliderPageTurnController.animToRightWidget();
            },
          ),
          CupertinoButton(
            child: Text("翻到第一页"),
            onPressed: () {
              // 翻到第一个页面
              horizontalFlipPageTurnController.animToPositionWidget(0);
              sliderPageTurnController.animToPositionWidget(0);
            },
          ),
          CupertinoButton(
            child: Text("翻到最后一页"),
            onPressed: () {
              // 翻到最后一个页面
              horizontalFlipPageTurnController.animToPositionWidget(3);
              sliderPageTurnController.animToPositionWidget(3);
            },
          ),
        ],
      ),
    );
  }

  // 构建每个页面的内容
  Widget _buildWidget(int position, Color color) {
    return Container(
      color: color,  // 设置背景颜色
      constraints: BoxConstraints.expand(),  // 使容器充满整个页面
      child: Stack(
        alignment: Alignment.topCenter,  // 内容居中对齐
        children: [
          Align(
            alignment: Alignment.center,  // 文字居中显示
            child: Text(
              "0x${position.toRadixString(16).toUpperCase()}",  // 显示十六进制的颜色值
              style: TextStyle(
                color: Color(0xFF2e282a),  // 文字颜色
                fontSize: 40.0,  // 文字大小
              ),
            ),
          ),
        ],
      ),
    );
  }
}

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

1 回复

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


当然,以下是如何在Flutter项目中使用better_page_turn插件来实现翻页效果的代码示例。better_page_turn是一个强大的Flutter插件,用于创建逼真的翻页动画效果。

首先,你需要在你的pubspec.yaml文件中添加对better_page_turn的依赖:

dependencies:
  flutter:
    sdk: flutter
  better_page_turn: ^x.y.z  # 请使用最新版本号替换x.y.z

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

接下来是一个简单的示例代码,展示如何使用better_page_turn来实现翻页效果:

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

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

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

class PageTurnDemo extends StatefulWidget {
  @override
  _PageTurnDemoState createState() => _PageTurnDemoState();
}

class _PageTurnDemoState extends State<PageTurnDemo> with SingleTickerProviderStateMixin {
  PageController _pageController;
  int _currentPage = 0;
  final List<Widget> _pages = List.generate(
    10, // 假设有10页
    (index) => Center(child: Text('Page ${index + 1}')),
  );

  @override
  void initState() {
    super.initState();
    _pageController = PageController(initialPage: _currentPage);
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Better Page Turn Demo'),
      ),
      body: PageTurn(
        controller: _pageController,
        children: _pages,
        onPageTurned: (page) {
          setState(() {
            _currentPage = page;
          });
        },
        // 自定义翻页效果,这里使用的是默认效果
        curve: Curves.easeInOutQuad,
        duration: Duration(milliseconds: 500),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: () {
          // 下一页
          _pageController.nextPage(
            duration: Duration(milliseconds: 500),
            curve: Curves.easeInOutQuad,
          );
        },
        tooltip: 'Next Page',
        child: Icon(Icons.arrow_forward),
      ),
      floatingActionButtonLocation: FloatingActionButtonLocation.centerFloat,
    );
  }

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

在这个示例中:

  1. 我们创建了一个包含10页的列表_pages,每个页面只是显示一个简单的文本。
  2. 使用PageTurn组件来包裹这些页面,并传入PageController来控制翻页。
  3. onPageTurned回调用于更新当前页码。
  4. 浮动按钮用于手动触发翻页效果,调用_pageController.nextPage()方法。

你可以根据需要自定义翻页效果,比如调整动画曲线和持续时间,或者添加更多复杂的页面内容。

请确保你已经按照better_page_turn的文档正确设置了所有必要的依赖和配置。这个插件可能会随着版本的更新而变化,所以请参考最新的官方文档来获取最新的用法和示例。

回到顶部