Flutter底部导航栏插件stacky_bottom_nav_bar的使用

Flutter底部导航栏插件stacky_bottom_nav_bar的使用

预览

默认亮色模式 默认暗色模式
默认亮色模式 默认暗色模式

⚠️ 重要:添加此小部件时,不要用特定大小包装它,例如用SizedBox包裹。你可以将其放在Stack小部件中,并放在顶部,考虑使用StackyBottomNavBar.defaultHeight作为下面小部件的内边距。

开始使用

pubspec.yaml文件中添加依赖:

dependencies:
  ...
  stacky_bottom_nav_bar: ^0.0.2

自定义

StackyBottomNavBar

params是一个包含所有必需和可选参数的StackyBottomNavBarParams类。

StackyBottomNavBarParams

  • simpleNavBarItems 是一个长度必须为2的StackySimpleNavBarItem列表。
  • animatedNavBarItems 是一个长度必须为3的StackyAnimatedNavBarItem列表。
  • brightness 可以自定义导航栏亮度。
  • bgColor 可以更改导航栏背景颜色。
  • currentSelectedTabIndex 当前选中的标签项,默认为零。必须为0或1。

StackySimpleNavBarItem

  • icon 简单导航栏项图标数据。
  • onTap 导航栏项点击事件。
  • iconColor 可用于覆盖未选中图标的颜色(可选)。
  • selectedIconColor 可用于覆盖选中图标的颜色(可选)。

StackyAnimatedNavBarItem

  • icon 动画导航栏项图标数据。
  • onTap 导航栏项点击事件。
  • iconColor 可用于覆盖图标的颜色(可选)。
  • bgColor 可用于覆盖动画导航栏项的背景颜色(可选)。

基本用法示例

import 'package:flutter/material.dart';
import 'package:stacky_bottom_nav_bar/stacky_bottom_nav_bar.dart';
import 'package:logger/logger.dart' as logger;

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

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

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  int _currentIndex = 0;

  void _onItemTapped(int index) {
    setState(() {
      _currentIndex = index;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Stacky Bottom Nav Bar Demo'),
      ),
      body: Center(
        child: Text('当前选中的Tab是: $_currentIndex'),
      ),
      bottomNavigationBar: StackyBottomNavBar(
        params: StackyBottomNavBarParams(
          animatedNavBarItems: [
            StackyAnimatedNavBarItem(
              icon: Icons.video_call,
              onTap: () => logger.Logger().d("video call"),
            ),
            StackyAnimatedNavBarItem(
              icon: Icons.camera_alt,
              onTap: () => logger.Logger().d("camera"),
            ),
            StackyAnimatedNavBarItem(
              icon: Icons.image,
              onTap: () => logger.Logger().d("image"),
            ),
          ],
          simpleNavBarItems: [
            StackySimpleNavBarItem(
              icon: Icons.home,
              onTap: () => logger.Logger().d("home"),
            ),
            StackySimpleNavBarItem(
              icon: Icons.person,
              onTap: () => logger.Logger().d("profile"),
            ),
          ],
          currentSelectedTabIndex: _currentIndex,
        ),
        onTabChange: (int newIndex) {
          setState(() {
            _currentIndex = newIndex;
          });
        },
      ),
    );
  }
}

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

1 回复

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


当然,以下是一个关于如何使用 stacky_bottom_nav_bar 插件在 Flutter 中实现底部导航栏的示例代码。stacky_bottom_nav_bar 是一个流行的 Flutter 插件,用于创建具有堆叠动画效果的底部导航栏。

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

dependencies:
  flutter:
    sdk: flutter
  stacky_bottom_nav_bar: ^1.0.0  # 确保使用最新版本

然后,运行 flutter pub get 来获取依赖项。

接下来,是完整的 Flutter 应用代码,展示了如何使用 stacky_bottom_nav_bar

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Stacky Bottom Nav Bar Example',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: HomeScreen(),
    );
  }
}

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

class _HomeScreenState extends State<HomeScreen> {
  int selectedIndex = 0;
  final List<Widget> screens = [
    Scaffold(
      appBar: AppBar(
        title: Text('Home'),
      ),
      body: Center(
        child: Text('Home Screen'),
      ),
    ),
    Scaffold(
      appBar: AppBar(
        title: Text('Search'),
      ),
      body: Center(
        child: Text('Search Screen'),
      ),
    ),
    Scaffold(
      appBar: AppBar(
        title: Text('Profile'),
      ),
      body: Center(
        child: Text('Profile Screen'),
      ),
    ),
  ];

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: screens[selectedIndex],
      bottomNavigationBar: StackyBottomNavigationBar(
        selectedIndex: selectedIndex,
        items: [
          StackyBottomNavigationBarItem(
            icon: Icons.home,
            title: 'Home',
          ),
          StackyBottomNavigationBarItem(
            icon: Icons.search,
            title: 'Search',
          ),
          StackyBottomNavigationBarItem(
            icon: Icons.person,
            title: 'Profile',
          ),
        ],
        onTap: (index) {
          setState(() {
            selectedIndex = index;
          });
        },
        animationDuration: 300,
      ),
    );
  }
}

解释

  1. 依赖项:在 pubspec.yaml 中添加 stacky_bottom_nav_bar 依赖项。
  2. 主应用MyApp 类是应用的主入口,它定义了主题和初始屏幕。
  3. 主屏幕HomeScreen 是一个有状态的组件,用于管理导航栏的当前选择项和对应的屏幕。
  4. 屏幕列表screens 列表包含了三个不同的屏幕(Home, Search, Profile),每个屏幕都是一个 Scaffold,带有不同的 AppBar 和中心文本。
  5. 底部导航栏StackyBottomNavigationBar 组件用于创建底部导航栏。
    • selectedIndex:当前选中的索引。
    • items:导航栏项列表,每个项包含图标和标题。
    • onTap:点击导航项时的回调函数,用于更新当前选中的索引。
    • animationDuration:动画持续时间(毫秒)。

运行这个示例代码,你会看到一个带有三个导航项的底部导航栏,点击不同的项会在不同的屏幕之间切换,并且带有堆叠动画效果。

回到顶部