appearance.dart 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  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_sdk/protobuf/flowy-user-data-model/user_setting.pb.dart';
  5. import 'package:flutter/material.dart';
  6. import 'package:easy_localization/easy_localization.dart';
  7. import 'package:async/async.dart';
  8. class AppearanceSettingModel extends ChangeNotifier with EquatableMixin {
  9. AppearanceSettings setting;
  10. AppTheme _theme;
  11. Locale _locale;
  12. CancelableOperation? _saveOperation;
  13. AppearanceSettingModel(this.setting)
  14. : _theme = AppTheme.fromName(name: setting.theme),
  15. _locale = Locale(setting.locale.languageCode, setting.locale.countryCode);
  16. AppTheme get theme => _theme;
  17. Locale get locale => _locale;
  18. Future<void> save() async {
  19. _saveOperation?.cancel;
  20. _saveOperation = CancelableOperation.fromFuture(
  21. Future.delayed(const Duration(seconds: 1), () async {
  22. await UserSettingReppsitory().setAppearanceSettings(setting);
  23. }),
  24. );
  25. }
  26. @override
  27. List<Object> get props {
  28. return [setting.hashCode];
  29. }
  30. void swapTheme() {
  31. final themeType = (_theme.ty == ThemeType.light ? ThemeType.dark : ThemeType.light);
  32. if (_theme.ty != themeType) {
  33. _theme = AppTheme.fromType(themeType);
  34. setting.theme = themeTypeToString(themeType);
  35. notifyListeners();
  36. save();
  37. }
  38. }
  39. void setLocale(BuildContext context, Locale newLocale) {
  40. if (_locale != newLocale) {
  41. context.setLocale(newLocale);
  42. _locale = newLocale;
  43. setting.locale.languageCode = _locale.languageCode;
  44. setting.locale.countryCode = _locale.countryCode ?? "";
  45. notifyListeners();
  46. save();
  47. }
  48. }
  49. void readLocaleWhenAppLaunch(BuildContext context) {
  50. if (setting.resetAsDefault) {
  51. setting.resetAsDefault = false;
  52. save();
  53. setLocale(context, context.deviceLocale);
  54. }
  55. }
  56. }