Files
friflex_flutter_starter/lib/l10n/localization_notifier.dart
Yuri Petrov 6500b917c5 refactor(app): обновить структуру приложения и удалить устаревшие провайдеры (#44)
* refactor(app): обновить структуру приложения и удалить устаревшие провайдеры
* refactor(runner): упростить обработку ошибок и улучшить логирование времени инициализации
* refactor(runner): улучшить порядок инициализации приложения и обработку ошибок
* refactor(app): исправить контекст MediaQuery для предотвращения перерисовки
* refactor(pp): удалить главный виджет приложения и заменить его на AppRoot
* docs(copilot-instructions): уточнить правила проведения Code Review на русском языке
* refactor(linter): добавить правило avoid_catches_without_on_clauses для улучшения обработки исключений

---------

Co-authored-by: petrovyuri <petrovyuri@example.com>
2025-12-11 21:18:24 +03:00

63 lines
2.5 KiB
Dart
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
/// Тип функции для построения виджета с учетом локализации
typedef LocalizationBuilder = Widget Function(BuildContext context);
/// {@template localization_consumer}
/// Виджет для подписки на изменения локализации приложения.
///
/// Автоматически перестраивает дочерние виджеты при изменении языка,
/// обеспечивая реактивность интерфейса к изменениям настроек локализации.
/// {@endtemplate}
class LocalizationConsumer extends StatelessWidget {
/// {@macro localization_consumer}
const LocalizationConsumer({required this.builder, super.key});
/// Функция для построения виджета с учетом текущей локализации
final LocalizationBuilder builder;
@override
Widget build(BuildContext context) {
return Consumer<LocalizationNotifier>(
builder: (context, _, _) {
return builder(context);
},
);
}
}
/// {@template localization_notifier}
/// Класс для управления локализацией приложения.
///
/// Отвечает за:
/// - Хранение текущей локали приложения
/// - Уведомление подписчиков об изменениях языка
/// - Переключение между поддерживаемыми языками
/// {@endtemplate}
final class LocalizationNotifier extends ChangeNotifier {
/// {@macro localization_notifier}
LocalizationNotifier();
/// Текущая локаль приложения
/// По умолчанию используется русский язык
Locale _locale = const Locale('ru', 'RU');
/// Получение текущей локали
Locale get locale => _locale;
/// Получение текущего языка в виде кода языка
String get language => _locale.languageCode;
/// Метод для изменения локали приложения.
///
/// Принимает:
/// - [locale] - новая локаль для установки
///
/// Уведомляет всех подписчиков об изменении локали.
void changeLocal(Locale locale) {
_locale = locale;
notifyListeners();
}
}