Отображение информации о аутентифицированном пользователе в AppShell FlyoutHeaderTemplate

Я пытаюсь создать всплывающий заголовок, который отображает аватар и имя аутентифицированного пользователя в FlyoutHeaderTemplate.

Проблема, с которой я столкнулся, заключается в том, что похоже, что метод OnAppearing() вообще не вызывается для AppShell. Я ставил точки останова в этом методе и никогда не попадал в него.

Я также пытался использовать ContentView для отображения заголовка во всплывающем окне, но оказалось, что у ContentView нет событий жизненного цикла OnAppearing() или OnDisappearing().

Как отобразить информацию о аутентифицированном пользователе во всплывающем меню? У меня есть информация о пользователе в моей локальной базе данных. Все, что мне нужно сделать, это:

  1. Возможность вызвать var user = await _dbService.GetUser();, чтобы прочитать информацию о пользователе
  2. Мне также нужно иметь возможность привязываться к определенным элементам управления, то есть Label для имени пользователя и Avatar для изображения пользователя.

Вот что у меня в AppShell:

<Shell.FlyoutHeaderTemplate>
   <DataTemplate>
      <StackLayout>
         <Label Text = "{Binding ???}"/>
      </StackLayout>
   </DataTemplate>
</Shell.FlyoutHeaderTemplate>

Похоже, что оболочка имеет Появляющееся событие. Вы можете подключиться к этому?

Andrew 16.03.2022 16:44

Это то, что я пробовал, но это не сработало. На самом деле, когда я прочитал информацию по предоставленной вами ссылке, похоже, что предполагаемое поведение событий появления и исчезновения для оболочки немного отличается. Например, эта ссылка гласит: «В приложении Shell добавление модальной страницы в стек модальной навигации приведет к тому, что все видимые объекты Shell вызовут событие Disappearing».

Sam 16.03.2022 16:49
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
2
41
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

При первом запуске Appshell он попадет в конструктор, поэтому вы можете вызвать var user = await _dbService.GetUser(); в конструкторе. Затем привяжите оболочку к самой себе this.BindingContext = this;. Добавьте строковое свойство, чтобы привязать его к текстовой метке в xaml.

private string name;
public string Name { get{return name;} set { SetProperty(ref name, value); } 

public AppShell()
{
  InitializeComponent();
   Task.Run(async () =>
                    {
                        await GetUser();
                    });
  this.BindingContext = this;
}

public async void GetUser(){
  var user = await _dbService.GetUser();  
  Name = user.Name; 
}

OnAppearing() будет бить всякий раз, когда вы идете в await Shell.Current.GoToAsync("..");. Так что вы также можете вызвать var user = await _dbService.GetUser(); в нем.

Другие вопросы по теме