Files
eatvio_app/lib/widgets/custom_navigation_menu.dart

89 lines
2.9 KiB
Dart

import 'package:eatvio_app/core/app_export.dart';
import 'package:flutter/material.dart';
import 'package:eatvio_app/widgets/custom_navigation_menu_item.dart';
import 'package:hive/hive.dart';
import 'package:flutter_dotenv/flutter_dotenv.dart';
import 'package:http/http.dart' as http;
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: () =>
Navigator.pushNamed(context, AppRoutes.recipeSelectScreen),
// Действие при нажатии на "Мои рецепты"
),
MenuItem(
icon: ImageConstant.imgDiets,
text: 'Мои диеты',
onTap: () =>
Navigator.pushNamed(context, AppRoutes.dietSelectScreen),
// Действие при нажатии на "Мои рецепты"
),
MenuItem(
icon: ImageConstant.imgPlans,
text: 'Мои планы',
onTap: () =>
Navigator.pushNamed(context, AppRoutes.planSelectScreen),
// Действие при нажатии на "Мои рецепты"
),
MenuItem(
icon: ImageConstant.imgFinance,
text: 'Финансы',
onTap: () {
// Действие при нажатии на "Финансы"
},
),
MenuItem(
icon: ImageConstant.imgSupport,
text: 'Поддержка',
onTap: () {
// Действие при нажатии на "Поддержка"
},
),
MenuItem(
icon: ImageConstant.imgExit,
text: 'Выход',
onTap: _onTapLogout(context),
// Действие при нажатии на "Выход"
),
],
),
);
}
}
_onTapLogout(BuildContext context) {
return () async {
final box = await Hive.openBox('token');
final token = box.get('token');
final response = await http.post(
Uri.parse(dotenv.env['SERVER_ROOT']! + '/profile/logout'),
headers: {
'Authorization': 'Bearer $token',
},
);
if (response.statusCode == 204) {
print(response.statusCode);
box.delete('token'); // Удаляем токен из Hive
Navigator.pushNamed(
context,
AppRoutes.authScreen,
);
}
};
}