appearance.dart 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. import 'package:app_flowy/user/infrastructure/repos/user_setting_repo.dart';
  2. import 'package:equatable/equatable.dart';
  3. import 'package:flowy_infra/theme.dart';
  4. import 'package:flowy_infra/language.dart';
  5. import 'package:flowy_sdk/protobuf/flowy-user-data-model/user_setting.pb.dart';
  6. import 'package:flutter/material.dart';
  7. import 'package:easy_localization/easy_localization.dart';
  8. class AppearanceSettingModel extends ChangeNotifier with EquatableMixin {
  9. AppearanceSettings setting;
  10. AppTheme _theme;
  11. AppLanguage _language;
  12. AppearanceSettingModel(this.setting)
  13. : _theme = AppTheme.fromName(name: setting.theme),
  14. _language = languageFromString(setting.language);
  15. AppTheme get theme => _theme;
  16. AppLanguage get language => _language;
  17. Future<void> save() async {
  18. await UserSettingReppsitory().setAppearanceSettings(setting);
  19. }
  20. @override
  21. List<Object> get props {
  22. return [setting.hashCode];
  23. }
  24. void swapTheme() {
  25. final themeType = (_theme.ty == ThemeType.light ? ThemeType.dark : ThemeType.light);
  26. if (_theme.ty != themeType) {
  27. _theme = AppTheme.fromType(themeType);
  28. setting.theme = themeTypeToString(themeType);
  29. notifyListeners();
  30. save();
  31. }
  32. }
  33. void setLanguage(BuildContext context, AppLanguage language) {
  34. String languageString = stringFromLanguage(language);
  35. if (setting.language != languageString) {
  36. context.setLocale(localeFromLanguageName(language));
  37. _language = language;
  38. setting.language = languageString;
  39. notifyListeners();
  40. save();
  41. }
  42. }
  43. void updateWithBuildContext(BuildContext context) {
  44. final language = languageFromLocale(context.deviceLocale);
  45. setLanguage(context, language);
  46. }
  47. }