forked from eatvio/eatvio_app
feat(app): Added a popup menu to bottom navbar
This commit is contained in:
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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(
|
||||
|
||||
64
lib/widgets/custom_navigation_menu.dart
Normal file
64
lib/widgets/custom_navigation_menu.dart
Normal 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: () {
|
||||
// Действие при нажатии на "Выход"
|
||||
},
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
36
lib/widgets/custom_navigation_menu_item.dart
Normal file
36
lib/widgets/custom_navigation_menu_item.dart
Normal 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),
|
||||
],
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user