import 'package:flutter/material.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; import '../theme/theme_provider.dart'; const _localeKey = 'buzz_locale'; /// A null locale follows the operating system. Explicit choices are persisted /// locally because language is a device preference, not relay protocol state. class AppLocaleNotifier extends Notifier { @override Locale? build() { return switch (ref.read(savedPrefsProvider).getString(_localeKey)) { 'en' => const Locale('en'), 'zh_CN' => const Locale('zh', 'CN'), _ => null, }; } void setLocale(Locale? locale) { state = locale; final prefs = ref.read(savedPrefsProvider); if (locale == null) { prefs.setString(_localeKey, 'system'); } else if (locale.languageCode == 'zh') { prefs.setString(_localeKey, 'zh_CN'); } else { prefs.setString(_localeKey, 'en'); } } } final appLocaleProvider = NotifierProvider( AppLocaleNotifier.new, );