Одним из предпочтительных вариантов хранения настроек приложения .NET MAUI является использование менеджера предпочтений, который представлен интерфейсом IPreferences и классом, который реализует интерфейс по умолчанию — Preferences. Также менеджер предпочтений часто называют хранилищем ключей и значений, что в целом никак не меняет сути.
Интерфейс IPreferences и класс Preferences
Этот интерфейс предоставляет нам удобный API для хранения настроек в виде пар «ключ-значение» в хранилище устройства. Каждая платформа использует свой API для хранения настроек приложения или пользователя:
- в iOS используется
NSUserDefaults - в Android —
SharedPreferences - в Windows —
ApplicationDataContainer
У интерфейса определены следующие методы:
| Метод | Описание |
Clear(String) |
Очищает все ключи и значения. |
Contains |
Проверяет наличие заданного ключа. |
Get<T>(String, T, String) |
Возвращает значение для заданного ключа или значение по умолчанию, указанное, если ключ не существует. |
Remove(String, String) |
Удаляет ключ и связанное с ним значение, если оно существует. |
Set<T>(String, T, String) |
Задает значение для указанного ключа. |
В пространстве имен Microsoft. определен статический класс
public static class Preferences
который предоставляет нам в своем свойстве Default реализацию интерфейса IPreferences по умолчанию. Также, в этом классе определены различные версии методов для работы с ключами и их значениями, основные из которых мы рассмотрим далее. Что касается типов данных, которые могут храниться, то с использованием менеджера предпочтений можно хранить значения следующих типов данных:
BooleanDoubleInt32SingleInt64StringDateTime
Теперь рассмотрим пример использования менеджера предпочтений в приложениях .NET MAUI.
Менеджер предпочтений в .NET MAUI
Менеджер предпочтений доступен из любого места нашего приложения. Например, создадим новое приложение .NET MAUI и изменим код файла MauiProgram.cs следующим образом:
using Microsoft.Extensions.Logging;
namespace MauiConfiguration;
public static class MauiProgram
{
public static MauiApp CreateMauiApp()
{
//устанавливаем настройки приложения
Preferences.Default.Set("Message", "Привет, .NET MAUI");
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");
fonts.AddFont("OpenSans-Semibold.ttf", "OpenSansSemibold");
});
#if DEBUG
builder.Logging.AddDebug();
#endif
return builder.Build();
}
}
Здесь мы, используя статический класс Preferences установили три настройки приложения:
Preferences.Default.Set("Message", "Привет, .NET MAUI");
Preferences.Default.Set("Text", "Это пример работы с Preferences");
Preferences.Default.Set("Date", DateTime.Now);
Для установки свойств мы использовали переопределенные методы Set(). Следует отметить, что метод Set() переписывает значение настройки, если она уже содержится в хранилище. Теперь мы можем воспользоваться этими настройками в любом месте нашего приложения, например, перепишем код метода OnCounterClicked() в классе MainPage следующим образом:
private void OnCounterClicked(object sender, EventArgs e)
{
CurrentDate.Date = Preferences.Default.Get<DateTime>("Date", DateTime.MinValue);
descriptionLabel.Text = Preferences.Default.Get("Text", "Welcome to your new app.");
helloLabel.Text = Preferences.Default.Get("Message", "Hello, world!"); ;
}
Код XAML страницы изменим следующим образом:
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="MauiConfiguration.MainPage">
<ScrollView>
<VerticalStackLayout
Padding="30,0"
Spacing="25">
<Label x:Name="helloLabel"
Text="Hello, World!"
Style="{StaticResource Headline}"
SemanticProperties.HeadingLevel="Level1" />
<Label x:Name="descriptionLabel" Text="Descriptiom"/>
<DatePicker x:Name="CurrentDate"/>
<Button
x:Name="CounterBtn"
Text="Click me"
SemanticProperties.Hint="Counts the number of times you click"
Clicked="OnCounterClicked"
HorizontalOptions="Fill" />
</VerticalStackLayout>
</ScrollView>
</ContentPage>
Проверим результат:
Итого
Менеджер предпочтений (или хранилище ключей и значений) — это один из предпочтительных способов хранения настроек приложения .NET MAUI. Для работы с менеджером используется статический класс Preferences, который реализует интерфейс IPreferences и предоставляет нам методы для чтения и записи настроек. Стоит отметить, что Preferences предназначен для хранения небольших по объему данных и использовать его для хранения, например, большого объема текста не рекомендуется.
