Add new profile settings

This commit is contained in:
shilangyu 2021-04-27 22:22:02 +02:00
parent 683da30532
commit 35ea0587b5
2 changed files with 75 additions and 39 deletions

View File

@ -15,6 +15,7 @@ import '../util/more_icon.dart';
import '../util/pictrs.dart'; import '../util/pictrs.dart';
import '../widgets/bottom_modal.dart'; import '../widgets/bottom_modal.dart';
import '../widgets/bottom_safe.dart'; import '../widgets/bottom_safe.dart';
import '../widgets/editor.dart';
/// Page for managing things like username, email, avatar etc /// Page for managing things like username, email, avatar etc
/// This page will assume the manage account is logged in and /// This page will assume the manage account is logged in and
@ -109,11 +110,15 @@ class _ManageAccount extends HookWidget {
final avatar = useRef(user.person.avatar); final avatar = useRef(user.person.avatar);
final banner = useRef(user.person.banner); final banner = useRef(user.person.banner);
final showNsfw = useState(user.localUser.showNsfw); final showNsfw = useState(user.localUser.showNsfw);
final botAccount = useState(user.person.botAccount);
final showBotAccounts = useState(user.localUser.showBotAccounts);
final showReadPosts = useState(user.localUser.showReadPosts);
final sendNotificationsToEmail = final sendNotificationsToEmail =
useState(user.localUser.sendNotificationsToEmail); useState(user.localUser.sendNotificationsToEmail);
final newPasswordController = useTextEditingController(); // TODO: bring back changing password
final newPasswordVerifyController = useTextEditingController(); // final newPasswordController = useTextEditingController();
final oldPasswordController = useTextEditingController(); // final newPasswordVerifyController = useTextEditingController();
// final oldPasswordController = useTextEditingController();
final informAcceptedAvatarRef = useRef<VoidCallback?>(null); final informAcceptedAvatarRef = useRef<VoidCallback?>(null);
final informAcceptedBannerRef = useRef<VoidCallback?>(null); final informAcceptedBannerRef = useRef<VoidCallback?>(null);
@ -124,8 +129,8 @@ class _ManageAccount extends HookWidget {
final emailFocusNode = useFocusNode(); final emailFocusNode = useFocusNode();
final matrixUserFocusNode = useFocusNode(); final matrixUserFocusNode = useFocusNode();
final newPasswordFocusNode = useFocusNode(); final newPasswordFocusNode = useFocusNode();
final verifyPasswordFocusNode = useFocusNode(); // final verifyPasswordFocusNode = useFocusNode();
final oldPasswordFocusNode = useFocusNode(); // final oldPasswordFocusNode = useFocusNode();
final token = final token =
accountsStore.userDataFor(user.instanceHost, user.person.name)!.jwt; accountsStore.userDataFor(user.instanceHost, user.person.name)!.jwt;
@ -141,6 +146,9 @@ class _ManageAccount extends HookWidget {
defaultListingType: user.localUser.defaultListingType, defaultListingType: user.localUser.defaultListingType,
lang: user.localUser.lang, lang: user.localUser.lang,
showAvatars: user.localUser.showAvatars, showAvatars: user.localUser.showAvatars,
botAccount: botAccount.value,
showBotAccounts: showBotAccounts.value,
showReadPosts: showReadPosts.value,
sendNotificationsToEmail: sendNotificationsToEmail.value, sendNotificationsToEmail: sendNotificationsToEmail.value,
auth: token.raw, auth: token.raw,
avatar: avatar.current, avatar: avatar.current,
@ -255,12 +263,11 @@ class _ManageAccount extends HookWidget {
), ),
const SizedBox(height: 8), const SizedBox(height: 8),
Text(L10n.of(context)!.bio, style: theme.textTheme.headline6), Text(L10n.of(context)!.bio, style: theme.textTheme.headline6),
TextField( Editor(
controller: bioController, controller: bioController,
focusNode: bioFocusNode, focusNode: bioFocusNode,
textCapitalization: TextCapitalization.sentences,
onSubmitted: (_) => emailFocusNode.requestFocus(), onSubmitted: (_) => emailFocusNode.requestFocus(),
minLines: 4, instanceHost: user.instanceHost,
maxLines: 10, maxLines: 10,
), ),
const SizedBox(height: 8), const SizedBox(height: 8),
@ -280,36 +287,36 @@ class _ManageAccount extends HookWidget {
onSubmitted: (_) => newPasswordFocusNode.requestFocus(), onSubmitted: (_) => newPasswordFocusNode.requestFocus(),
), ),
const SizedBox(height: 8), const SizedBox(height: 8),
Text(L10n.of(context)!.new_password, style: theme.textTheme.headline6), // Text(L10n.of(context)!.new_password, style: theme.textTheme.headline6),
TextField( // TextField(
focusNode: newPasswordFocusNode, // focusNode: newPasswordFocusNode,
controller: newPasswordController, // controller: newPasswordController,
autofillHints: const [AutofillHints.newPassword], // autofillHints: const [AutofillHints.newPassword],
keyboardType: TextInputType.visiblePassword, // keyboardType: TextInputType.visiblePassword,
obscureText: true, // obscureText: true,
onSubmitted: (_) => verifyPasswordFocusNode.requestFocus(), // onSubmitted: (_) => verifyPasswordFocusNode.requestFocus(),
), // ),
const SizedBox(height: 8), // const SizedBox(height: 8),
Text(L10n.of(context)!.verify_password, // Text(L10n.of(context)!.verify_password,
style: theme.textTheme.headline6), // style: theme.textTheme.headline6),
TextField( // TextField(
focusNode: verifyPasswordFocusNode, // focusNode: verifyPasswordFocusNode,
controller: newPasswordVerifyController, // controller: newPasswordVerifyController,
autofillHints: const [AutofillHints.newPassword], // autofillHints: const [AutofillHints.newPassword],
keyboardType: TextInputType.visiblePassword, // keyboardType: TextInputType.visiblePassword,
obscureText: true, // obscureText: true,
onSubmitted: (_) => oldPasswordFocusNode.requestFocus(), // onSubmitted: (_) => oldPasswordFocusNode.requestFocus(),
), // ),
const SizedBox(height: 8), // const SizedBox(height: 8),
Text(L10n.of(context)!.old_password, style: theme.textTheme.headline6), // Text(L10n.of(context)!.old_password, style: theme.textTheme.headline6),
TextField( // TextField(
focusNode: oldPasswordFocusNode, // focusNode: oldPasswordFocusNode,
controller: oldPasswordController, // controller: oldPasswordController,
autofillHints: const [AutofillHints.password], // autofillHints: const [AutofillHints.password],
keyboardType: TextInputType.visiblePassword, // keyboardType: TextInputType.visiblePassword,
obscureText: true, // obscureText: true,
), // ),
const SizedBox(height: 8), // const SizedBox(height: 8),
SwitchListTile.adaptive( SwitchListTile.adaptive(
value: showNsfw.value, value: showNsfw.value,
onChanged: (checked) { onChanged: (checked) {
@ -319,6 +326,33 @@ class _ManageAccount extends HookWidget {
dense: true, dense: true,
), ),
const SizedBox(height: 8), const SizedBox(height: 8),
SwitchListTile.adaptive(
value: botAccount.value,
onChanged: (checked) {
botAccount.value = checked;
},
title: Text('TODO'),
dense: true,
),
const SizedBox(height: 8),
SwitchListTile.adaptive(
value: showBotAccounts.value,
onChanged: (checked) {
showBotAccounts.value = checked;
},
title: Text('TODO'),
dense: true,
),
const SizedBox(height: 8),
SwitchListTile.adaptive(
value: showReadPosts.value,
onChanged: (checked) {
showReadPosts.value = checked;
},
title: Text('TODO'),
dense: true,
),
const SizedBox(height: 8),
SwitchListTile.adaptive( SwitchListTile.adaptive(
value: sendNotificationsToEmail.value, value: sendNotificationsToEmail.value,
onChanged: (checked) { onChanged: (checked) {

View File

@ -9,6 +9,7 @@ class Editor extends HookWidget {
final FocusNode? focusNode; final FocusNode? focusNode;
final ValueChanged<String>? onSubmitted; final ValueChanged<String>? onSubmitted;
final int? minLines; final int? minLines;
final int? maxLines;
final String? labelText; final String? labelText;
final bool autofocus; final bool autofocus;
@ -22,6 +23,7 @@ class Editor extends HookWidget {
this.focusNode, this.focusNode,
this.onSubmitted, this.onSubmitted,
this.minLines = 5, this.minLines = 5,
this.maxLines,
this.labelText, this.labelText,
this.fancy = false, this.fancy = false,
required this.instanceHost, required this.instanceHost,
@ -50,7 +52,7 @@ class Editor extends HookWidget {
keyboardType: TextInputType.multiline, keyboardType: TextInputType.multiline,
textCapitalization: TextCapitalization.sentences, textCapitalization: TextCapitalization.sentences,
onSubmitted: onSubmitted, onSubmitted: onSubmitted,
maxLines: null, maxLines: maxLines,
minLines: minLines, minLines: minLines,
decoration: InputDecoration(labelText: labelText), decoration: InputDecoration(labelText: labelText),
); );