IPreferences — хранение настроек приложения в хранилище ключей и значений устройства

Интерфейс IConfiguration для конфигурации приложения применяется во всех типах приложений ASP.NET Core и, в частности, в приложениях Blazor. Однако, это не единственный способ хранения настроек приложения для Blazor Hybrid. В Blazor Hybrid возможно также обеспечить хранение настроек приложения в хранилище ключей и значений устройства. Для этого мы можем использовать реализации интерфейсов IPreferences или ISecureStorage, содержащиеся в пространстве имен Microsoft.Maui.Storage. В этой части мы рассмотрим использование IPreferences

Интерфейс IPreferences и класс Preferences

Этот интерфейс предоставляет нам удобный API для хранения настроек в виде пар «ключ-значение» в хранилище устройства. Каждая платформа использует свой API для хранения настроек приложения или пользователя:

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

У интерфейса определены следующие методы:

Метод Описание
Clear(String) Очищает все ключи и значения.
ContainsKey(String, String) Проверяет наличие заданного ключа.
Get<T>(String, T, String) Возвращает значение для заданного ключа или значение по умолчанию, указанное, если ключ не существует.
Remove(String, String) Удаляет ключ и связанное с ним значение, если оно существует.
Set<T>(String, T, String) Задает значение для указанного ключа.

В пространстве имен Microsoft.Maui.Storage определен статический класс

public static class Preferences

который предоставляет нам в своем свойстве Default реализацию интерфейса IPreferences по умолчанию. Также, в этом классе определены различные версии методов для работы с ключами и их значениями, основные из которых мы рассмотрим далее. Что касается типов данных, которые могут храниться, то с использованием Preferences можно хранить:

  • Boolean
  • Double
  • Int32
  • Single
  • Int64
  • String
  • DateTime

Теперь рассмотрим пример использования класса Preferences.

Использование Preferences для работы с настройками приложения

Создадим новое приложение Blazor Hybrid и изменим файл MauiProgram.cs следующим образом:

using Microsoft.Extensions.Logging;

namespace BlazorPreferences
{
    public static class MauiProgram
    {
        public static MauiApp CreateMauiApp()
        {
            //устанавливаем настройки приложения
            Preferences.Default.Set("Message", "Привет, Blazor");
            Preferences.Default.Set("Text", "Это пример работы с Preferences");
            Preferences.Default.Set("Date", DateTime.Now);


            var builder = MauiApp.CreateBuilder();
            builder
                .UseMauiApp<App>()
                .ConfigureFonts(fonts =>
                {
                    fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular");
                });

            builder.Services.AddMauiBlazorWebView();

#if DEBUG
    		builder.Services.AddBlazorWebViewDeveloperTools();
    		builder.Logging.AddDebug();
#endif

            return builder.Build();
        }
    }
}

Здесь мы, используя статический класс Preferences установили три настройки приложения:

Preferences.Default.Set("Message", "Привет, Blazor");
Preferences.Default.Set("Text", "Это пример работы с Preferences");
Preferences.Default.Set("Date", DateTime.Now);

Для установки свойств мы использовали переопределенные методы Set(). Следует отметить, что метод Set() переписываем значение настройки, если она уже содержится в хранилище. Теперь мы можем воспользоваться этими настройками в любом месте нашего приложения, например, в компоненте Home:

@page "/"

<h1>@message</h1>

@text

@date

@code{
    string message;
    string text;
    DateTime date;

    protected override void OnInitialized()
    {
        message = Preferences.Default.Get("Message", "Hello, world!");
        text = Preferences.Default.Get("Text", "Welcome to your new app.");
        date = Preferences.Default.Get("Date", DateTime.MinValue);
    }
}

Обратите внимание на то, что мы нигде не подключаем новое пространство имен — оно уже подключено по умолчанию в проекте Blazor Hybrid. В компоненте мы переопределили один из методов жизненного цикла компонента и считали значение настроек, используя метод Get():

public static string? Get (string key, string? defaultValue, string? sharedName);

То есть, если настройка содержится в хранилище, то возвращается её значение, иначе — возвращается значение по умолчанию, определенное во втором параметре метода. Запустим приложение и посмотрим на результат:

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

@page "/"

<h1>@message</h1>

@text

<br/>

@date
<br/>
<button @onclick="Clear">Очистить настойки</button>

@code{
    string message;
    string text;
    DateTime date;

    private void ReadPreferences()
    {
        message = Preferences.Default.Get("Message", "Hello, world!");
        text = Preferences.Default.Get("Text", "Welcome to your new app.");
        date = Preferences.Default.Get("Date", DateTime.MinValue);
    }

    protected override void OnInitialized()
    {
        ReadPreferences();
    }

    public void Clear()
    {
        Preferences.Default.Clear();
        ReadPreferences();
    }
}

После запуска приложения вы увидите главную страницу приложения в том виде, в котором она представлена на рисунке выше — все настройки будут прочитаны из хранилища и применены. После того, как будет нажата кнопка «Очистить настройки», все настройки будут удалены и, поэтому, при очередной попытке получить значения настроек в методе ReadPreferences() всем настройкам будет присвоено значение по умолчанию:

Итого

IPreferences — это интерфейс, предоставляющий нам API для хранения настроек приложения в виде пар «ключ-значение» в хранилище устройства. Интерфейс реализуется статическим классом Preferences, который содержится в пространстве имен Microsoft.Maui.Storage

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