flutter底部导航栏中间按钮凸起,导航栏中间部分凹陷效果

关键代码:

Scaffold中设置floatingActionButtonLocation: FloatingActionButtonLocation.centerDockedextendBody: true

BottomAppBar中设置shape: const CircularNotchedRectangle()

dart 复制代码
Scaffold(
              extendBody: true,//body是否延伸脚手架底部,在底部导航栏的边缘添加了凹口时,确保能看到body内容
              body: _body(),
              floatingActionButton: FloatingActionButton(
                backgroundColor: Colors.transparent,
                onPressed: () {
                  isLogin().then((value) {
                    if (value == true) {
                      Utils().postDialog(context);
                    } else {
                      NavigatorUtil.push(LoginPage());
                    }
                  });
                },
                child: Image.asset(PathConfig.iconPublishGreen,width: 112.w,height: 112.w),
              ),
              floatingActionButtonLocation: FloatingActionButtonLocation.centerDocked,
              bottomNavigationBar: _bottomNavigationAppBar(),
            );


//中间凸出的底部导航栏(和floatingActionButton配合使用)
  _bottomNavigationAppBar(){
    return SizedBox(
      height: 110.w,
      child: BottomAppBar(
        color: Colors.white,
        shape: const CircularNotchedRectangle(),//添加一个凹口的形状
        child: Row(
          mainAxisAlignment: MainAxisAlignment.spaceAround,
          children: [
            // 首页底部图标
            Expanded(child: GestureDetector(
                child: _currentIndex == 0
                    ? Image.asset(PathConfig.iconLogoRound,width: 64.w,height: 64.w)
                    : Container(
                  color: Colors.transparent,
                  child: Column(
                    mainAxisAlignment: MainAxisAlignment.center,
                    children: <Widget>[
                      Container(
                        width: 40.w,
                        height: 40.w,
                        margin: EdgeInsets.only(bottom: 4.w),
                        child: Image(
                          image: AssetImage(PathConfig.iconUnselectAtui),
                        ),
                      ),
                      Text(S.of(context).atui,
                          style: TextStyle(
                              fontSize: 20.sp,
                              color: _currentIndex == 0 ? Color(0xffe63850) : Color(0xffD2D5D4)))
                    ],
                  ),
                ),
                onTap: (){
                  _changePage(0);
                }
            )),
            // 商城底部图标
            Expanded(child: GestureDetector(
                child: Container(
                  color: Colors.transparent,
                  child: Column(
                    mainAxisAlignment: MainAxisAlignment.center,
                    children: <Widget>[
                      Container(
                        width: 40.w,
                        height: 40.w,
                        margin: EdgeInsets.only(bottom: 4.w),
                        child: Image(
                          image: AssetImage(
                              _currentIndex == 1 ? PathConfig.iconSelectedMarket : PathConfig.iconUnselectMarket),
                        ),
                      ),
                      Text(S.of(context).market,
                          style: TextStyle(
                              fontSize: 20.sp, color: _currentIndex == 1 ? JadeColors.green_2 : Color(0xffD2D5D4)))
                    ],
                  ),
                ),
                onTap: (){
                  _changePage(1);
                }
            )),
            // 发布图标
            Expanded(child: GestureDetector(
                child: Column(
                  children: <Widget>[
                    Container(
                      width: 40.w,
                      height: 40.w,
                    ),
                    /*Text(
                      S.of(context).publish,
                      style: TextStyle(
                          fontSize: 13,
                          color: JadeColors.green_2),
                    )*/
                  ],
                ),
                onTap: (){
                  //_changePage(2);
                }
            )),
            // 消息底部图标
            Expanded(child: GestureDetector(
              child: Container(
                color: Colors.transparent,
                // alignment: Alignment.center,
                child: Stack(
                  alignment: Alignment.center,
                  children: <Widget>[
                    Column(
                      mainAxisAlignment: MainAxisAlignment.center,
                      children: [
                        Container(
                          width: 40.w,
                          height: 40.w,
                          margin: EdgeInsets.only(bottom: 4.w),
                          child: Image(
                            image: AssetImage(_currentIndex == 3 ? PathConfig.iconSelectedMessage : PathConfig.iconUnselectMessage),
                          ),
                        ),
                        Text(
                          S.of(context).xiaoxi,
                          style: TextStyle(
                              fontSize: 20.sp,
                              color: _currentIndex == 3 ? JadeColors.green_2 : Color(0xffD2D5D4)),
                        )
                      ],
                    ),
                    Positioned(
                        right: 40.w,
                        top: 6.w,
                        child: _messageCountView())
                  ],
                ),
              ),
              onTap: (){
                _changePage(3);
              },
            )),
            // 我的底部图标
            Expanded(child: GestureDetector(
              child: Container(
                  color: Colors.transparent,
                  child: Column(
                    mainAxisAlignment: MainAxisAlignment.center,
                    children: <Widget>[
                      Container(
                        width: 40.w,
                        height: 40.w,
                        margin: EdgeInsets.only(bottom: 4.w),
                        child: Image(
                          image: AssetImage(_currentIndex == 4 ? PathConfig.iconSelectedMine : PathConfig.iconUnselectMine),
                        ),
                      ),
                      Text(
                        S.of(context).wode,
                        style: TextStyle(
                            fontSize: 20.sp,
                            color: _currentIndex == 4 ? JadeColors.green_2 : Color(0xffD2D5D4)),
                      )
                    ],
                  )
              ),
              onTap: (){
                _changePage(4);
              },
            ))
          ],
        ),
      ),
    );

  }
相关推荐
花王江不语2 小时前
android studio 配置硬件加速 haxm
android·ide·android studio
江太翁4 小时前
mediapipe流水线分析 三
android·mediapipe
与火星的孩子对话5 小时前
Unity进阶课程【六】Android、ios、Pad 终端设备打包局域网IP调试、USB调试、性能检测、控制台打印日志等、C#
android·unity·ios·c#·ip
tmacfrank6 小时前
Android 网络全栈攻略(四)—— TCPIP 协议族与 HTTPS 协议
android·网络·https
fundroid7 小时前
Kotlin 协程:Channel 与 Flow 深度对比及 Channel 使用指南
android·kotlin·协程
草字7 小时前
cocos 打包安卓
android
DeBuggggggg8 小时前
centos 7.6安装mysql8
android
浩浩测试一下9 小时前
渗透信息收集- Web应用漏洞与指纹信息收集以及情报收集
android·前端·安全·web安全·网络安全·安全架构
移动开发者1号10 小时前
深入理解原子类与CAS无锁编程:原理、实战与优化
android·kotlin
陈卓41010 小时前
MySQL-主从复制&分库分表
android·mysql·adb