appearance.dart 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  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. class AppearanceSettingModel extends ChangeNotifier with EquatableMixin {
  8. AppearanceSettings setting;
  9. AppTheme _theme;
  10. AppLanguage _language;
  11. AppearanceSettingModel(this.setting)
  12. : _theme = AppTheme.fromName(name: setting.theme),
  13. _language = languageFromString(setting.language);
  14. AppTheme get theme => _theme;
  15. AppLanguage get language => _language;
  16. Future<void> save() async {
  17. await UserSettingReppsitory().setAppearanceSettings(setting);
  18. }
  19. @override
  20. List<Object> get props {
  21. return [setting.hashCode];
  22. }
  23. void swapTheme() {
  24. final themeType = (_theme.ty == ThemeType.light ? ThemeType.dark : ThemeType.light);
  25. if (_theme.ty != themeType) {
  26. _theme = AppTheme.fromType(themeType);
  27. setting.theme = themeTypeToString(themeType);
  28. notifyListeners();
  29. save();
  30. }
  31. }
  32. void setLanguage(AppLanguage language) {
  33. String languageString = stringFromLanguageName(language);
  34. if (setting.language != languageString) {
  35. _language = language;
  36. print('language changed to $languageString');
  37. setting.language = languageString;
  38. notifyListeners();
  39. save();
  40. }
  41. }
  42. }