Flutter iOS风格分页控制器插件cupertino_page_controller的使用

Flutter iOS风格分页控制器插件cupertino_page_controller的使用

演示预览 #

无限索引 5个索引 2个索引

cupertino_page_controller 包允许你显示一个控制器以检查列表中的当前索引。

功能 #

  • 显示列表索引
  • 可选地添加点击功能并重定向到页面
  • 选择深色或浅色模式

⭐️ 如果你喜欢这个项目,请给它点个星,增加这个包的SEO!⭐️

安装

点击这里: Pub dev

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

dependencies:
    cupertino_page_controller: ^0.0.1

然后运行 flutter pub get 来获取该包。

用法

  • 导入iPhone包:import 'package:cupertino_page_controller/cupertino_page_controller.dart';

cupertino_page_controller 颜色(可选)

  • brightness: Brightness (可选) 以选择控件的主题
brightness: Brightness.dark,

列表长度

  • length: int (必填) 以指定列表的长度
length: 10,

其他属性

  • name: String (可选) 控件的标题
  • icon: IconData (可选) 左侧的图标
  • function: Function (可选) 当点击控件时执行的路由操作
name: "搜索",
icon: CupertinoIcons.search,
function: () {
    // 做一些事情,比如路由...
},

跟踪索引动画

添加这个变量,当切换到列表中的新元素时,这个变量会改变,这将允许跟踪当前处于白色状态的点。另外两个变量 Timer _timerbool isSelect 将允许创建自定义动画过渡从“搜索模式”到点控制器:(必填)

current: current,
isSelect: isSelect,
timer: _timer,

❤️

示例代码

// ignore_for_file: library_private_types_in_public_api

import 'dart:async';
import 'package:carousel_slider/carousel_slider.dart';
import 'package:cupertino_page_controller/cupertino_page_controller.dart';
import 'package:example/profile.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';

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

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    return const MaterialApp(
      debugShowCheckedModeBanner: false,
      home: HomePage(),
    );
  }
}

class HomePage extends StatefulWidget {
  const HomePage({super.key});

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

class _HomePageState extends State<HomePage> {
  int current = 0;
  Timer? _timer;
  bool isSelect = false;
  final CarouselController _carouselController = CarouselController();
  int length = 6;

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: Colors.black,
      body: Column(
        mainAxisAlignment: MainAxisAlignment.center,
        crossAxisAlignment: CrossAxisAlignment.center,
        children: [
          Stack(
            alignment: Alignment.bottomCenter,
            children: [
              Image.asset(
                "assets/test.jpg",
                fit: BoxFit.cover,
                height: MediaQuery.of(context).size.height,
                width: MediaQuery.of(context).size.width,
              ),
              SizedBox(
                height: MediaQuery.of(context).size.height,
                width: MediaQuery.of(context).size.width,
                child: CarouselSlider.builder(
                  carouselController: _carouselController,
                  itemCount: length,
                  itemBuilder: (context, index, realIndex) {
                    return Text(
                      index.toString(),
                      style: const TextStyle(color: Colors.white, fontSize: 200),
                    );
                  },
                  options: CarouselOptions(
                    enlargeCenterPage: false,
                    enableInfiniteScroll: false,
                    onPageChanged: (index, reason) {
                      HapticFeedback.heavyImpact();
                      setState(() {
                        current = index;
                        isSelect = true;
                        _timer?.cancel();
                        _timer = Timer(const Duration(milliseconds: 1500), () {
                          setState(() {
                            isSelect = false;
                          });
                        });
                      });
                    },
                  ),
                ),
              ),
              Padding(
                padding: EdgeInsets.only(bottom: 70),
                child: CupertinoPageControl(
                  length: length,
                  current: current,
                  name: "搜索",
                  isSelect: isSelect,
                  timer: _timer,
                  icon: CupertinoIcons.search,
                  function: () {
                    Navigator.push(
                      context,
                      CupertinoPageRoute(builder: (context) => ProfilePage()),
                    );
                  },
                  brightness: Brightness.dark,
                ),
              )
            ],
          ),
        ],
      ),
    );
  }
}

更多关于Flutter iOS风格分页控制器插件cupertino_page_controller的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter iOS风格分页控制器插件cupertino_page_controller的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,下面是一个关于如何使用 cupertino_page_controller 插件(注意:实际上 Flutter 官方 SDK 已经包含了 Cupertino 风格的分页控制器,无需额外插件)的示例代码。这个示例将展示如何在 Flutter 应用中使用 CupertinoPageScaffoldCupertinoTabScaffold 来创建一个 iOS 风格的分页控制器。

首先,确保你的 pubspec.yaml 文件中已经包含了 Flutter SDK 的依赖项(对于 Cupertino 组件,这是默认的,不需要额外添加):

dependencies:
  flutter:
    sdk: flutter

然后,你可以创建一个包含 Cupertino 风格分页控制器的页面。以下是一个完整的示例:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return CupertinoApp(
      title: 'Cupertino Page Controller Demo',
      theme: CupertinoThemeData(
        brightness: Brightness.light,
      ),
      home: CupertinoPageScaffold(
        navigationBar: CupertinoNavigationBar(
          middle: Text('Cupertino Page Controller'),
        ),
        child: CupertinoTabScaffold(
          tabBar: CupertinoTabBar(
            items: <BottomNavigationBarItem>[
              BottomNavigationBarItem(
                icon: Icon(CupertinoIcons.home),
                title: Text('Home'),
              ),
              BottomNavigationBarItem(
                icon: Icon(CupertinoIcons.search),
                title: Text('Search'),
              ),
              BottomNavigationBarItem(
                icon: Icon(CupertinoIcons.profile_circled),
                title: Text('Profile'),
              ),
            ],
          ),
          tabBuilder: (BuildContext context, int index) {
            switch (index) {
              case 0:
                return CupertinoTabView(
                  builder: (BuildContext context) {
                    return Center(child: Text('Home Page'));
                  },
                );
              case 1:
                return CupertinoTabView(
                  builder: (BuildContext context) {
                    return Center(child: Text('Search Page'));
                  },
                );
              case 2:
                return CupertinoTabView(
                  builder: (BuildContext context) {
                    return Center(child: Text('Profile Page'));
                  },
                );
              default:
                return CupertinoTabView(
                  builder: (BuildContext context) {
                    return Center(child: Text('Unknown Page'));
                  },
                );
            }
          },
        ),
      ),
    );
  }
}

代码说明:

  1. CupertinoApp:

    • 这是应用的主入口,使用 Cupertino 风格的主题。
  2. CupertinoPageScaffold:

    • 提供了 iOS 风格的页面结构,包括导航栏。
  3. CupertinoNavigationBar:

    • iOS 风格的导航栏,用于显示标题。
  4. CupertinoTabScaffold:

    • iOS 风格的分页控制器,包含 CupertinoTabBar 和分页内容。
  5. CupertinoTabBar:

    • 分页控制器底部的标签栏,包含多个标签项。
  6. CupertinoTabView:

    • 每个标签页的内容视图,通过 tabBuilder 函数构建。

这个示例展示了如何使用 Flutter 的 Cupertino 组件创建一个简单的 iOS 风格分页控制器应用。你可以根据需要进一步自定义和扩展这个示例。

回到顶部