I fix it, since we are using dependency injection. We cannot send classes thru the contractor of the page.
Pasing data to viewModel contractor
Eduardo Gomez
3,671
Reputation points
Since I need m data immediately, I decide to pass my class to the WelomePage Contractor
public partial class WelcomePageViewModel : BaseViewModel {
DemyUser? loggedUser;
public WelcomePageViewModel(DemyUser demyUser) {
loggedUser = demyUser;
GetShellItems(loggedUser.CurrentRole);
}
private async void CheckAuth() {
var currentUserAsJson = await SecureStorage.GetAsync(Constants.LOGGED_USER);
if(string.IsNullOrEmpty(currentUserAsJson)) {
if(DeviceInfo.Platform == DevicePlatform.WinUI) {
Shell.Current.Dispatcher.Dispatch(async () => {
await Shell.Current.GoToAsync($"//{nameof(LoginPage)}", true);
});
} else {
await Shell.Current.GoToAsync($"//{nameof(LoginPage)}", true);
}
} else {
var loggedUser = JsonSerializer.Deserialize<DemyUser>(currentUserAsJson);
FlyoutHeaderHelper.CreateFlyoutHeader(loggedUser);
WelcomePageViewModel welcomePageViewModel = new(loggedUser);
await Shell.Current.GoToAsync($"//{nameof(WelcomePage)}", true);
}
in the startup page I have a method, to check if I am authenticated.But what I do not understand I the error that I get
System.InvalidOperationException: 'Unable to resolve service for type 'DemyAI.Models.DemyUser' while attempting to activate 'DemyAI.ViewModels.WelcomePageViewModel'.'
DemyUser is a class, not a service nor an interface.
builder.Services.AddSingleton<HttpClient>();
builder.Services.AddSingleton(AudioManager.Current);
builder.Services.AddSingleton<IAppService, AppService>();
builder.Services.AddSingleton(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<AppShell>();
builder.Services.AddSingleton<NoInternetPage>();
builder.Services.AddSingleton<LoginPage>();
builder.Services.AddSingleton<WelcomePage>();
builder.Services.AddSingleton<NewLecturePage>();
builder.Services.AddSingleton<NewTestPage>();
builder.Services.AddSingleton<ScheduleLecturePage>();
builder.Services.AddSingleton<ScheduleTestPage>();
builder.Services.AddSingleton<NotificationsPage>();
builder.Services.AddSingleton<JoinMeetingPage>();
builder.Services.AddSingleton<ManageCoursePage>();
builder.Services.AddSingleton<StartupPage>();
builder.Services.AddSingleton<RoleSelectionPage>();
builder.Services.AddSingleton<AppShellViewModel>();
builder.Services.AddSingleton<LoginPageViewModel>();
builder.Services.AddSingleton<WelcomePageViewModel>();
builder.Services.AddSingleton<NewLecturePageViewModel>();
builder.Services.AddSingleton<NewTestPageViewMode>();
builder.Services.AddSingleton<ScheduleLecturePageViewModel>();
builder.Services.AddSingleton<ScheduleTestPageViewModel>();
builder.Services.AddSingleton<JoinMeetingPageViewModel>();
builder.Services.AddSingleton<ManageCoursePageViewModel>();
builder.Services.AddSingleton<NotificationsPageViewModel>();
builder.Services.AddSingleton<StartupPageViewModel>();
builder.Services.AddSingleton<FlyoutHeaderViewModel>();
builder.Services.AddSingleton<RoleSelectionPageViewModel>();
I also tried this.
WelcomePage welcomePage = new(new WelcomePageViewModel(loggedUser));
and become I need to crate shell Items dynamically
I added this
private DemyUser? loggedUser;
public WelcomePageViewModel(DemyUser? loggedUser) {
this.loggedUser = loggedUser;
GetShellItems(loggedUser?.CurrentRole);
}
private void GetShellItems(string? currentRole) {
switch(currentRole) {
case nameof(Role.Teacher):
break;
case nameof(Role.Coordinator):
break;
case nameof(Role.Student):
Debug.WriteLine("d");
break;
default:
break;
}
}
}
Developer technologies | .NET | .NET MAUI
4,160 questions