Flutter面包屑导航插件flutterap_breadcrumb的使用

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

Flutter面包屑导航插件flutterap_breadcrumb的使用

flutterap_breadcrumb

这个包是基于flutterap管理面板扩展的。
Flutterap是最开发者友好的、高度可定制的基于Flutter的管理仪表板模板。
它包含了许多使开发更容易的功能。

购买咖啡支持我们

联系我们

特性

基于flutter导航的面包屑小部件,具有不同的样式。
由于面包屑在Flutter程序中,尤其是在桌面端(没有后退按钮)中具有特殊的重要性,因此Flutterap_breadcrumb是基于flutter的导航系统设计的,并且使用了AppNavigatorObservers在MaterialApp中。
Flutterap_breadcrumb支持从右向左(RTL)和从左到右(LTR)的本地化,并且你可以通过点击面包屑组件来管理每个页面的存在感。
Flutterap_breadcrumb提供了不同的样式,在不同平台上的形状案例图像如下所示。

flutterap_breadcrumb在移动设备上

flutterap_breadcrumb在网页上

flutterap_breadcrumb在桌面上

开始使用

首先,navigatorObservers: [AppNavigatorObserver()]应该添加到主MaterialApp中:

MaterialApp(
  debugShowCheckedModeBanner: false,
  navigatorObservers: [AppNavigatorObserver()], // 添加AppNavigatorObserver作为观察者
  ...
)

使用示例

以下是一个简单的例子,展示了如何使用flutterap_breadcrumb插件:

import 'package:flutter/material.dart';
import 'package:flutterap_breadcrumb/components/fx_app_navigator_observer.dart';
import 'package:flutterap_breadcrumb/fx_flutterap_breadcrumb.dart';

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

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Directionality(
      textDirection: TextDirection.rtl, // 设置文本方向为从右向左
      child: MaterialApp(
        debugShowCheckedModeBanner: false,
        navigatorObservers: [AppNavigatorObserver()], // 添加AppNavigatorObserver作为观察者
        // 定义初始路由和其他两个用于测试flutterap_breadcrumb的路由
        routes: {
          '/': (context) => const InitialPage(), // 初始页面
          '/second-page': (context) => const SecondPage(), // 第二个页面
          '/third-page': (context) => const ThirdPage(), // 第三个页面
        },
      ),
    );
  }
}

// 定义InitialPage,该页面使用flutterap_breadcrumb来管理每个页面的存在感,并有一个按钮来导航到SecondPage
class InitialPage extends StatelessWidget {
  const InitialPage({Key? key}) : super(key: key);

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text("Flutterap Breadcrumb"), // 设置AppBar标题
      ),
      body: Column(
        mainAxisAlignment: MainAxisAlignment.start, // 主轴对齐方式为从顶部开始
        crossAxisAlignment: CrossAxisAlignment.start, // 次轴对齐方式为从左边开始
        children: [
          Padding(
            padding: const EdgeInsets.symmetric(horizontal: 8.0, vertical: 20), // 设置内边距
            child: FxBreadCrumbNavigator.shaped( // 使用shaped样式的FxBreadCrumbNavigator
              firstRoute: "Flutterap Breadcrumb", // 设置第一个路由名称
              breadButtonType: BreadButtonType.shaped, // 设置面包屑按钮类型为shaped
            ),
          ),
          TextButton( // 定义一个TextButton用于导航到第二个页面
            onPressed: () {
              Navigator.pushNamed(context, SecondPage.routeName); // 导航到SecondPage
            },
            child: const Text('Navigate to second page'), // 设置按钮文字
          ),
        ],
      ),
    );
  }
}

// 定义SecondPage,该页面使用flutterap_breadcrumb来管理每个页面的存在感,并有一个按钮来导航到ThirdPage
class SecondPage extends StatelessWidget {
  static const routeName = '/second-page'; // 定义路由名称

  const SecondPage({Key? key}) : super(key: key);

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text("Second page"), // 设置AppBar标题
      ),
      body: Column(
        mainAxisAlignment: MainAxisAlignment.start, // 主轴对齐方式为从顶部开始
        crossAxisAlignment: CrossAxisAlignment.start, // 次轴对齐方式为从左边开始
        children: [
          Padding(
            padding: const EdgeInsets.symmetric(horizontal: 8.0, vertical: 20), // 设置内边距
            child: FxBreadCrumbNavigator.shaped( // 使用shaped样式的FxBreadCrumbNavigator
              firstRoute: "Flutterap Breadcrumb", // 设置第一个路由名称
              breadButtonType: BreadButtonType.shaped, // 设置面包屑按钮类型为shaped
            ),
          ),
          TextButton( // 定义一个TextButton用于导航到第三个页面
            onPressed: () {
              Navigator.pushNamed(context, ThirdPage.routeName); // 导航到ThirdPage
            },
            child: const Text('Navigate to third page'), // 设置按钮文字
          ),
        ],
      ),
    );
  }
}

// 定义ThirdPage,该页面使用flutterap_breadcrumb来管理每个页面的存在感
class ThirdPage extends StatelessWidget {
  static const routeName = '/third-page'; // 定义路由名称

  const ThirdPage({Key? key}) : super(key: key);

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text("Third page"), // 设置AppBar标题
      ),
      body: Column(
        mainAxisAlignment: MainAxisAlignment.start, // 主轴对齐方式为从顶部开始
        crossAxisAlignment: CrossAxisAlignment.start, // 次轴对齐方式为从左边开始
        children: [
          Padding(
            padding: const EdgeInsets.symmetric(horizontal: 8.0, vertical: 20), // 设置内边距
            child: FxBreadCrumbNavigator.shaped( // 使用shaped样式的FxBreadCrumbNavigator
              firstRoute: "Flutterap Breadcrumb", // 设置第一个路由名称
              breadButtonType: BreadButtonType.shaped, // 设置面包屑按钮类型为shaped
            ),
          ),
        ],
      ),
    );
  }
}

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

1 回复

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


当然,以下是如何在Flutter项目中使用flutterap_breadcrumb插件来实现面包屑导航的一个示例代码案例。

首先,确保你已经在pubspec.yaml文件中添加了flutterap_breadcrumb依赖:

dependencies:
  flutter:
    sdk: flutter
  flutterap_breadcrumb: ^最新版本号  # 请替换为实际最新版本号

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

接下来,你可以按照以下步骤在Flutter应用中实现面包屑导航:

  1. 导入必要的包
import 'package:flutter/material.dart';
import 'package:flutterap_breadcrumb/flutterap_breadcrumb.dart';
  1. 创建面包屑项数据
List<BreadcrumbItem> breadcrumbItems = [
  BreadcrumbItem(title: '首页', onTap: () {
    // 导航到首页的逻辑
    Navigator.popUntil(context, (route) => route.isFirst);
  }),
  BreadcrumbItem(title: '分类', onTap: () {
    // 导航到分类页面的逻辑
    // 例如:Navigator.pushNamed(context, '/categories');
  }),
  BreadcrumbItem(title: '子分类', onTap: () {
    // 这里可以不做任何操作,因为已经是最后一个页面
  }),
];
  1. 在UI中使用Breadcrumb组件
void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: Scaffold(
        appBar: AppBar(
          title: Text('面包屑导航示例'),
        ),
        body: Padding(
          padding: const EdgeInsets.all(16.0),
          child: Breadcrumb(
            items: breadcrumbItems,
            separator: Icon(Icons.arrow_forward_ios, color: Colors.grey),
            onTap: (index) {
              // 可以在这里处理点击事件,但通常已经在BreadcrumbItem中处理了
            },
          ),
        ),
      ),
    );
  }
}

在这个示例中,我们创建了一个包含三个面包屑项的列表,每个项都有一个标题和一个点击事件处理函数。Breadcrumb组件接收这些项,并显示它们,用户点击某个项时会触发相应的导航逻辑。

注意,这里的导航逻辑(如Navigator.popUntilNavigator.pushNamed)需要根据你实际的应用路由结构进行调整。BreadcrumbItemonTap回调中,我们直接导航到了应用的根页面或进行了其他逻辑处理,但在实际应用中,你可能需要根据当前页面栈的情况来决定如何导航。

此外,separator属性用于自定义面包屑项之间的分隔符,这里使用了一个箭头图标。你可以根据需要自定义分隔符的样式。

回到顶部