Skip to content

Commit

Permalink
refactor and better signature
Browse files Browse the repository at this point in the history
  • Loading branch information
alextran1502 committed Jun 10, 2024
1 parent 6789694 commit 65dce29
Show file tree
Hide file tree
Showing 10 changed files with 306 additions and 238 deletions.
2 changes: 1 addition & 1 deletion mobile/lib/pages/login/login.page.dart
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import 'package:flutter/material.dart';
import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:immich_mobile/extensions/build_context_extensions.dart';
import 'package:immich_mobile/widgets/forms/login_form.dart';
import 'package:immich_mobile/widgets/forms/login/login_form.dart';
import 'package:immich_mobile/routing/router.dart';
import 'package:package_info_plus/package_info_plus.dart';

Expand Down
8 changes: 4 additions & 4 deletions mobile/lib/utils/version_compatibility.dart
Original file line number Diff line number Diff line change
@@ -1,17 +1,17 @@
(bool, String, int) checkVersionCompatibility(
String? getVersionCompatibilityMessage(
int appMajor,
int appMinor,
int serverMajor,
int serverMinor,
) {
if (serverMajor != appMajor) {
return (false, 'major', appMajor);
return 'Your app major version is not compatible with the server!';
}

// Add latest compat info up top
if (serverMinor < 106 && appMinor >= 106) {
return (false, 'minor', 106);
return 'Your app minor version is not compatible with the server! Please update your server to version v1.106.0 or newer to login';
}

return (true, '', 0);
return null;
}
49 changes: 49 additions & 0 deletions mobile/lib/widgets/forms/login/email_input.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';

class EmailInput extends StatelessWidget {
final TextEditingController controller;
final FocusNode? focusNode;
final Function()? onSubmit;

const EmailInput({
super.key,
required this.controller,
this.focusNode,
this.onSubmit,
});

String? _validateInput(String? email) {
if (email == null || email == '') return null;
if (email.endsWith(' ')) return 'login_form_err_trailing_whitespace'.tr();
if (email.startsWith(' ')) return 'login_form_err_leading_whitespace'.tr();
if (email.contains(' ') || !email.contains('@')) {
return 'login_form_err_invalid_email'.tr();
}
return null;
}

@override
Widget build(BuildContext context) {
return TextFormField(
autofocus: true,
controller: controller,
decoration: InputDecoration(
labelText: 'login_form_label_email'.tr(),
border: const OutlineInputBorder(),
hintText: 'login_form_email_hint'.tr(),
hintStyle: const TextStyle(
fontWeight: FontWeight.normal,
fontSize: 14,
),
),
validator: _validateInput,
autovalidateMode: AutovalidateMode.always,
autofillHints: const [AutofillHints.email],
keyboardType: TextInputType.emailAddress,
onFieldSubmitted: (_) => onSubmit?.call(),
focusNode: focusNode,
textInputAction: TextInputAction.next,
);
}
}
21 changes: 21 additions & 0 deletions mobile/lib/widgets/forms/login/loading_icon.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
import 'package:flutter/material.dart';

class LoadingIcon extends StatelessWidget {
const LoadingIcon({super.key});

@override
Widget build(BuildContext context) {
return const Padding(
padding: EdgeInsets.only(top: 18.0),
child: SizedBox(
width: 24,
height: 24,
child: FittedBox(
child: CircularProgressIndicator(
strokeWidth: 2,
),
),
),
);
}
}
27 changes: 27 additions & 0 deletions mobile/lib/widgets/forms/login/login_button.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';

class LoginButton extends ConsumerWidget {
final Function() onPressed;

const LoginButton({
super.key,
required this.onPressed,
});

@override
Widget build(BuildContext context, WidgetRef ref) {
return ElevatedButton.icon(
style: ElevatedButton.styleFrom(
padding: const EdgeInsets.symmetric(vertical: 12),
),
onPressed: onPressed,
icon: const Icon(Icons.login_rounded),
label: const Text(
"login_form_button_text",
style: TextStyle(fontSize: 14, fontWeight: FontWeight.bold),
).tr(),
);
}
}
Loading

0 comments on commit 65dce29

Please sign in to comment.