Flutter自定义导航栏插件titled_navigation_bar的使用

Flutter 自定义导航栏插件 titled_navigation_bar 的使用

概述

Titled Bottom Navigation Bar 是一个带有平滑动画效果的漂亮、简洁且简单的底部导航栏。此插件高度可定制,详情请参阅以下内容。

预览(默认模式)

预览(带反转模式)

包概述

  • ✅ 可自定义图标颜色
  • ✅ 可自定义指示器颜色
  • ✅ 支持 2 到 5 个项
  • ✅ 反转模式(显示选中的项为图标或标题)
  • ✅ 可定义自定义项背景色
  • ✅ 使用 currentIndex 属性更新导航栏(通过传递选项卡位置)
  • ✅ 更新当前索引时无需调用 setState
  • ✅ 支持 RTL 文本方向(感谢 Victor Uvarov)

入门指南

按照以下步骤使用此库:

添加插件

pubspec.yaml 文件中添加依赖:

dependencies:
  ...
  titled_navigation_bar: ^4.1.0
导入库

在 Dart 文件中导入库:

import 'package:titled_navigation_bar/titled_navigation_bar.dart';
添加组件

Scaffold 中添加 TitledBottomNavigationBar 组件:

bottomNavigationBar: TitledBottomNavigationBar(
  currentIndex: 2, // 用于通过位置更新导航栏
  onTap: (index) {
    print("Selected Index: $index");
  },
  items: [
    TitledNavigationBarItem(title: Text('Home'), icon: Icons.home),
    TitledNavigationBarItem(title: Text('Search'), icon: Icons.search),
    TitledNavigationBarItem(title: Text('Bag'), icon: Icons.card_travel),
    TitledNavigationBarItem(title: Text('Orders'), icon: Icons.shopping_cart),
    TitledNavigationBarItem(title: Text('Profile'), icon: Icons.person_outline),
  ]
)

自定义(可选)

TitledBottomNavigationBar
  • onTap - 当项目被点击时通知,您可以在此函数中获取当前项目的索引。不应为空!
  • items - 您的底部导航栏的项目。使用 TitledNavigationBarItem 类添加项目。不应为空!
  • curve - 用于定义自定义曲线动画。不应为空!
  • reverse - 如果为 true,则选中项的可见小部件将是文本(带有项的标题)。如果为 false,则选中项的可见小部件将是图标。默认为 false
  • activeColor - 活动文本/图标的颜色。默认颜色是您的应用主题的 indicatorColor
  • inactiveColor - 非活动文本/图标的颜色。默认为黑色。
  • indicatorColor - 指示器的颜色。默认颜色是您的应用主题的 indicatorColor
  • currentIndex - 用于通过位置更新导航栏。
  • enableShadow - 用于移除导航栏的阴影。
TitledNavigationBarItem
  • icon - 此项的图标。这是默认状态,如果反转模式未启用。
  • title - 此项的标题。这是默认状态,如果反转模式启用。

完整示例

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

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Titled Bar',
      home: HomePage(),
    );
  }
}

class HomePage extends StatefulWidget {
  [@override](/user/override)
  State createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  final List<TitledNavigationBarItem> items = [
    TitledNavigationBarItem(title: Text('Home'), icon: Icons.home),
    TitledNavigationBarItem(title: Text('Search'), icon: Icons.search),
    TitledNavigationBarItem(title: Text('Bag'), icon: Icons.card_travel),
    TitledNavigationBarItem(title: Text('Orders'), icon: Icons.shopping_cart),
    TitledNavigationBarItem(title: Text('Profile'), icon: Icons.person_outline),
  ];

  bool navBarMode = false;

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("Titled Bottom Bar"),
      ),
      body: Center(
        child: Column(
          mainAxisSize: MainAxisSize.min,
          children: <Widget>[
            Text("Reversed mode:"),
            Switch(
              value: navBarMode,
              onChanged: (v) {
                setState(() => navBarMode = v);
              },
            ),
          ],
        ),
      ),
      bottomNavigationBar: TitledBottomNavigationBar(
        onTap: (index) => print("Selected Index: $index"),
        reverse: navBarMode,
        curve: Curves.easeInBack,
        items: items,
        activeColor: Colors.red,
        inactiveColor: Colors.blueGrey,
      ),
    );
  }
}

更多关于Flutter自定义导航栏插件titled_navigation_bar的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

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


titled_navigation_bar 是一个用于 Flutter 的自定义导航栏插件,它允许你创建一个带有标题和图标的底部导航栏。这个插件的使用非常简单,下面是一个基本的示例来展示如何使用它。

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  titled_navigation_bar: ^1.0.0  # 请使用最新版本

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

2. 基本使用

接下来,你可以在你的 Flutter 应用中使用 TitledBottomNavigationBar 组件。以下是一个简单的示例:

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

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

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

class HomeScreen extends StatefulWidget {
  @override
  _HomeScreenState createState() => _HomeScreenState();
}

class _HomeScreenState extends State<HomeScreen> {
  int _currentIndex = 0;

  final List<Widget> _pages = [
    Center(child: Text('Home Page')),
    Center(child: Text('Search Page')),
    Center(child: Text('Profile Page')),
  ];

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Titled Navigation Bar Example'),
      ),
      body: _pages[_currentIndex],
      bottomNavigationBar: TitledBottomNavigationBar(
        currentIndex: _currentIndex, // 当前选中的索引
        onTap: (index) {
          setState(() {
            _currentIndex = index;
          });
        },
        items: [
          TitledNavigationBarItem(title: 'Home', icon: Icons.home),
          TitledNavigationBarItem(title: 'Search', icon: Icons.search),
          TitledNavigationBarItem(title: 'Profile', icon: Icons.person),
        ],
      ),
    );
  }
}

3. 参数说明

TitledBottomNavigationBar 提供了多个参数来定制导航栏的外观和行为:

  • currentIndex: 当前选中的导航栏项索引。
  • onTap: 当用户点击导航栏项时触发的回调函数,参数为被点击项的索引。
  • items: 导航栏项的列表,每个项由 TitledNavigationBarItem 定义,包含 titleicon
  • activeColor: 选中项的颜色,默认为主题的主色。
  • inactiveColor: 未选中项的颜色,默认为灰色。
  • indicatorColor: 选中项的指示器颜色,默认为 activeColor
  • curve: 动画曲线,默认为 Curves.easeOutQuad
  • duration: 动画持续时间,默认为 Duration(milliseconds: 300)

4. 自定义样式

你可以通过修改 activeColorinactiveColorindicatorColor 来改变导航栏的外观。例如:

bottomNavigationBar: TitledBottomNavigationBar(
  currentIndex: _currentIndex,
  onTap: (index) {
    setState(() {
      _currentIndex = index;
    });
  },
  activeColor: Colors.blue,
  inactiveColor: Colors.grey,
  indicatorColor: Colors.blueAccent,
  items: [
    TitledNavigationBarItem(title: 'Home', icon: Icons.home),
    TitledNavigationBarItem(title: 'Search', icon: Icons.search),
    TitledNavigationBarItem(title: 'Profile', icon: Icons.person),
  ],
),
回到顶部