settings_dialog.dart 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. import 'package:app_flowy/startup/startup.dart';
  2. import 'package:app_flowy/generated/locale_keys.g.dart';
  3. import 'package:app_flowy/workspace/presentation/settings/widgets/settings_appearance_view.dart';
  4. import 'package:app_flowy/workspace/presentation/settings/widgets/settings_language_view.dart';
  5. import 'package:app_flowy/workspace/presentation/settings/widgets/settings_user_view.dart';
  6. import 'package:app_flowy/workspace/presentation/settings/widgets/settings_menu.dart';
  7. import 'package:app_flowy/workspace/application/settings/settings_dialog_bloc.dart';
  8. import 'package:flowy_infra_ui/flowy_infra_ui.dart';
  9. import 'package:flowy_infra_ui/style_widget/text.dart';
  10. import 'package:flowy_sdk/protobuf/flowy-user/user_profile.pb.dart';
  11. import 'package:easy_localization/easy_localization.dart';
  12. import 'package:flutter/material.dart';
  13. import 'package:flutter_bloc/flutter_bloc.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)
  29. ..add(const SettingsDialogEvent.initial()),
  30. child: BlocBuilder<SettingsDialogBloc, SettingsDialogState>(
  31. builder: (context, state) => FlowyDialog(
  32. title: FlowyText(
  33. LocaleKeys.settings_title.tr(),
  34. fontSize: 20,
  35. fontWeight: FontWeight.w700,
  36. ),
  37. child: Row(
  38. crossAxisAlignment: CrossAxisAlignment.start,
  39. children: [
  40. SizedBox(
  41. width: 200,
  42. child: SettingsMenu(
  43. changeSelectedIndex: (index) {
  44. context
  45. .read<SettingsDialogBloc>()
  46. .add(SettingsDialogEvent.setViewIndex(index));
  47. },
  48. currentIndex:
  49. context.read<SettingsDialogBloc>().state.viewIndex,
  50. ),
  51. ),
  52. const VerticalDivider(),
  53. const SizedBox(width: 10),
  54. Expanded(
  55. child: getSettingsView(
  56. context.read<SettingsDialogBloc>().state.viewIndex,
  57. context.read<SettingsDialogBloc>().state.userProfile,
  58. ),
  59. )
  60. ],
  61. ),
  62. ),
  63. ),
  64. );
  65. }
  66. }