feat(app): Added a popup menu to bottom navbar

This commit is contained in:
2024-04-18 14:49:45 +03:00
parent ca74cc80a1
commit e602e5d239
12 changed files with 171 additions and 18 deletions

View File

@@ -7,7 +7,6 @@ class AppbarTitleCircleimage extends StatelessWidget {
Key? key,
this.imagePath,
this.margin,
this.onTap,
}) : super(
key: key,
);
@@ -16,13 +15,10 @@ class AppbarTitleCircleimage extends StatelessWidget {
EdgeInsetsGeometry? margin;
Function? onTap;
@override
Widget build(BuildContext context) {
return InkWell(
borderRadius: BorderRadiusStyle.circleBorder8,
onTap: onTapCall,
child: Padding(
padding: margin ?? EdgeInsets.zero,
child: CustomImageView(
@@ -37,8 +33,4 @@ class AppbarTitleCircleimage extends StatelessWidget {
),
);
}
void onTapCall() {
onTap!.call();
}
}

View File

@@ -1,6 +1,7 @@
import 'package:eatvio_app/core/app_export.dart';
import 'package:flutter/material.dart';
import 'package:eatvio_app/widgets/app_bar/appbar_title_circleimage.dart';
import 'package:eatvio_app/widgets/custom_navigation_menu.dart';
// ignore: must_be_immutable
class CustomBottomBar extends StatefulWidget {
@@ -86,7 +87,6 @@ class CustomBottomBarState extends State<CustomBottomBar> {
Navigator.pushNamed(context, AppRoutes.myProfile);
break;
case 1:
//Navigator.pushNamed(context, AppRoutes.myProfile);
break;
case 2:
Navigator.pushNamed(context, AppRoutes.diaryEdit);
@@ -94,13 +94,6 @@ class CustomBottomBarState extends State<CustomBottomBar> {
case 3:
Navigator.pushNamed(context, '/chat');
break;
case 4:
//Navigator.pushNamed(context, '/chat');
break;
case 5:
Navigator.pushNamed(context, AppRoutes.mySettings);
break;
default:
}
}
@@ -111,7 +104,7 @@ class CustomBottomBarState extends State<CustomBottomBar> {
double iconWidth;
if (index == 0) {
// Для логотипа
// Для логотипа-
iconHeight = 52.v; // Увеличиваем высоту
iconWidth = 48.h; // Меняем ширину, чтобы сохранить пропорции
} else if (index == bottomMenuList.length - 2) {
@@ -141,7 +134,31 @@ class CustomBottomBarState extends State<CustomBottomBar> {
isSelected ? theme.colorScheme.primary : appTheme.blueGray400,
),
if (bottomMenuList[index].image)
AppbarTitleCircleimage(imagePath: ImageConstant.imgEllipse1),
GestureDetector(
onTap: () => showMenu(
context: context,
color: Colors.white,
shadowColor: Colors.white,
surfaceTintColor: Colors.white,
position: RelativeRect.fromLTRB(
// Указываем позицию справа по центру
MediaQuery.of(context).size.width -
50, // Расположение от правого края
kToolbarHeight + 340, // Расположение от верхнего края
0, // Не смещаем по горизонтали
0, // Не смещаем по вертикали
),
items: [
PopupMenuItem(
child:
CustomNavigationMenu(), // Используйте ваше меню здесь
)
],
),
child: AppbarTitleCircleimage(
imagePath: ImageConstant.imgEllipse1,
),
),
if (bottomMenuList[index].title !=
null) // Проверяем, существует ли title
Padding(

View File

@@ -0,0 +1,64 @@
import 'package:eatvio_app/core/app_export.dart';
import 'package:flutter/material.dart';
import 'package:eatvio_app/widgets/custom_navigation_menu_item.dart';
class CustomNavigationMenu extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Container(
color: Colors.white,
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
MenuItem(
icon: ImageConstant.imgSettings,
text: 'Настройки профиля',
onTap: () => Navigator.pushNamed(context, AppRoutes.mySettings),
),
MenuItem(
icon: ImageConstant.imgRecipes,
text: 'Мои рецепты',
onTap: () {
// Действие при нажатии на "Мои рецепты"
},
),
MenuItem(
icon: ImageConstant.imgDiets,
text: 'Мои диеты',
onTap: () {
// Действие при нажатии на "Мои диеты"
},
),
MenuItem(
icon: ImageConstant.imgPlans,
text: 'Мои планы',
onTap: () {
// Действие при нажатии на "Мои планы"
},
),
MenuItem(
icon: ImageConstant.imgFinance,
text: 'Финансы',
onTap: () {
// Действие при нажатии на "Финансы"
},
),
MenuItem(
icon: ImageConstant.imgSupport,
text: 'Поддержка',
onTap: () {
// Действие при нажатии на "Поддержка"
},
),
MenuItem(
icon: ImageConstant.imgExit,
text: 'Выход',
onTap: () {
// Действие при нажатии на "Выход"
},
),
],
),
);
}
}

View File

@@ -0,0 +1,36 @@
import 'package:flutter/material.dart';
import 'package:eatvio_app/widgets/custom_image_view.dart';
class MenuItem extends StatelessWidget {
final String icon;
final String text;
final VoidCallback onTap;
const MenuItem({
required this.icon,
required this.text,
required this.onTap,
});
@override
Widget build(BuildContext context) {
return InkWell(
onTap: onTap,
child: Padding(
padding: const EdgeInsets.all(8.0),
child: Row(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment:
CrossAxisAlignment.center, // Выравнивание по центру вертикально
children: <Widget>[
CustomImageView(imagePath: icon),
SizedBox(
width:
8.0), // Добавляем небольшой отступ между иконкой и текстом
Text(text),
],
),
),
);
}
}