Загрузите модель запуска в код проекта платформы и передайте ее в PCL при инициализации Xamarin Forms - PullRequest
0 голосов
/ 30 марта 2020

Приложение, над которым я сейчас работаю, требует извлечения данных из веб-службы во время запуска приложения, что занимает примерно 1,5 секунды. После того, как данные извлечены, они должны отображаться на главной странице, а это еще 1,5–2 секунды, поскольку данные в основном являются URL-адресами изображений, которые должны отображаться, в моем случае, с использованием библиотеки ffimageloading; что означает фактическую загрузку этих изображений в первую очередь для отображения.

У меня есть стартовые экраны spla sh для Android и iOS, реализованные отдельно в проектах платформы, но экран spla sh остается включенным только в течение времени, которое Xamarin Forms требуется для загрузки и после этого исчезает, не дожидаясь загрузки моей реальной модели из веб-службы. Я искал решения для увеличения продолжительности экрана spla sh, и в основном каждое прочитанное мною решение включает создание еще одной страницы экрана spla sh, загрузку страницы, если хотите, которая уже контролируется в проекте PCL, но имеет два отдельных spla sh загрузочные экраны просто швы мне пока неосуществимы.

Поэтому мне было интересно, как можно загрузить исходную модель в проектах платформы во время фактического экрана spla sh, а затем передать ее в проект PCL, когда Xamarin Forms завершит инициализацию, предположительно App.xaml.cs App() функция конструктора?

1 Ответ

0 голосов
/ 31 марта 2020

Нет кода или достаточно деталей, поэтому я предполагаю, что это то, что вы хотите сделать. Вызовите API-интерфейсы асинхронно, пока не покажите экран spla sh.

Перед назначением MainPage в вашем App.xaml.cs вы должны вызывать эти API-интерфейсы асинхронно с await, а затем использовать их для привязки вашего главная страница

public App()
{

    InitializeComponent();
    //do all my prefetch stuff for app initialization.
    // API and what not

    var viewmodel = new AppMainViewModel();
    await viewmodel.CallFooFetchAsync();
    await viewmodel.BlahBlahAsync();
    MainPage = new NavigationPage(new AppMainPage(viewmodel));
}

На странице


public AppMainPage(AppMainViewModel vm)
{
    BindingContext =vm;
}

Таким образом, к моменту загрузки страницы все данные уже под рукой.

Вы можете изучить добавление этого кода в OnAppearing страницы.

Обратите внимание, что концепция экрана Spla sh по умолчанию заключается в том, чтобы просто показать изображение (с другой темой в Android) и установить изображение в iOS. Вы должны иметь обычный пользовательский интерфейс, технически это не экран spla sh.

В качестве альтернативы вы можете получить общий дескриптор проекта в родном

Android Sp

protected override void OnCreate(Bundle bundle)
{
...
    var app = new App(); //this will be shared project App object
    Device.BeginInvokeOnMainThread(async () => await app.DoPrefetchStuffFirst()); //API calls if needed in this async method

    //then
    LoadApplicationm(app)
}

Вы можете сделать то же самое в iOS AppDelegate

И если вы вызываете нативные методы спецификаций c на платформах (может быть для вызовов API), тогда вы используете функцию DependencyService, которая передаст ее в общий доступ. проект или пользовательский рендерер в зависимости от того, где вы хотите его использовать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...