From 51ab1b6798f0aa10de413e27b44404fa3e49df84 Mon Sep 17 00:00:00 2001 From: Ian Su Date: Tue, 5 Jul 2022 10:12:09 +0800 Subject: [PATCH] feat: add widget to update username --- .../app_flowy/assets/translations/en.json | 1 + .../presentation/home/menu/menu_user.dart | 2 +- .../settings/settings_dialog.dart | 19 +++++--- .../settings/widgets/settings_menu.dart | 10 ++++ .../widgets/settings_settings_view.dart | 48 +++++++++++++++++++ 5 files changed, 73 insertions(+), 7 deletions(-) create mode 100644 frontend/app_flowy/lib/workspace/presentation/settings/widgets/settings_settings_view.dart diff --git a/frontend/app_flowy/assets/translations/en.json b/frontend/app_flowy/assets/translations/en.json index a6f9b4d3ae..de2f8f7039 100644 --- a/frontend/app_flowy/assets/translations/en.json +++ b/frontend/app_flowy/assets/translations/en.json @@ -141,6 +141,7 @@ "menu": { "appearance": "Appearance", "language": "Language", + "settings": "Settings", "open": "Open Settings" }, "appearance": { diff --git a/frontend/app_flowy/lib/workspace/presentation/home/menu/menu_user.dart b/frontend/app_flowy/lib/workspace/presentation/home/menu/menu_user.dart index 6b75c9ef3f..e819a0ed40 100644 --- a/frontend/app_flowy/lib/workspace/presentation/home/menu/menu_user.dart +++ b/frontend/app_flowy/lib/workspace/presentation/home/menu/menu_user.dart @@ -74,7 +74,7 @@ class MenuUser extends StatelessWidget { showDialog( context: context, builder: (context) { - return const SettingsDialog(); + return SettingsDialog(user); }, ); }, diff --git a/frontend/app_flowy/lib/workspace/presentation/settings/settings_dialog.dart b/frontend/app_flowy/lib/workspace/presentation/settings/settings_dialog.dart index 8c7bb8f494..3d0f59bdd8 100644 --- a/frontend/app_flowy/lib/workspace/presentation/settings/settings_dialog.dart +++ b/frontend/app_flowy/lib/workspace/presentation/settings/settings_dialog.dart @@ -2,13 +2,16 @@ import 'package:app_flowy/generated/locale_keys.g.dart'; import 'package:app_flowy/workspace/application/appearance.dart'; import 'package:app_flowy/workspace/presentation/settings/widgets/settings_appearance_view.dart'; import 'package:app_flowy/workspace/presentation/settings/widgets/settings_language_view.dart'; +import 'package:app_flowy/workspace/presentation/settings/widgets/settings_settings_view.dart'; import 'package:app_flowy/workspace/presentation/settings/widgets/settings_menu.dart'; +import 'package:flowy_sdk/protobuf/flowy-user/protobuf.dart' show UserProfile; import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; class SettingsDialog extends StatefulWidget { - const SettingsDialog({Key? key}) : super(key: key); + final UserProfile user; + SettingsDialog(this.user, {Key? key}) : super(key: ValueKey(user.id)); @override State createState() => _SettingsDialogState(); @@ -17,10 +20,14 @@ class SettingsDialog extends StatefulWidget { class _SettingsDialogState extends State { int _selectedViewIndex = 0; - final List settingsViews = const [ - SettingsAppearanceView(), - SettingsLanguageView(), - ]; + Widget getSettingsView(int index, UserProfile user) { + final List settingsViews = [ + const SettingsAppearanceView(), + const SettingsLanguageView(), + SettingsSettingsView(user), + ]; + return settingsViews[index]; + } @override Widget build(BuildContext context) { @@ -59,7 +66,7 @@ class _SettingsDialogState extends State { const VerticalDivider(), const SizedBox(width: 10), Expanded( - child: settingsViews[_selectedViewIndex], + child: getSettingsView(_selectedViewIndex, widget.user), ) ], ), diff --git a/frontend/app_flowy/lib/workspace/presentation/settings/widgets/settings_menu.dart b/frontend/app_flowy/lib/workspace/presentation/settings/widgets/settings_menu.dart index 241c337705..6900328f60 100644 --- a/frontend/app_flowy/lib/workspace/presentation/settings/widgets/settings_menu.dart +++ b/frontend/app_flowy/lib/workspace/presentation/settings/widgets/settings_menu.dart @@ -34,6 +34,16 @@ class SettingsMenu extends StatelessWidget { icon: Icons.translate, changeSelectedIndex: changeSelectedIndex, ), + const SizedBox( + height: 10, + ), + SettingsMenuElement( + index: 2, + currentIndex: currentIndex, + label: LocaleKeys.settings_menu_settings.tr(), + icon: Icons.account_box_outlined, + changeSelectedIndex: changeSelectedIndex, + ), ], ); } diff --git a/frontend/app_flowy/lib/workspace/presentation/settings/widgets/settings_settings_view.dart b/frontend/app_flowy/lib/workspace/presentation/settings/widgets/settings_settings_view.dart new file mode 100644 index 0000000000..6b33022577 --- /dev/null +++ b/frontend/app_flowy/lib/workspace/presentation/settings/widgets/settings_settings_view.dart @@ -0,0 +1,48 @@ +import 'package:app_flowy/startup/startup.dart'; +import 'package:flutter/material.dart'; +import 'package:app_flowy/workspace/application/menu/menu_user_bloc.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:flowy_sdk/protobuf/flowy-user/protobuf.dart' show UserProfile; + +class SettingsSettingsView extends StatelessWidget { + final UserProfile user; + SettingsSettingsView(this.user, {Key? key}) : super(key: ValueKey(user.id)); + + @override + Widget build(BuildContext context) { + return BlocProvider( + create: (context) => getIt(param1: user)..add(const MenuUserEvent.initial()), + child: BlocBuilder( + builder: (context, state) => SingleChildScrollView( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: const [UserNameInput()], + ), + ), + ), + ); + } +} + +class UserNameInput extends StatefulWidget { + const UserNameInput({ + Key? key, + }) : super(key: key); + + @override + State createState() => _UserNameInputState(); +} + +class _UserNameInputState extends State { + @override + Widget build(BuildContext context) { + return TextField( + decoration: const InputDecoration( + labelText: 'Name', + ), + onSubmitted: (val) { + context.read().add(MenuUserEvent.updateUserName(val)); + debugPrint("Value $val submitted"); + }); + } +}