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

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

A small widget to implement breadcrumbs into a flutter app

功能特性

  • 可以传入路径来查看
  • 自定义文本、分隔符和选中文本样式
  • 设置 maxLines
  • 设置 overflow
  • 默认采用常见格式

使用方法

最小化需求

// 创建面包屑列表
List<Breadcrumb> breadcrumbItems = 'example/with/no/parameters'.split('/').map(
        (s) => Breadcrumb(
          label: s, // 每个面包屑的标签
          path: s,  // 每个面包屑的路径
        ),
      ).toList();

// 使用 Breadcrumbs 小部件
final breadcrumbs = Breadcrumbs(
  breadcrumbs: breadcrumbItems, // 传递面包屑列表
  onNavigate: (path) => _navigate(context, path), // 点击面包屑时触发的回调函数
);

完整示例

以下是一个完整的示例代码,展示了如何在 Flutter 应用中使用 simple_breadcrumbs 插件。

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

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

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(),
      darkTheme: ThemeData.dark(),
      themeMode: ThemeMode.system,
      home: const _BreadcrumbsView(), // 主页面
    );
  }
}

class _BreadcrumbsView extends StatelessWidget {
  const _BreadcrumbsView();

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      body: ListView(
        children: [
          // 第一个面包屑示例
          Breadcrumbs(
            breadcrumbs: 'example/with/no/parameters'.split('/').map(
                  (s) => Breadcrumb(
                    label: s, // 每个面包屑的标签
                    path: s,  // 每个面包屑的路径
                  ),
                ).toList(),
            onNavigate: (path) => _navigate(context, path), // 点击面包屑时触发的回调函数
          ),
          // 第二个面包屑示例,带更多自定义参数
          Breadcrumbs(
            breadcrumbs: 'example/with/all/parameters'.split('/').map(
                  (s) => Breadcrumb(
                    label: s, // 每个面包屑的标签
                    path: s,  // 每个面包屑的路径
                  ),
                ).toList(),
            onNavigate: (path) => _navigate(context, path), // 点击面包屑时触发的回调函数
            divider: ' > ', // 自定义分隔符
            textStyle: const TextStyle( // 文本样式
              color: Colors.red,
            ),
            dividerStyle: const TextStyle( // 分隔符样式
              fontWeight: FontWeight.w200,
              color: Colors.yellow,
              fontSize: 12,
            ),
            selectedStyle: const TextStyle( // 当前选中面包屑的样式
              fontWeight: FontWeight.bold,
              color: Colors.red,
            ),
          ),
        ],
      ),
    );
  }

  // 导航到新的页面
  Future<void> _navigate(BuildContext context, String path) => Navigator.push(
        context,
        MaterialPageRoute<void>(
          builder: (BuildContext context) => Scaffold(
            appBar: AppBar(title: Text(path)), // 页面标题为路径
            body: Center(
              child: TextButton(
                child: const Text('pop'), // 按钮文字
                onPressed: () => Navigator.pop(context), // 返回上一页
              ),
            ),
          ),
        ),
      );
}

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

1 回复

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


simple_breadcrumbs 是一个用于 Flutter 的面包屑导航插件,它可以帮助你在应用中实现面包屑导航功能。面包屑导航通常用于显示用户当前位置的路径,特别是在有层级结构的应用中。

安装

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

dependencies:
  flutter:
    sdk: flutter
  simple_breadcrumbs: ^1.0.0  # 请检查最新版本

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

基本用法

下面是一个简单的示例,展示如何使用 simple_breadcrumbs 插件来实现面包屑导航。

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

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

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

class BreadCrumbExample extends StatefulWidget {
  @override
  _BreadCrumbExampleState createState() => _BreadCrumbExampleState();
}

class _BreadCrumbExampleState extends State<BreadCrumbExample> {
  List<String> _breadcrumbs = ['Home'];

  void _addCrumb(String crumb) {
    setState(() {
      _breadcrumbs.add(crumb);
    });
  }

  void _removeCrumb() {
    setState(() {
      if (_breadcrumbs.length > 1) {
        _breadcrumbs.removeLast();
      }
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Breadcrumbs Example'),
      ),
      body: Column(
        children: [
          SimpleBreadcrumbs(
            crumbs: _breadcrumbs,
            onCrumbTap: (index) {
              setState(() {
                _breadcrumbs = _breadcrumbs.sublist(0, index + 1);
              });
            },
          ),
          Expanded(
            child: Center(
              child: Column(
                mainAxisAlignment: MainAxisAlignment.center,
                children: [
                  Text('Current Page: ${_breadcrumbs.last}'),
                  ElevatedButton(
                    onPressed: () => _addCrumb('Page ${_breadcrumbs.length}'),
                    child: Text('Go to Next Page'),
                  ),
                  if (_breadcrumbs.length > 1)
                    ElevatedButton(
                      onPressed: _removeCrumb,
                      child: Text('Go Back'),
                    ),
                ],
              ),
            ),
          ),
        ],
      ),
    );
  }
}

代码解释

  1. Breadcrumb List: _breadcrumbs 是一个列表,用于存储当前的面包屑路径。初始值为 ['Home']

  2. Add Crumb: _addCrumb 方法用于向面包屑列表中添加一个新的路径。

  3. Remove Crumb: _removeCrumb 方法用于移除面包屑列表中的最后一个路径。

  4. SimpleBreadcrumbs Widget: SimpleBreadcrumbssimple_breadcrumbs 插件提供的组件,用于显示面包屑导航。crumbs 属性用于传递面包屑列表,onCrumbTap 是一个回调函数,当用户点击某个面包屑时触发。

  5. Navigation Buttons: 页面中有两个按钮,一个用于导航到下一个页面(添加新的面包屑),另一个用于返回到上一个页面(移除最后一个面包屑)。

自定义样式

你可以通过 SimpleBreadcrumbsseparatortextStylecrumbStyle 等属性来自定义面包屑导航的样式。

SimpleBreadcrumbs(
  crumbs: _breadcrumbs,
  onCrumbTap: (index) {
    setState(() {
      _breadcrumbs = _breadcrumbs.sublist(0, index + 1);
    });
  },
  separator: Icon(Icons.chevron_right, size: 16),
  textStyle: TextStyle(fontSize: 16, color: Colors.blue),
  crumbStyle: TextStyle(fontSize: 16, color: Colors.black),
),
回到顶部