Хранение настроек в Blazor Hybrid. Интерфейс IPreferences

Приложения Blazor Hybird хоть и разрабатываются практически как обычные приложения Blazor с использованием HTML-разметки, возможностью работы с CSS и JS, однако компоненты Blazor Hybrid не выполняются в браузере. При этом, любое более менее сложное приложение содержит в себе систему настроек, которые можно сохранить и при следующем запуске приложения загрузить и применить. В Blazor Hybird существует несколько вариантов хранения настроек приложения.

Варианты хранения настроек в Blazor Hybrid

Можно выделить следующие варианты хранения настроек:

  1. Использование хранилища ключей и значений (использование интерфейса IPreferences)
  2. Использовать файлы
  3. Использовать локальные базы данных, например, SQLite

Все три варианта имеют свою нишу для использования. Например, хранилище ключей удобно использовать, когда нам необходимо хранить какие-либо атомарные данные, например, строки, числа, даты и т.д. Файлы стоит применять в том случае, если вам необходимо сохранять для последующего использования большие фрагменты данных, например, XML- или JSON-файлы с последними редактируемыми данными пользователем. Базы данных SQLite удобно использовать, когда необходимо хранить данные, имеющие какие-либо взаимосвязи или же, когда вам необходимо производить фильтрацию данных, например, по времени/дате. Сегодня рассмотрим первый вариант хранения настроек приложения Blazor Hybrid — использование хранилища ключей и значений.

Интерфейс IPreferences

Описание интерфейса находится в пространстве имен Microsoft.Maui.Storage. Реализация интерфейса IPreferences позволяет получить доступ к хранилищу настроек приложения и выполнять над ними операции добавления (Set), чтения (Get), удаления (Remove) и проверки существования (ContainsKey). Чтобы получить доступ к реализации IPreferences по умолчанию достаточно получить значение статического класса Preferences.Default.

С помощью Preferences можно хранить следующие типы данных:

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

  • в Windows используется ApplicationDataContainer
  • в Android — SharedPreferences или Preferences
  • в iOS — NSUserDefaults

Рассмотрим примеры сохранения и чтения настроек в Blazor Hybird 

Примеры использования Preferences

Для примера будем использовать шаблон приложения Blazor Hybird в Visual Studio 2022 v17.4

Запись и чтение настроек

Создадим настройку имени пользователя и, при очередном запуске приложения будем здороваться правильно. Открываем компонент Pages/Index.razor и добавляем в него следующие строки:

@page "/"

<h1>Hello, @user.Name</h1>

Welcome to your new app.

@if (user.LoginDate == DateTime.MinValue)
{
    <EditForm Model="user" OnSubmit="SavePreferences">
        <label for="user">Представьтесь:
        <InputText id="user" @bind-Value="user.Name"></InputText>
        </label>
    <button type="submit" class="btn btn-primary">Запомнить</button>
    </EditForm>
}
else
{
<p>Последний раз вы заходили к нам @user.LoginDate</p>    
 user.LoginDate = DateTime.Now;
 Preferences.Default.Set<DateTime>("LoginDate", user.LoginDate);
}

<SurveyPrompt Title="How is Blazor working for you?" />


@code 
{

    public class User
    {
        public string Name { get; set; }
        public DateTime LoginDate { get; set; }
    };

    User user = new() { Name = "Anonymous", LoginDate = DateTime.MinValue };

    protected override void OnInitialized()
    {
        if (Preferences.Default.ContainsKey("UserName"))
        {
            user.Name = Preferences.Default.Get<string>("UserName", "Anonymous");
        }
        if (Preferences.Default.ContainsKey("LoginDate"))
        {
            user.LoginDate = Preferences.Default.Get<DateTime>("LoginDate", DateTime.MinValue);
        }

    }

    public void SavePreferences()
    {
        Preferences.Default.Set("UserName", user.Name);
        user.LoginDate = DateTime.Now;
        Preferences.Default.Set("LoginDate", user.LoginDate);
        
    }
}

Разберем логику работы этого компонента. Вначале мы создаем объект класса User и присваиваем ему значения по умолчанию — имя «Anonymous» и дату последнего логина равную DateTime.MinValue. При инициализации компонента в методе OnInitialized мы проверяем есть ли в хранилище Preferences ключи с именами UserName и LoginDate и, если такие ключи имеются, то считываем их значения.

Далее, в разметке компонента мы проверяем дату последнего запуска приложения. Если дата равна DateTime.MinValue, то считаем, что это новый пользователь и выводим форму в которую пользователь вводит свое имя. Как только пользователь нажимает кнопку «Запомнить», срабатывает обработчик SavePreferences и имя пользователя и текущая дата/время записывается в Preferences. Если дата последнего запуска больше, чем DateTime.MinValue, то в разметке компонента мы просто запоминаем очередную дату запуска приложения пользователем.

Вот как будет выглядеть наше приложение

Теперь, если перезапустить через какое-то время приложение, то настройки будут получены из хранилища и пользователю не придется вводить свое имя второй раз.

Удаление настроек

Вполне возможно, что пользователь захочет «обнулить» ранее введенные данные и пройти нашу импровизированную регистрацию ещё раз. Допишем наш компонент следующим образом:

.......
@if (user.LoginDate == DateTime.MinValue)
{
    ........
}
else
{
 .........   
  <button class="btn btn-danger" @onclick="DeletePreferences">Забудь меня!</button>

}

.........  


@code 
{

   .........  

    private void DeletePreferences()
    {
        user.LoginDate = DateTime.MinValue;
        user.Name = "Anonymous";
        Preferences.Default.Remove("UserName");
        Preferences.Default.Remove("LoginDate");
    }

.........  
}

Здесь мы добавили кнопку «Забудь меня!» клик по которой вызывает метод DeletePreferences в котором полям объекта присваиваются значения по умолчанию, а из Preferences последовательно удаляются оба ключа с их значениями. Здесь мы воспользовались методом Remove, который удаляет один ключ за раз. Если необходимо удалить сразу все ключи, то можно воспользоваться методом Clear. Результат работы приложения будет следующим:

Удаление параметров из Preferences

 

Где физически хранятся настройки Preferences

По крайней мере, для приложения Blazor Hybrid файл с настройками называется settings.dat и находится по следующему пути:

c:\Users\%UserName%\AppData\Local\Packages\%ApplicationIdGuid%_%Произвольный ID%\Settings\

где %UserName% — имя пользователя Windows

%ApplicationIdGuid% — GUID приложения, который можно посмотреть в файле проекта. Для этого кликаем правой кнопкой мыши по названию проекта в Visual Studio и выбираем пункт «Изменить файл проекта». Например, для приложения из статьи GUID был такой

<ApplicationIdGuid>79F33142-4E0A-462D-B0CC-F1E277E175DE</ApplicationIdGuid>

Стоит отметить, что файл settings.dat бинарный и вряд ли его возможно исправлять в том же «Блокноте».

 Итого

Сегодня мы рассмотрели наиболее простой способ сохранения настроек приложения Blazor Hybrid — использование Preferences. Этим способом рекомендуется сохранять небольшие по объему данные, например, числа, даты или строки размером не более 8 Кб. При использовании Preferences нам гарантировано, что настройка будет сохранена в том месте, где предполагает операционная система — для каждой операционной системы выбирается свое хранилище.

 

Подписаться
Уведомить о
guest
0 Комментарий
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии