This commit is contained in:
otsmr 2025-07-17 20:53:23 +02:00
parent f33aa673f8
commit 3fbf29b4e2
6 changed files with 45 additions and 25 deletions

View file

@ -19,7 +19,7 @@
"onboardingTryForFree": "Jetzt registrieren", "onboardingTryForFree": "Jetzt registrieren",
"registerUsernameSlogan": "Bitte wähle einen Benutzernamen, damit dich andere finden können!", "registerUsernameSlogan": "Bitte wähle einen Benutzernamen, damit dich andere finden können!",
"registerUsernameDecoration": "Benutzername", "registerUsernameDecoration": "Benutzername",
"registerUsernameLimits": "Der Benutzername muss 3 bis 12 Zeichen lang sein und darf nur aus Buchstaben (a-z) und Zahlen (0-9) bestehen.", "registerUsernameLimits": "Der Benutzername muss mindestens 3 Zeichen lang sein.",
"registerSubmitButton": "Jetzt registrieren!", "registerSubmitButton": "Jetzt registrieren!",
"registerTwonlyCodeText": "Hast du einen twonly-Code erhalten? Dann löse ihn entweder direkt hier oder später ein!", "registerTwonlyCodeText": "Hast du einen twonly-Code erhalten? Dann löse ihn entweder direkt hier oder später ein!",
"registerTwonlyCodeLabel": "twonly-Code", "registerTwonlyCodeLabel": "twonly-Code",

View file

@ -38,7 +38,7 @@
"@registerUsernameSlogan": {}, "@registerUsernameSlogan": {},
"registerUsernameDecoration": "Username", "registerUsernameDecoration": "Username",
"@registerUsernameDecoration": {}, "@registerUsernameDecoration": {},
"registerUsernameLimits": "Username must be 3 to 12 characters long, consisting only of letters (a-z) and numbers (0-9).", "registerUsernameLimits": "Your username must be at least 3 characters long.",
"@registerUsernameLimits": {}, "@registerUsernameLimits": {},
"registerSubmitButton": "Register now!", "registerSubmitButton": "Register now!",
"@registerSubmitButton": {}, "@registerSubmitButton": {},

View file

@ -215,7 +215,7 @@ abstract class AppLocalizations {
/// No description provided for @registerUsernameLimits. /// No description provided for @registerUsernameLimits.
/// ///
/// In en, this message translates to: /// In en, this message translates to:
/// **'Username must be 3 to 12 characters long, consisting only of letters (a-z) and numbers (0-9).'** /// **'Your username must be at least 3 characters long.'**
String get registerUsernameLimits; String get registerUsernameLimits;
/// No description provided for @registerSubmitButton. /// No description provided for @registerSubmitButton.

View file

@ -77,7 +77,7 @@ class AppLocalizationsDe extends AppLocalizations {
@override @override
String get registerUsernameLimits => String get registerUsernameLimits =>
'Der Benutzername muss 3 bis 12 Zeichen lang sein und darf nur aus Buchstaben (a-z) und Zahlen (0-9) bestehen.'; 'Der Benutzername muss mindestens 3 Zeichen lang sein.';
@override @override
String get registerSubmitButton => 'Jetzt registrieren!'; String get registerSubmitButton => 'Jetzt registrieren!';

View file

@ -76,7 +76,7 @@ class AppLocalizationsEn extends AppLocalizations {
@override @override
String get registerUsernameLimits => String get registerUsernameLimits =>
'Username must be 3 to 12 characters long, consisting only of letters (a-z) and numbers (0-9).'; 'Your username must be at least 3 characters long.';
@override @override
String get registerSubmitButton => 'Register now!'; String get registerSubmitButton => 'Register now!';

View file

@ -31,13 +31,21 @@ class _RegisterViewState extends State<RegisterView> {
bool _isTryingToRegister = false; bool _isTryingToRegister = false;
bool _isValidUserName = false; bool _isValidUserName = false;
bool _showUserNameError = false;
Future<void> createNewUser({bool isDemoAccount = false}) async { Future<void> createNewUser({bool isDemoAccount = false}) async {
if (!_isValidUserName) {
setState(() {
_showUserNameError = true;
});
return;
}
final username = isDemoAccount ? '<demo>' : usernameController.text; final username = isDemoAccount ? '<demo>' : usernameController.text;
final inviteCode = inviteCodeController.text; final inviteCode = inviteCodeController.text;
setState(() { setState(() {
_isTryingToRegister = true; _isTryingToRegister = true;
_showUserNameError = false;
}); });
await createIfNotExistsSignalIdentity(); await createIfNotExistsSignalIdentity();
@ -56,6 +64,9 @@ class _RegisterViewState extends State<RegisterView> {
return createNewUser(); return createNewUser();
} }
if (mounted) { if (mounted) {
setState(() {
_isTryingToRegister = false;
});
await showAlertDialog( await showAlertDialog(
context, context,
'Oh no!', 'Oh no!',
@ -152,6 +163,15 @@ class _RegisterViewState extends State<RegisterView> {
context.lang.registerUsernameDecoration, context.lang.registerUsernameDecoration,
), ),
), ),
const SizedBox(height: 10),
Text(
context.lang.registerUsernameLimits,
style: TextStyle(
color: _showUserNameError ? Colors.red : Colors.transparent,
fontSize: 12,
),
textAlign: TextAlign.center,
),
// const SizedBox(height: 5), // const SizedBox(height: 5),
// Center( // Center(
// child: Padding( // child: Padding(
@ -163,19 +183,19 @@ class _RegisterViewState extends State<RegisterView> {
// ), // ),
// ), // ),
// ), // ),
const SizedBox(height: 30), // const SizedBox(height: 30),
Center( // Center(
child: Text( // child: Text(
context.lang.registerTwonlyCodeText, // context.lang.registerTwonlyCodeText,
textAlign: TextAlign.center, // textAlign: TextAlign.center,
), // ),
), // ),
const SizedBox(height: 10), // const SizedBox(height: 10),
TextField( // TextField(
controller: inviteCodeController, // controller: inviteCodeController,
decoration: // decoration:
getInputDecoration(context.lang.registerTwonlyCodeLabel), // getInputDecoration(context.lang.registerTwonlyCodeLabel),
), // ),
const SizedBox(height: 30), const SizedBox(height: 30),
Column(children: [ Column(children: [
FilledButton.icon( FilledButton.icon(
@ -189,7 +209,7 @@ class _RegisterViewState extends State<RegisterView> {
), ),
) )
: const Icon(Icons.group), : const Icon(Icons.group),
onPressed: _isValidUserName ? createNewUser : null, onPressed: createNewUser,
style: ButtonStyle( style: ButtonStyle(
padding: WidgetStateProperty.all<EdgeInsets>( padding: WidgetStateProperty.all<EdgeInsets>(
const EdgeInsets.symmetric( const EdgeInsets.symmetric(
@ -208,12 +228,12 @@ class _RegisterViewState extends State<RegisterView> {
Row( Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly, mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: [ children: [
OutlinedButton.icon( // OutlinedButton.icon(
onPressed: () { // onPressed: () {
createNewUser(isDemoAccount: true); // createNewUser(isDemoAccount: true);
}, // },
label: const Text('Demo'), // label: const Text('Demo'),
), // ),
OutlinedButton.icon( OutlinedButton.icon(
onPressed: () { onPressed: () {
Navigator.push(context, MaterialPageRoute( Navigator.push(context, MaterialPageRoute(