appearance.dart 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  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 = AppLanguage.fromName(name: 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(Language language) {
  33. String langaugeString = stringFromLanguageName(language);
  34. if (setting.language != langaugeString) {
  35. _language = AppLanguage.fromLanguage(language: language);
  36. setting.language = langaugeString;
  37. notifyListeners();
  38. save();
  39. }
  40. }
  41. }