Тело
Я создаю приложение .NET MAUI с использованием оболочки и пытаюсь определить наиболее правильный и стабильный подход к реализации:
- Последовательность входа и выхода
- Ролевая навигация
- Динамическое всплывающее окно (боковое меню)
- Правильный сброс стека навигации при выходе из системы
Чего я хочу достичь
- Пользователи проходят аутентификацию через LoginPage
- После входа в систему приложение динамически создает всплывающее меню на основе роли пользователя
(например, администратор видит больше пунктов меню, чем пользователь) - При выходе из системы стек навигации полностью сбрасывается и пользователь перенаправляется на страницу входа в систему.
- После выхода из системы обратная навигация невозможна.
- Всплывающее меню скрыто перед аутентификацией.
Код: Выделить всё
Routing.RegisterRoute("login", typeof(LoginPage));
await Shell.Current.GoToAsync("login");
- Использование абсолютной навигации () выдает:
Код: Выделить всё
//login
"Глобальные маршруты в настоящее время не могут быть единственной страницей в стеке" - Shell требует хотя бы один ShellItem
- Трудно определить корневую страницу для сброса навигации
Код: Выделить всё
- работает надежно
Код: Выделить всё
await Shell.Current.GoToAsync("//login") - Обратный стек очищается правильно
- Логин не виден во всплывающем окне
- После входа в систему я динамически добавляю элементы FlyoutItems
Создание динамического всплывающего окна
Код: Выделить всё
var flyout = new FlyoutItem
{
FlyoutDisplayOptions = FlyoutDisplayOptions.AsSingleItem
};
foreach (var item in menuService.GetMenu(userRole))
{
flyout.Items.Add(new ShellContent
{
Title = item.Title,
ContentTemplate = new DataTemplate(item.PageType)
});
}
Shell.Current.Items.Add(flyout);
- Какой рекомендуемый/идиоматический шаблон для входа и выхода из системы в MAUI Shell?
- Приемлемо ли (или рекомендуется) сохранять LoginPage как ShellContent?
- Приемлемо ли (или рекомендуется) сохранять LoginPage как ShellContent?
- Является ли динамическое создание FlyoutItems на основе ролей пользователей — правильный подход?
- Как следует сбрасывать состояние навигации при выходе из системы?
Подробнее здесь: https://stackoverflow.com/questions/798 ... mic-flyout
Мобильная версия