123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- import 'dart:async';
- import 'package:app_flowy/user/application/user_settings_service.dart';
- import 'package:equatable/equatable.dart';
- import 'package:flowy_infra/theme.dart';
- import 'package:flowy_sdk/log.dart';
- import 'package:flowy_sdk/protobuf/flowy-user/user_setting.pb.dart';
- import 'package:flutter/material.dart';
- import 'package:easy_localization/easy_localization.dart';
- class AppearanceSettingModel extends ChangeNotifier with EquatableMixin {
- AppearanceSettings setting;
- AppTheme _theme;
- Locale _locale;
- Timer? _saveOperation;
- AppearanceSettingModel(this.setting)
- : _theme = AppTheme.fromName(name: setting.theme),
- _locale = Locale(setting.locale.languageCode, setting.locale.countryCode);
- AppTheme get theme => _theme;
- Locale get locale => _locale;
- Future<void> save() async {
- _saveOperation?.cancel();
- _saveOperation = Timer(const Duration(seconds: 2), () async {
- await UserSettingsService().setAppearanceSettings(setting);
- });
- }
- @override
- List<Object> get props {
- return [setting.hashCode];
- }
- void swapTheme() {
- final themeType = (_theme.ty == ThemeType.light ? ThemeType.dark : ThemeType.light);
- if (_theme.ty != themeType) {
- _theme = AppTheme.fromType(themeType);
- setting.theme = themeTypeToString(themeType);
- notifyListeners();
- save();
- }
- }
- void setLocale(BuildContext context, Locale newLocale) {
- if (_locale != newLocale) {
- if (!context.supportedLocales.contains(newLocale)) {
- Log.warn("Unsupported locale: $newLocale");
- newLocale = const Locale('en');
- Log.debug("Fallback to locale: $newLocale");
- }
- context.setLocale(newLocale);
- _locale = newLocale;
- setting.locale.languageCode = _locale.languageCode;
- setting.locale.countryCode = _locale.countryCode ?? "";
- notifyListeners();
- save();
- }
- }
- void readLocaleWhenAppLaunch(BuildContext context) {
- if (setting.resetAsDefault) {
- setting.resetAsDefault = false;
- save();
- setLocale(context, context.deviceLocale);
- }
- }
- }
|