appearance.dart 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  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. import 'package:async/async.dart';
  9. class AppearanceSettingModel extends ChangeNotifier with EquatableMixin {
  10. AppearanceSettings setting;
  11. AppTheme _theme;
  12. AppLanguage _language;
  13. CancelableOperation? _saveOperation;
  14. AppearanceSettingModel(this.setting)
  15. : _theme = AppTheme.fromName(name: setting.theme),
  16. _language = languageFromString(setting.language);
  17. AppTheme get theme => _theme;
  18. AppLanguage get language => _language;
  19. Future<void> save() async {
  20. _saveOperation?.cancel;
  21. _saveOperation = CancelableOperation.fromFuture(
  22. Future.delayed(const Duration(seconds: 1), () async {
  23. await UserSettingReppsitory().setAppearanceSettings(setting);
  24. }),
  25. );
  26. }
  27. @override
  28. List<Object> get props {
  29. return [setting.hashCode];
  30. }
  31. void swapTheme() {
  32. final themeType = (_theme.ty == ThemeType.light ? ThemeType.dark : ThemeType.light);
  33. if (_theme.ty != themeType) {
  34. _theme = AppTheme.fromType(themeType);
  35. setting.theme = themeTypeToString(themeType);
  36. notifyListeners();
  37. save();
  38. }
  39. }
  40. void setLanguage(BuildContext context, AppLanguage language) {
  41. String languageString = stringFromLanguage(language);
  42. if (setting.language != languageString) {
  43. context.setLocale(localeFromLanguageName(language));
  44. _language = language;
  45. setting.language = languageString;
  46. notifyListeners();
  47. save();
  48. }
  49. }
  50. void readLocaleWhenAppLaunch(BuildContext context) {
  51. if (setting.resetAsDefault) {
  52. setting.resetAsDefault = false;
  53. save();
  54. final language = languageFromLocale(context.deviceLocale);
  55. setLanguage(context, language);
  56. }
  57. }
  58. }