Flutter自定义底部导航栏插件annotated_shelf的使用

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

根据您提供的内容,annotated_shelf 插件主要用于创建 REST API,并不是用于Flutter自定义底部导航栏的插件。可能是您所提到的插件名称有误。为了帮助您实现Flutter自定义底部导航栏的功能,我将提供一个使用 bottom_navy_bar 插件的完整示例demo,这个插件可以方便地创建美观且功能强大的底部导航栏。

Flutter自定义底部导航栏插件 bottom_navy_bar 的使用

1. 安装 bottom_navy_bar 插件

pubspec.yaml 文件中添加 bottom_navy_bar 依赖:

dependencies:
  flutter:
    sdk: flutter
  bottom_navy_bar: ^6.0.0

然后运行 flutter pub get 来安装插件。

2. 创建页面

我们将创建三个简单的页面,每个页面对应底部导航栏的一个选项。

import 'package:flutter/material.dart';

class HomeScreen extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Center(
      child: Text('Home Screen'),
    );
  }
}

class SearchScreen extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Center(
      child: Text('Search Screen'),
    );
  }
}

class ProfileScreen extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Center(
      child: Text('Profile Screen'),
    );
  }
}

3. 创建主页面并集成 BottomNavyBar

在主页面中,我们将使用 BottomNavyBar 来实现底部导航栏,并根据用户的点击切换不同的页面。

import 'package:flutter/material.dart';
import 'package:bottom_navy_bar/bottom_navy_bar.dart';
import 'home_screen.dart';
import 'search_screen.dart';
import 'profile_screen.dart';

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Bottom Navy Bar Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MainScreen(),
    );
  }
}

class MainScreen extends StatefulWidget {
  [@override](/user/override)
  _MainScreenState createState() => _MainScreenState();
}

class _MainScreenState extends State<MainScreen> {
  int _currentIndex = 0;
  List<Widget> _pages = [
    HomeScreen(),
    SearchScreen(),
    ProfileScreen(),
  ];

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      body: _pages[_currentIndex],
      bottomNavigationBar: BottomNavyBar(
        selectedIndex: _currentIndex,
        onItemSelected: (index) {
          setState(() {
            _currentIndex = index;
          });
        },
        items: <BottomNavyBarItem>[
          BottomNavyBarItem(
            icon: Icon(Icons.home),
            title: Text('Home'),
            activeColor: Colors.red,
          ),
          BottomNavyBarItem(
            icon: Icon(Icons.search),
            title: Text('Search'),
            activeColor: Colors.purpleAccent,
          ),
          BottomNavyBarItem(
            icon: Icon(Icons.person),
            title: Text('Profile'),
            activeColor: Colors.blue,
          ),
        ],
      ),
    );
  }
}

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

1 回复

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


当然,以下是一个关于如何在Flutter中使用annotated_shelf插件来自定义底部导航栏的代码示例。annotated_shelf是一个流行的Flutter包,用于创建高度可定制的底部导航栏。

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

dependencies:
  flutter:
    sdk: flutter
  annotated_shelf: ^x.y.z  # 替换为最新版本号

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

接下来,下面是一个完整的示例代码,展示如何使用annotated_shelf来创建一个自定义的底部导航栏:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Annotated Shelf Example',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: AnnotatedNavigationScaffold(
        bottomNavigationBar: AnnotatedBottomNavigationBar(
          currentIndex: 0, // 当前选中的索引
          onTap: (index) {
            // 点击事件处理
            ScaffoldMessenger.of(context).showSnackBar(
              SnackBar(content: Text('Selected index: $index')),
            );
          },
          items: [
            AnnotatedNavigationData(
              icon: Icon(Icons.home),
              title: Text('Home'),
            ),
            AnnotatedNavigationData(
              icon: Icon(Icons.search),
              title: Text('Search'),
            ),
            AnnotatedNavigationData(
              icon: Icon(Icons.library_books),
              title: Text('Library'),
            ),
            AnnotatedNavigationData(
              icon: Icon(Icons.account_circle),
              title: Text('Profile'),
            ),
          ],
          // 自定义导航栏样式
          decoration: BoxDecoration(
            color: Colors.white,
            boxShadow: [
              BoxShadow(
                color: Colors.grey.withOpacity(0.2),
                spreadRadius: 5,
                blurRadius: 7,
                offset: Offset(0, 3), // changes position of shadow
              ),
            ],
          ),
          // 自定义未选中项的颜色
          unselectedItemColor: Colors.grey,
          // 自定义选中项的颜色
          selectedItemColor: Colors.blue,
        ),
        body: AnnotatedNavigationBody(
          pages: [
            Center(child: Text('Home Page')),
            Center(child: Text('Search Page')),
            Center(child: Text('Library Page')),
            Center(child: Text('Profile Page')),
          ],
        ),
      ),
    );
  }
}

代码解释:

  1. 依赖引入

    • 引入flutter/material.dartannotated_shelf/annotated_shelf.dart
  2. 主函数

    • 使用MaterialApp作为应用的根组件。
  3. AnnotatedNavigationScaffold

    • AnnotatedNavigationScaffold是一个特殊的Scaffold,它结合了AnnotatedBottomNavigationBarAnnotatedNavigationBody,简化了底部导航栏和页面内容的同步。
  4. AnnotatedBottomNavigationBar

    • currentIndex:当前选中的索引。
    • onTap:点击事件处理函数。
    • items:导航项列表,每个项包含图标和标题。
    • decoration:自定义底部导航栏的装饰,如颜色和阴影。
    • unselectedItemColorselectedItemColor:自定义未选中项和选中项的颜色。
  5. AnnotatedNavigationBody

    • pages:页面内容列表,与AnnotatedBottomNavigationBar中的项一一对应。

通过这个示例,你可以快速上手annotated_shelf插件,并创建一个高度可定制的底部导航栏。根据你的需求,你可以进一步自定义导航栏的样式和行为。

回到顶部