I fixed the error thanks; I had every page as singleton
But now if I am a Teacher I don't all the option that aa teacher should have.
<Shell.FlyoutHeader>
<Grid>
<BoxView
BackgroundColor="#522cd4"
HeightRequest="142" />
<VerticalStackLayout>
<Image
HeightRequest="80"
Source="user.png"
WidthRequest="80" />
<Label
HorizontalTextAlignment="Center"
Text="{Binding User.DemyId}"
TextColor="White" />
<Label
HorizontalTextAlignment="Center"
Text="{Binding User.Email}"
TextColor="White" />
<Label
HorizontalTextAlignment="Center"
Text="{Binding User.Role}"
TextColor="White" />
</VerticalStackLayout>
</Grid>
</Shell.FlyoutHeader>
<Shell.FlyoutFooterTemplate>
<DataTemplate>
<Button
Margin="20"
Command="{Binding SignOutCommand}"
CornerRadius="8"
Text="Log out" />
</DataTemplate>
</Shell.FlyoutFooterTemplate>
<FlyoutItem
Title="Notifications"
IsVisible="{Binding IsTeacher}">
<ShellContent
ContentTemplate="{DataTemplate view:NotificationsPage}"
Route="NotificationsPage" />
</FlyoutItem>
<ShellContent
ContentTemplate="{DataTemplate view:LoginPage}"
Route="LoginPage"
Shell.FlyoutBehavior="Disabled"
Shell.FlyoutItemIsVisible="False" />
<ShellContent
ContentTemplate="{DataTemplate view:WelcomePage}"
Route="WelcomePage"
Shell.FlyoutItemIsVisible="False" />
<FlyoutItem
Title="My courses"
IsVisible="{Binding IsStudent}">
<ShellContent
ContentTemplate="{DataTemplate view:CoursesPage}"
Route="CoursesPage" />
</FlyoutItem>
<FlyoutItem Title="Join Meeting">
<ShellContent
ContentTemplate="{DataTemplate view:JoinMeetingPage}"
Route="JoinMeetingPage" />
</FlyoutItem>
<FlyoutItem
Title="New lecture"
IsVisible="{Binding IsTeacher}">
<ShellContent
ContentTemplate="{DataTemplate view:NewLecturePage}"
Route="NewLecturePage" />
</FlyoutItem>
<FlyoutItem
Title="New test"
IsVisible="{Binding IsTeacher}">
<ShellContent
ContentTemplate="{DataTemplate view:NewTestPage}"
Route="NewTestPage" />
</FlyoutItem>
<FlyoutItem
Title="Schedule lecture"
IsVisible="{Binding IsTeacher}">
<ShellContent
ContentTemplate="{DataTemplate view:ScheduleLecturePage}"
Route="ScheduleLecturePage" />
</FlyoutItem>
<FlyoutItem
Title="Schedule test"
IsVisible="{Binding IsTeacher}">
<ShellContent
ContentTemplate="{DataTemplate view:ScheduleTestPage}"
Route="ScheduleLecturePage" />
</FlyoutItem>
<FlyoutItem
Title="Manage courses"
IsVisible="{Binding IsCoordinator}">
<ShellContent
ContentTemplate="{DataTemplate view:ManageCoursePage}"
Route="ManageCoursePage" />
</FlyoutItem>
public partial class AppShellViewModel(IAppService appService) : BaseViewModel {
[ObservableProperty]
User? user;
[ObservableProperty]
bool isCoordinator;
[ObservableProperty]
bool isStudent;
[ObservableProperty]
bool isTeacher;
[ObservableProperty]
bool isRegisterOpen;
[RelayCommand]
async Task SignOut() {
SecureStorage.Default.RemoveAll();
await appService.NavigateBack();
}
}
MauiProgram
builder.Logging.AddDebug();
#endif
builder.Services.AddSingleton<HttpClient>();
builder.Services.AddSingleton(AudioManager.Current);
builder.Services.AddTransient<AppShell, AppShellViewModel>();
builder.Services.AddTransient<LoginPage, LoginPageViewModel>();
builder.Services.AddTransient<WelcomePage, WelcomePageViewModel>();
builder.Services.AddTransient<CoursesPage, CoursesPageViewModel>();
builder.Services.AddTransient<NewLecturePage, NewLecturePageViewModel>();
builder.Services.AddTransient<NewTestPage, NewTestPageViewMode>();
builder.Services.AddTransient<ScheduleLecturePage, ScheduleLecturePageViewModel>();
builder.Services.AddTransient<ScheduleTestPage, ScheduleTestPageViewModel>();
builder.Services.AddTransient<NotificationsPage, NotificationsPageViewModel>();
builder.Services.AddTransient<JoinMeetingPage, JoinMeetingPageViewModel>();
builder.Services.AddTransient<NoInternetPage>();
builder.Services.AddTransient<ManageCoursePage, ManageCoursePageViewModel>();
builder.Services.AddSingleton<IAppService, AppService>();
builder.Services.AddTransient(typeof(IDataService<>), typeof(DataService<>));
builder.Services.AddSingleton<IAuthenticationService, AuthenticationService>();
builder.Services.AddSingleton<IHttpService, HttpService>();
builder.Services.AddSingleton(Connectivity.Current);
builder.Services.AddSingleton(firebaseAuthClient);
builder.Services.AddSingleton<IAuthenticationService>(serviceProvider => {
var authService = serviceProvider.GetRequiredService<FirebaseAuthClient>();
var appService = serviceProvider.GetRequiredService<IAppService>();
return new AuthenticationService(authService, appService);
});
builder.Services.AddSingleton<IMeetingService, MeetingService>();
I think is because the sell loads firs before everything