import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import 'package:pshared/provider/account.dart'; import 'package:pweb/pages/settings/profile/account/name/actions.dart'; import 'package:pweb/providers/account_name.dart'; import 'package:pweb/pages/settings/profile/account/name/text.dart'; class _AccountNameConstants { static const inputWidth = 200.0; static const spacing = 8.0; static const errorSpacing = 4.0; static const borderWidth = 2.0; } class AccountName extends StatelessWidget { final String name; final String title; final String hintText; final String errorText; const AccountName({ super.key, required this.name, required this.title, required this.hintText, required this.errorText, }); @override Widget build(BuildContext context) { return ChangeNotifierProvider( create: (ctx) => AccountNameState( initialName: name, errorMessage: errorText, accountProvider: ctx.read(), ), child: _AccountNameBody( hintText: hintText, ), ); } } class _AccountNameBody extends StatelessWidget { const _AccountNameBody({ required this.hintText, }); final String hintText; @override Widget build(BuildContext context) { final state = context.watch(); final provider = context.watch(); final theme = Theme.of(context); final currentName = provider.account?.name ?? state.initialName; state.syncName(currentName); return Column( mainAxisSize: MainAxisSize.min, children: [ Row( mainAxisAlignment: MainAxisAlignment.center, children: [ AccountNameText( hintText: hintText, inputWidth: _AccountNameConstants.inputWidth, borderWidth: _AccountNameConstants.borderWidth, ), const SizedBox(width: _AccountNameConstants.spacing), const AccountNameActions(), ], ), const SizedBox(height: _AccountNameConstants.errorSpacing), if (state.errorText.isNotEmpty) Text( state.errorText, style: theme.textTheme.bodySmall?.copyWith( color: theme.colorScheme.error, ), ), ], ); } }