Содержание
Приложения Blazor Hybird хоть и разрабатываются практически как обычные приложения Blazor с использованием HTML-разметки, возможностью работы с CSS и JS, однако компоненты Blazor Hybrid не выполняются в браузере. При этом, любое более менее сложное приложение содержит в себе систему настроек, которые можно сохранить и при следующем запуске приложения загрузить и применить. В Blazor Hybird существует несколько вариантов хранения настроек приложения.
Варианты хранения настроек в Blazor Hybrid
Можно выделить следующие варианты хранения настроек:
- Использование хранилища ключей и значений (использование интерфейса
IPreferences) - Использовать файлы
- Использовать локальные базы данных, например, 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
По крайней мере, для приложения 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 нам гарантировано, что настройка будет сохранена в том месте, где предполагает операционная система — для каждой операционной системы выбирается свое хранилище.