Flutter响应式导航栏插件responsive_nav_barx的使用

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

Flutter响应式导航栏插件responsive_nav_barx的使用

本插件为Flutter提供了适应不同设备类型的响应式导航栏。在移动设备上,导航栏位于底部;在平板设备上,导航栏位于侧面;在Web应用上,导航栏位于顶部。该插件还集成了GoRouter来管理导航。

特性

  • 针对不同设备类型的自适应导航栏
  • 集成GoRouter进行导航管理
  • 响应式设计

开始使用

要开始使用此项目,请克隆仓库并运行以下命令:

flutter pub get
flutter run

依赖项

  • Flutter
  • GoRouter

许可证

该项目采用MIT许可证。


完整示例代码

以下是完整的示例代码,展示了如何在Flutter应用中使用responsive_nav_barx插件和GoRouter进行导航管理。

// `go_router`路由配置
class MyApp extends StatelessWidget {
  const MyApp({super.key});

  [@override](/user/override)
  Widget build(BuildContext context) {
    // 使用MaterialApp.router初始化应用
    return MaterialApp.router(
      title: 'MyApp',
      theme: baseTheme(brightness: Brightness.light),
      darkTheme: baseTheme(brightness: Brightness.dark),
      themeMode: ThemeMode.system,
      routerConfig: router(context),
    );
  }

  // 定义路由配置
  GoRouter router(BuildContext context) {
    // 定义路由列表
    List<RouteBase> routes = [
      // 登录页面路由
      GoRoute(
        path: '/${LoginView.path}',
        builder: (_, __) => const LoginView(),
      ),
      // 状态分支路由,用于处理多个导航壳
      StatefulShellRoute.indexedStack(
        branches: [
          // 导航壳分支
          StatefulShellBranch(
            routes: [
              // 主页路由
              GoRoute(
                path: '/${Home.path}',
                builder: (_, __) => const Home(),
              ),
            ],
          ),
          StatefulShellBranch(
            routes: [
              // 个人资料页面路由
              GoRoute(
                path: '/${Profile.path}',
                builder: (_, __) => const Profile(),
              ),
            ],
          ),
          StatefulShellBranch(
            routes: [
              // 设置页面路由
              GoRoute(
                path: '/${Settings.path}',
                builder: (_, __) => const Settings(),
              ),
            ],
          ),
        ],
        // 构建响应式导航栏
        builder: (_, __, navigationShell) => ResponsiveNavigationBar(
          navigationShell: navigationShell,
          barButtons: [
            // 导航栏按钮配置
            BarItem(icon: const Icon(Icons.home), label: 'Home'),
            BarItem(icon: const Icon(Icons.person), label: 'Profile'),
            BarItem(icon: const Icon(Icons.settings), label: 'Settings')
          ],
        ),
      ),
    ];

    // 获取登录视图模型
    final viewModel = context.watch<LoginViewModel>();

    // 返回GoRouter实例
    return GoRouter(
      initialLocation: '/${LoginView.path}',
      routes: routes,
      refreshListenable: viewModel,
      // 重定向逻辑
      redirect: (context, state) {
        if (state.uri.toString() == '/${LoginView.path}' && viewModel.loggedIn) {
          return '/${Home.path}';
        } else if (viewModel.loggedIn == false) {
          return '/${LoginView.path}';
        }
        return null;
      },
    );
  }
}

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

1 回复

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


当然,下面是一个关于如何使用 responsive_nav_barx 插件在 Flutter 中实现响应式导航栏的示例代码。这个插件允许你根据设备的屏幕尺寸和方向来动态调整导航栏的布局。

首先,你需要在你的 pubspec.yaml 文件中添加这个插件的依赖项:

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

然后,在你的 Dart 文件中,你可以按照以下方式使用这个插件:

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

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

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

class ResponsiveNavBarDemo extends StatefulWidget {
  @override
  _ResponsiveNavBarDemoState createState() => _ResponsiveNavBarDemoState();
}

class _ResponsiveNavBarDemoState extends State<ResponsiveNavBarDemo> {
  int selectedIndex = 0;

  final List<String> items = ['Home', 'Search', 'Profile', 'Settings'];

  void onItemSelected(int index) {
    setState(() {
      selectedIndex = index;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Responsive NavBar Demo'),
      ),
      body: Center(
        child: Text(items[selectedIndex]),
      ),
      bottomNavigationBar: ResponsiveNavBarX(
        items: items,
        onItemSelected: onItemSelected,
        selectedIndex: selectedIndex,
        backgroundColor: Colors.blue,
        unselectedItemColor: Colors.white,
        selectedItemColor: Colors.white,
        iconSize: 24,
        activeIconSize: 28,
        elevation: 8,
        breakPoint: 600,  // 自定义断点,根据屏幕尺寸调整
      ),
    );
  }
}

在这个示例中:

  1. 我们首先在 pubspec.yaml 文件中添加了 responsive_nav_barx 依赖项。
  2. 然后,我们创建了一个简单的 Flutter 应用,其中包含一个主页面 ResponsiveNavBarDemo
  3. ResponsiveNavBarDemo 中,我们定义了一个包含四个项目的列表 items,以及一个 selectedIndex 变量来跟踪当前选中的项目。
  4. onItemSelected 方法更新 selectedIndex,并在用户选择不同项目时触发。
  5. ScaffoldbottomNavigationBar 中,我们使用了 ResponsiveNavBarX 组件,并传递了相关的参数,如 itemsonItemSelectedselectedIndex、颜色、图标大小、断点等。

这个示例展示了如何使用 responsive_nav_barx 插件来创建一个响应式的底部导航栏,并根据屏幕尺寸动态调整其布局。你可以根据需要进一步自定义和扩展这个示例。

回到顶部