settings_dialog.dart 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. import 'package:app_flowy/startup/startup.dart';
  2. import 'package:app_flowy/generated/locale_keys.g.dart';
  3. import 'package:app_flowy/workspace/application/appearance.dart';
  4. import 'package:app_flowy/workspace/presentation/settings/widgets/settings_appearance_view.dart';
  5. import 'package:app_flowy/workspace/presentation/settings/widgets/settings_language_view.dart';
  6. import 'package:app_flowy/workspace/presentation/settings/widgets/settings_user_view.dart';
  7. import 'package:app_flowy/workspace/presentation/settings/widgets/settings_menu.dart';
  8. import 'package:app_flowy/workspace/application/settings/settings_dialog_bloc.dart';
  9. import 'package:flowy_sdk/protobuf/flowy-user/user_profile.pb.dart';
  10. import 'package:easy_localization/easy_localization.dart';
  11. import 'package:flutter/material.dart';
  12. import 'package:flutter_bloc/flutter_bloc.dart';
  13. import 'package:provider/provider.dart';
  14. class SettingsDialog extends StatelessWidget {
  15. final UserProfilePB user;
  16. SettingsDialog(this.user, {Key? key}) : super(key: ValueKey(user.id));
  17. Widget getSettingsView(int index, UserProfilePB user) {
  18. final List<Widget> settingsViews = [
  19. const SettingsAppearanceView(),
  20. const SettingsLanguageView(),
  21. SettingsUserView(user),
  22. ];
  23. return settingsViews[index];
  24. }
  25. @override
  26. Widget build(BuildContext context) {
  27. return BlocProvider<SettingsDialogBloc>(
  28. create: (context) => getIt<SettingsDialogBloc>(param1: user)..add(const SettingsDialogEvent.initial()),
  29. child: BlocBuilder<SettingsDialogBloc, SettingsDialogState>(
  30. builder: (context, state) => ChangeNotifierProvider.value(
  31. value: Provider.of<AppearanceSettingModel>(context, listen: true),
  32. child: AlertDialog(
  33. shape: RoundedRectangleBorder(
  34. borderRadius: BorderRadius.circular(10),
  35. ),
  36. title: Text(
  37. LocaleKeys.settings_title.tr(),
  38. style: const TextStyle(
  39. fontWeight: FontWeight.bold,
  40. ),
  41. ),
  42. content: ConstrainedBox(
  43. constraints: const BoxConstraints(
  44. maxHeight: 600,
  45. minWidth: 600,
  46. maxWidth: 1000,
  47. ),
  48. child: Row(
  49. crossAxisAlignment: CrossAxisAlignment.start,
  50. children: [
  51. SizedBox(
  52. width: 200,
  53. child: SettingsMenu(
  54. changeSelectedIndex: (index) {
  55. context.read<SettingsDialogBloc>().add(SettingsDialogEvent.setViewIndex(index));
  56. },
  57. currentIndex: context.read<SettingsDialogBloc>().state.viewIndex,
  58. ),
  59. ),
  60. const VerticalDivider(),
  61. const SizedBox(width: 10),
  62. Expanded(
  63. child: getSettingsView(context.read<SettingsDialogBloc>().state.viewIndex,
  64. context.read<SettingsDialogBloc>().state.userProfile),
  65. )
  66. ],
  67. ),
  68. ),
  69. ),
  70. )));
  71. }
  72. }