mirror of
https://github.com/smmarty/friflex_flutter_starter.git
synced 2025-12-22 09:30:45 +00:00
* 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>
63 lines
2.5 KiB
Dart
63 lines
2.5 KiB
Dart
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();
|
||
}
|
||
}
|