Flutter侧边栏导航插件cupertino_sidebar的使用

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

Flutter侧边栏导航插件cupertino_sidebar的使用

cupertino_sidebar 是一个为Flutter应用带来iOS风格侧边栏和浮动标签栏的插件,提供了一种流畅、原生的iPadOS风格导航体验。

特性

Cupertino Sidebar

  • 提供了iOS风格的侧边栏用于在应用中进行导航。
  • 支持可扩展的部分,允许对目的地进行分组。

Cupertino Floating Tab Bar

  • 提供了iPadOS风格的浮动标签栏,也可以用于应用中的导航。

使用方法

Sidebar 示例

CupertinoSidebar 的使用与Flutter的 NavigationDrawer 类似。它接受一个目的地列表、选定的索引以及一个当目的地被点击时触发的回调函数。

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

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

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

  @override
  Widget build(BuildContext context) {
    return const CupertinoApp(
      home: SidebarExample(),
    );
  }
}

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

  @override
  State<SidebarExample> createState() => _SidebarExampleState();
}

class _SidebarExampleState extends State<SidebarExample> {
  int _selectedIndex = 0;
  final List<Widget> _pages = [
    Center(child: Text('Home Page')),
    Center(child: Text('Items Page')),
    Center(child: Text('Search Page')),
  ];

  @override
  Widget build(BuildContext context) {
    return CupertinoPageScaffold(
      child: Row(
        children: [
          CupertinoSidebar(
            selectedIndex: _selectedIndex,
            onDestinationSelected: (value) {
              setState(() {
                _selectedIndex = value;
              });
            },
            children: [
              SidebarDestination(
                icon: Icon(CupertinoIcons.home),
                label: Text('Home'),
              ),
              SidebarDestination(
                icon: Icon(CupertinoIcons.person),
                label: Text('Items'),
              ),
              SidebarDestination(
                icon: Icon(CupertinoIcons.search),
                label: Text('Search'),
              ),
            ],
          ),
          Expanded(
            child: Center(
              child: _pages.elementAt(_selectedIndex),
            ),
          ),
        ],
      ),
    );
  }
}

Floating Tab Bar 示例

CupertinoFloatingTabBar 需要由 TabController 管理,并可以添加标签页并指定一个回调函数。

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return CupertinoApp(
      home: FloatingTabBarExample(),
    );
  }
}

class FloatingTabBarExample extends StatefulWidget {
  @override
  _FloatingTabBarExampleState createState() => _FloatingTabBarExampleState();
}

class _FloatingTabBarExampleState extends State<FloatingTabBarExample> with SingleTickerProviderStateMixin {
  late TabController _tabController;

  @override
  void initState() {
    super.initState();
    _tabController = TabController(length: 3, vsync: this);
  }

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

  @override
  Widget build(BuildContext context) {
    return CupertinoPageScaffold(
      child: Column(
        children: [
          CupertinoFloatingTabBar(
            controller: _tabController,
            tabs: [
              CupertinoFloatingTab(child: Text('Today')),
              CupertinoFloatingTab(child: Text('Library')),
              CupertinoFloatingTab.icon(icon: Icon(CupertinoIcons.search)),
            ],
            onDestinationSelected: (index) {
              // Handle tab selection
            },
          ),
          Expanded(
            child: TabBarView(
              controller: _tabController,
              children: [
                Center(child: Text('Today Content')),
                Center(child: Text('Library Content')),
                Center(child: Text('Search Content')),
              ],
            ),
          ),
        ],
      ),
    );
  }
}

以上示例展示了如何使用 cupertino_sidebar 插件来实现侧边栏和浮动标签栏的基本功能。更多高级用法和完整示例请参考 官方GitHub仓库 中的示例代码。


更多关于Flutter侧边栏导航插件cupertino_sidebar的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter侧边栏导航插件cupertino_sidebar的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,我可以为你提供一个关于如何在Flutter中使用cupertino_sidebar插件来实现侧边栏导航的示例代码。cupertino_sidebar是一个模仿iOS风格的侧边栏导航组件,可以让你在Flutter应用中实现类似iOS的侧边栏菜单效果。

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

dependencies:
  flutter:
    sdk: flutter
  cupertino_sidebar: ^1.0.3  # 请检查最新版本号

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

下面是一个简单的示例代码,展示了如何使用cupertino_sidebar来创建一个带有侧边栏导航的应用:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Cupertino Sidebar Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: CupertinoSidebar(
        // 设置侧边栏的位置,可以是 CupertinoSidebarPosition.left 或 CupertinoSidebarPosition.right
        position: CupertinoSidebarPosition.left,
        // 侧边栏菜单项
        menu: CupertinoSidebarMenu(
          children: [
            CupertinoSidebarItem(
              icon: Icon(Icons.home),
              title: 'Home',
              onPressed: () {
                Navigator.of(context).push(
                  MaterialPageRoute(builder: (context) => HomePage()),
                );
              },
            ),
            CupertinoSidebarItem(
              icon: Icon(Icons.settings),
              title: 'Settings',
              onPressed: () {
                Navigator.of(context).push(
                  MaterialPageRoute(builder: (context) => SettingsPage()),
                );
              },
            ),
            // 你可以添加更多的菜单项
          ],
        ),
        // 主内容区域
        child: HomePage(),
      ),
    );
  }
}

class HomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Home Page'),
      ),
      body: Center(
        child: Text('Welcome to the Home Page!'),
      ),
    );
  }
}

class SettingsPage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Settings Page'),
      ),
      body: Center(
        child: Text('Welcome to the Settings Page!'),
      ),
    );
  }
}

在这个示例中,我们创建了一个包含侧边栏导航的应用。侧边栏菜单项使用CupertinoSidebarItem定义,每个菜单项都有一个图标、标题和一个点击事件处理函数。主内容区域通过child属性设置。

当你点击侧边栏菜单项时,它会使用Navigator将当前页面替换为新的页面(HomePageSettingsPage)。

请注意,cupertino_sidebar可能会随着时间更新,因此建议查阅最新的文档和示例来确保兼容性。如果你遇到任何问题或需要更多功能,请参考插件的官方文档。

回到顶部