Содержание
Приложения 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
нам гарантировано, что настройка будет сохранена в том месте, где предполагает операционная система — для каждой операционной системы выбирается свое хранилище.