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);
              },
            ))
          ],
        ),
      ),
    );

  }
相关推荐
mmsx1 小时前
return false 不是拦截:一次按键触发两个动作的事件冒泡陷阱
android·bug
DU_YULIN1 小时前
Camera HAL ThreadManager概述
android·camera hal
淡淡的香烟2 小时前
Android中的MQTT通信原理解析
android·物联网
淡淡的香烟2 小时前
Android Camera开发详解
android·音视频
mmsx3 小时前
基于 Android 的校园信息管理系统源码
android·java·okhttp
xcyxiner4 小时前
flutter wsl2安装记录(使用宿主机虚拟机)
前端·flutter
YF02114 小时前
如何进入Android工程模式
android
Kevin Coding5 小时前
JsonConvert:适用于 Android、鸿蒙与 Flutter 的 JSON 转 Model 插件
android·flutter·harmonyos
xcLeigh7 小时前
Go入门:基本数据类型全览与选择指南
android·服务器·golang·教程·go热门
alexhilton7 小时前
规范驱动开发:让AI生成符合预期的KMP代码
android·kotlin·android jetpack