移动到其他页面时无法保持底部导航栏颤动

Posted

技术标签:

【中文标题】移动到其他页面时无法保持底部导航栏颤动【英文标题】:Unable to keep the bottom navbar while moving to other pages flutter 【发布时间】:2021-08-19 07:33:27 【问题描述】:

我是初学者,我试过这个教程 https://youtu.be/1ToqYMSnNhA 但是当我按下其他按钮并导航到另一个屏幕时..底部栏正在消失。如何让它粘住? 我正在“底部溢出无限像素”代替底部导航栏。

#main.dart
class MyApp extends StatelessWidget 
  @override
  Widget build(BuildContext context) 
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      home: Splashscreen(),
      routes: <String, WidgetBuilder>
        "/login": (BuildContext context) => LoginSignupScreen(),
        "/profile": (BuildContext context) => Profile(),
        "/home": (BuildContext context) => Home(),
        "/splashscreen": (BuildContext context) => Splashscreen(),
        "/department": (BuildContext context) => Department(),
      ,
    );
  



#navbar.dart
import 'package:flutter/material.dart';
import 'package:mini_project/main.dart';

class Navbar extends StatefulWidget 
  @override
  _NavbarState createState() => _NavbarState();


class _NavbarState extends State<Navbar> 
  int currentIndex = 0;

  setBottomBarIndex(index) 
    setState(() 
      currentIndex = index;
    );
  

  @override
  Widget build(BuildContext context) 
    final Size size = MediaQuery.of(context).size;
    return Scaffold(
      backgroundColor: Colors.white.withAlpha(55),
      body: Stack(
        children: [
          Positioned(
            bottom: 0,
            left: 0,
            child: Container(
              width: size.width,
              height: 80,
              child: Stack(
                //overflow: Overflow.visible,
                children: [
                  CustomPaint(
                    size: Size(size.width, 80),
                    painter: BCustomPainter(),
                  ),
                  Center(
                    heightFactor: 0.6,
                    child: FloatingActionButton(
                        backgroundColor: Colors.blueAccent[100],
                        child: Icon(Icons.home),
                        elevation: 0.1,
                        onPressed: () ),
                  ),
                  Container(
                    width: size.width,
                    height: 80,
                    child: Row(
                      mainAxisAlignment:
                          MainAxisAlignment.spaceEvenly, //to align evenly
                      children: [
                        IconButton(
                          icon: Icon(
                            Icons.account_circle,
                            size: 30.0,
                            color: currentIndex == 0
                                ? Colors.blueAccent[100]
                                : Colors.grey.shade400,
                          ),
                          onPressed: () 
                            setBottomBarIndex(0);
                            Navigator.pushReplacementNamed(context, "/profile");
                          ,
                          splashColor: Colors.white,
                        ),
                        IconButton(
                            icon: Icon(
                              Icons.dynamic_feed,
                              size: 30.0,
                              color: currentIndex == 1
                                  ? Colors.blueAccent[100]
                                  : Colors.grey.shade400,
                            ),
                            onPressed: () 
                              setBottomBarIndex(1);
                            ),
                        Container(
                          width: size.width * 0.20,
                        ),
                        IconButton(
                            icon: Icon(
                              Icons.workspaces_filled,
                              size: 30.0,
                              color: currentIndex == 2
                                  ? Colors.blueAccent[100]
                                  : Colors.grey.shade400,
                            ),
                            onPressed: () 
                              setBottomBarIndex(2);
                              Navigator.pushReplacementNamed(
                                  context, "/department");
                            ),
                        IconButton(
                            icon: Icon(
                              Icons.notifications,
                              size: 30.0,
                              color: currentIndex == 3
                                  ? Colors.blueAccent[100]
                                  : Colors.grey.shade400,
                            ),
                            onPressed: () 
                              setBottomBarIndex(3);
                            ),
                      ],
                    ),
                  )
                ],
              ),
            ),
          )
        ],
      ),
    );
  


//for the shape of the nav bar
class BCustomPainter extends CustomPainter 
  @override
  void paint(Canvas canvas, Size size) 
    Paint paint = new Paint()
      ..color = Colors.white
      ..style = PaintingStyle.fill;
//quadratic BezierTo curve
    Path path = Path();
    path.moveTo(0, 20); // Start
    path.quadraticBezierTo(size.width * 0.20, 0, size.width * 0.35, 0);
    path.quadraticBezierTo(size.width * 0.40, 0, size.width * 0.40, 20);
    path.arcToPoint(Offset(size.width * 0.60, 20),
        radius: Radius.circular(20.0), clockwise: false);
    path.quadraticBezierTo(size.width * 0.60, 0, size.width * 0.65, 0);
    path.quadraticBezierTo(size.width * 0.80, 0, size.width, 20);
    path.lineTo(size.width, size.height);
    path.lineTo(0, size.height);
    path.lineTo(0, 20);
    canvas.drawShadow(path, Colors.black, 5, true);
    canvas.drawPath(path, paint);
  

  @override
  bool shouldRepaint(CustomPainter oldDelegate) 
    return false;
  

我已在此处附加了主文件和导航栏文件!请帮忙!

【问题讨论】:

将您的代码放在这里以了解发生了什么问题 【参考方案1】:

使用这个插件Presistant_bottom_nav_bar.现在你可以在每个屏幕上使用底部导航栏

初始化变量

PersistentTabController _controller =PersistentTabController(initialIndex: 0);

//Screens for each nav items.

  List<Widget> _NavScreens() 
    return [
     HomeScreen(),
     OfferScreen(),
     HelpScreen(),
     ProfileScreen(),
     CartViewScreen(),
      
    ];
  


  List<PersistentBottomNavBarItem> _navBarsItems() 
    return [
      PersistentBottomNavBarItem(
       icon: Icon(Icons.home),
        title: ("Home"),
        activeColor: CupertinoColors.activeBlue,
        inactiveColor: CupertinoColors.systemGrey,
      ),
      PersistentBottomNavBarItem(
        icon: Icon(Icons.favorite),
        title: ("OFFERS"),
        activeColor: CupertinoColors.activeGreen,
        inactiveColor: CupertinoColors.systemGrey,
      ),
      PersistentBottomNavBarItem(
        icon: Icon(Icons.person_pin),
        title: ("Help"),
        activeColor: CupertinoColors.systemRed,
        inactiveColor: CupertinoColors.systemGrey,
      ),
      PersistentBottomNavBarItem(
        icon: Icon(Icons.local_activity),
        title: ("ProfileScreen"),
        activeColor: CupertinoColors.systemIndigo,
        inactiveColor: CupertinoColors.systemGrey,
      ),
 PersistentBottomNavBarItem(
        icon: Icon(Icons.shop_cart),
        title: ("Cart"),
        activeColor: CupertinoColors.systemIndigo,
        inactiveColor: CupertinoColors.systemGrey,
      ),

    ];
  
@override
Widget build(BuildContext context) 
    return Center(
      child: PersistentTabView(
        controller: _controller,
        screens: _NavScreens(),
        items: _navBarsItems(),
        confineInSafeArea: true,
        backgroundColor: Colors.white,
        handleandroidBackButtonPress: true,
        resizeToAvoidBottomInset: true,
        hideNavigationBarWhenKeyboardShows: true,
        decoration: NavBarDecoration(
          borderRadius: BorderRadius.circular(10.0),
        ),
        popAllScreensOnTapOfSelectedTab: true,
        navBarStyle: NavBarStyle.style9,
      ),
    );

【讨论】:

以上是关于移动到其他页面时无法保持底部导航栏颤动的主要内容,如果未能解决你的问题,请参考以下文章

使用底部应用栏标签导航 - 颤动

如何使用颤动的底部导航栏导航到几个新页面?

颤动中的底部导航栏不会在点击选项卡时切换屏幕

颤动底部导航,其中一个页面有选项卡

如何将底部导航栏添加到此颤动代码

如何在颤动的底部导航栏中添加抽屉?