Flutter页面指示器插件flutter_page_indicator的使用

Flutter页面指示器插件flutter_page_indicator的使用

flutter_page_indicator简介

pub package

flutter_page_indicator 是一个用于Flutter应用中的页面指示器插件,支持多种内置布局样式。

使用场景

showcases

安装

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

flutter_page_indicator:

然后运行以下命令以获取依赖:

flutter packages get

基本用法

以下是一个基本的使用示例:

new PageIndicator(
  layout: PageIndicatorLayout.SLIDE, // 设置页面指示器的布局样式
  size: 20.0, // 指示器的大小
  controller: YOUR_PAGE_CONTROLLER, // 页面控制器
  space: 5.0, // 指示器之间的间距
  count: 4, // 总页数
)

所有内置布局样式

布局名称 展示图 支持版本
PageIndicatorLayout.NONE 从 0.0.1 开始
PageIndicatorLayout.SLIDE 从 0.0.1 开始
PageIndicatorLayout.WARM 从 0.0.1 开始
PageIndicatorLayout.COLOR 从 0.0.1 开始
PageIndicatorLayout.SCALE 从 0.0.1 开始
PageIndicatorLayout.DROP 从 0.0.1 开始

完整示例代码

以下是一个完整的示例代码,展示如何使用 flutter_page_indicator 插件:

import 'package:flutter/material.dart';
import 'package:flutter_page_indicator/flutter_page_indicator.dart';
import 'package:transformer_page_view/transformer_page_view.dart';

void main() => runApp(new MyApp());

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return new MaterialApp(
      title: 'Flutter Demo',
      theme: new ThemeData(primarySwatch: Colors.blue),
      home: new MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key key, this.title}) : super(key: key);

  final String title;

  [@override](/user/override)
  _MyHomePageState createState() => new _MyHomePageState();
}

class RadioGroup extends StatefulWidget {
  final List<String> titles;
  final ValueChanged<int> onIndexChanged;

  const RadioGroup({Key key, this.titles, this.onIndexChanged}) : super(key: key);

  [@override](/user/override)
  State<StatefulWidget> createState() {
    return new _RadioGroupState();
  }
}

class _RadioGroupState extends State<RadioGroup> {
  int _index = 1;

  [@override](/user/override)
  Widget build(BuildContext context) {
    List<Widget> list = [];
    for (int i = 0; i < widget.titles.length; ++i) {
      list.add(((String title, int index) {
        return new Row(
          mainAxisSize: MainAxisSize.min,
          children: <Widget>[
            new Radio<int>(
                value: index,
                groupValue: _index,
                onChanged: (int index) {
                  setState(() {
                    _index = index;
                    widget.onIndexChanged(_index);
                  });
                }),
            new Text(title)
          ],
        );
      })(widget.titles[i], i));
    }

    return new Wrap(
      children: list,
    );
  }
}

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

  double size = 20.0;
  double activeSize = 30.0;

  PageController controller;

  PageIndicatorLayout layout = PageIndicatorLayout.SLIDE;

  List<PageIndicatorLayout> layouts = PageIndicatorLayout.values;

  bool loop = false;

  [@override](/user/override)
  void initState() {
    controller = new PageController();
    super.initState();
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    var children = <Widget>[
      new Container(color: Colors.red),
      new Container(color: Colors.green),
      new Container(color: Colors.blueAccent),
      new Container(color: Colors.grey)
    ];

    return new Scaffold(
        appBar: new AppBar(
          title: new Text(widget.title),
        ),
        body: new Column(
          children: <Widget>[
            new Row(
              children: <Widget>[
                new Checkbox(
                    value: loop,
                    onChanged: (bool value) {
                      setState(() {
                        if (value) {
                          controller = new TransformerPageController(
                              itemCount: 4,
                              loop: true);
                        } else {
                          controller = new PageController(initialPage: 0);
                        }
                        loop = value;
                      });
                    }),
                new Text("loop"),
              ],
            ),
            new RadioGroup(
              titles: layouts.map((s) {
                var str = s.toString();
                return str.substring(str.indexOf(".") + 1);
              }).toList(),
              onIndexChanged: (int index) {
                setState(() {
                  _index = index;
                  layout = layouts[index];
                });
              },
            ),
            new Expanded(
                child: new Stack(
              children: <Widget>[
                loop
                    ? new TransformerPageView.children(
                        children: children,
                        pageController: controller,
                      )
                    : new PageView(
                        controller: controller,
                        children: children,
                      ),
                new Align(
                  alignment: Alignment.bottomCenter,
                  child: new Padding(
                    padding: new EdgeInsets.only(bottom: 20.0),
                    child: new PageIndicator(
                      layout: layout,
                      size: size,
                      activeSize: activeSize,
                      controller: controller,
                      space: 5.0,
                      count: 4,
                    ),
                  ),
                )
              ],
            ))
          ],
        ));
  }
}
1 回复

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


flutter_page_indicator 是一个用于在 Flutter 应用中显示页面指示器的插件。它通常与 PageView 结合使用,以指示当前显示的页面。以下是如何使用 flutter_page_indicator 插件的步骤:

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  flutter_page_indicator: ^0.0.3

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

2. 导入包

在你的 Dart 文件中导入 flutter_page_indicator 包:

import 'package:flutter_page_indicator/flutter_page_indicator.dart';

3. 创建 PageView 和 PageIndicator

接下来,你可以创建一个 PageView 和一个 PageIndicator 来显示页面指示器。

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

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

class _PageIndicatorExampleState extends State<PageIndicatorExample> {
  final PageController _pageController = PageController();
  final int _pageCount = 5;

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Page Indicator Example'),
      ),
      body: Column(
        children: [
          Expanded(
            child: PageView(
              controller: _pageController,
              children: List.generate(
                _pageCount,
                (index) => Center(
                  child: Text('Page ${index + 1}'),
                ),
              ),
            ),
          ),
          Padding(
            padding: const EdgeInsets.all(8.0),
            child: PageIndicator(
              layout: PageIndicatorLayout.SLIDE,
              size: 10.0,
              activeSize: 12.0,
              controller: _pageController,
              space: 5.0,
              count: _pageCount,
              color: Colors.grey,
              activeColor: Colors.blue,
            ),
          ),
        ],
      ),
    );
  }
}

4. 运行应用

现在你可以运行你的应用,并看到 PageViewPageIndicator 一起工作。当你滑动页面时,页面指示器会相应地更新。

5. 自定义 PageIndicator

PageIndicator 提供了多种自定义选项,例如:

  • layout: 指示器的布局方式,如 PageIndicatorLayout.SLIDEPageIndicatorLayout.WARM 等。
  • size: 指示器的大小。
  • activeSize: 当前活动页面的指示器大小。
  • color: 指示器的默认颜色。
  • activeColor: 当前活动页面的指示器颜色。
  • space: 指示器之间的间距。

你可以根据需要调整这些参数来定制你的页面指示器。

6. 处理页面切换

如果你需要在页面切换时执行某些操作,可以使用 PageControlleraddListener 方法来监听页面变化:

[@override](/user/override)
void initState() {
  super.initState();
  _pageController.addListener(() {
    // 处理页面切换逻辑
  });
}

[@override](/user/override)
void dispose() {
  _pageController.dispose();
  super.dispose();
}

7. 完整示例

以下是一个完整的示例,展示了如何使用 flutter_page_indicator

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

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: PageIndicatorExample(),
    );
  }
}

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

class _PageIndicatorExampleState extends State<PageIndicatorExample> {
  final PageController _pageController = PageController();
  final int _pageCount = 5;

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Page Indicator Example'),
      ),
      body: Column(
        children: [
          Expanded(
            child: PageView(
              controller: _pageController,
              children: List.generate(
                _pageCount,
                (index) => Center(
                  child: Text('Page ${index + 1}'),
                ),
              ),
            ),
          ),
          Padding(
            padding: const EdgeInsets.all(8.0),
            child: PageIndicator(
              layout: PageIndicatorLayout.SLIDE,
              size: 10.0,
              activeSize: 12.0,
              controller: _pageController,
              space: 5.0,
              count: _pageCount,
              color: Colors.grey,
              activeColor: Colors.blue,
            ),
          ),
        ],
      ),
    );
  }
}
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!