flutter如何实现闲鱼底部导航栏
在Flutter中想模仿闲鱼的底部导航栏效果,具体应该怎么实现呢?比如如何设置图标和文字的组合,点击切换动画效果,以及保持状态不销毁?求详细的代码示例和思路说明!
        
          2 回复
        
      
      
        在 Flutter 中实现类似闲鱼的底部导航栏,可以使用 BottomNavigationBar 组件结合 PageView 实现滑动切换效果。以下是完整示例代码:
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: '闲鱼底部导航',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MainPage(),
    );
  }
}
class MainPage extends StatefulWidget {
  @override
  _MainPageState createState() => _MainPageState();
}
class _MainPageState extends State<MainPage> {
  int _currentIndex = 0;
  final PageController _pageController = PageController();
  // 页面列表
  final List<Widget> _pages = [
    HomePage(),
    FishPoolPage(),
    MessagePage(),
    MyPage(),
  ];
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: PageView(
        controller: _pageController,
        children: _pages,
        onPageChanged: (index) {
          setState(() {
            _currentIndex = index;
          });
        },
      ),
      bottomNavigationBar: BottomNavigationBar(
        currentIndex: _currentIndex,
        onTap: (index) {
          setState(() {
            _currentIndex = index;
            _pageController.jumpToPage(index);
          });
        },
        type: BottomNavigationBarType.fixed, // 固定样式,超过3个item时需要
        selectedItemColor: Colors.orange, // 选中颜色
        unselectedItemColor: Colors.grey, // 未选中颜色
        items: [
          BottomNavigationBarItem(
            icon: Icon(Icons.home),
            label: '首页',
          ),
          BottomNavigationBarItem(
            icon: Icon(Icons.shopping_bag),
            label: '鱼塘',
          ),
          BottomNavigationBarItem(
            icon: Icon(Icons.chat),
            label: '消息',
          ),
          BottomNavigationBarItem(
            icon: Icon(Icons.person),
            label: '我的',
          ),
        ],
      ),
    );
  }
  @override
  void dispose() {
    _pageController.dispose();
    super.dispose();
  }
}
// 示例页面组件
class HomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Center(child: Text('首页'));
  }
}
class FishPoolPage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Center(child: Text('鱼塘'));
  }
}
class MessagePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Center(child: Text('消息'));
  }
}
class MyPage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Center(child: Text('我的'));
  }
}
关键点说明:
- 
BottomNavigationBar:基础底部导航组件 - currentIndex控制当前选中项
- onTap处理点击切换
- type: BottomNavigationBarType.fixed固定样式(超过3个item时必须设置)
 
- 
PageView:实现页面滑动切换 - 与 BottomNavigationBar 保持状态同步
- 通过 PageController 控制页面跳转
 
- 
样式定制: - 修改 selectedItemColor和unselectedItemColor来调整颜色
- 可替换图标和文字为闲鱼实际使用的资源
 
- 修改 
优化建议:
- 使用自定义图标资源替换 Material Icons
- 添加徽章数字提示(如消息数量)
- 可加入动画过渡效果增强用户体验
这种方式实现了页面滑动和底部导航的完美同步,效果流畅,符合闲鱼的实际交互体验。
 
        
       
             
             
            


