refactor: add intl localization

This commit is contained in:
mso7nueh
2024-09-11 17:39:00 +03:00
parent 69472f422e
commit 6c69bbbf41
29 changed files with 1468 additions and 312 deletions

View File

@@ -1,6 +1,6 @@
import 'package:eatvio_app/features/registration/models/user_registration_model.dart';
import 'package:eatvio_app/features/registration/presentation/bloc/registration_cubit/registration_cubit.dart';
import 'package:eatvio_app/localization/app_localization.dart';
import 'package:eatvio_app/generated/l10n.dart';
import 'package:eatvio_app/widgets/custom_text_form_field.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
@@ -27,12 +27,13 @@ class _AllergiesScreenState extends State<AllergiesScreen> {
@override
Widget build(BuildContext context) {
final s = S.of(context);
return SingleChildScrollView(
padding: EdgeInsets.only(bottom: 80, left: 16, right: 16, top: 16),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text("allergies_presence".tr),
Text(s.allergies_presence),
SizedBox(height: 4),
CustomTextFormField(
controller: enterInformationController,

View File

@@ -2,7 +2,7 @@ import 'package:eatvio_app/core/utils/image_constant.dart';
import 'package:eatvio_app/data/models/selectionPopupModel/selection_popup_model.dart';
import 'package:eatvio_app/features/registration/models/user_registration_model.dart';
import 'package:eatvio_app/features/registration/presentation/bloc/registration_cubit/registration_cubit.dart';
import 'package:eatvio_app/localization/app_localization.dart';
import 'package:eatvio_app/generated/l10n.dart';
import 'package:eatvio_app/widgets/custom_drop_down.dart';
import 'package:eatvio_app/widgets/custom_image_view.dart';
import 'package:eatvio_app/widgets/custom_text_form_field.dart';
@@ -53,38 +53,39 @@ class _BloodPressureScreenState extends State<BloodPressureScreen> {
@override
Widget build(BuildContext context) {
final s = S.of(context);
return SingleChildScrollView(
padding: EdgeInsets.only(bottom: 80, left: 16, right: 16, top: 16),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text("up_pressure".tr),
Text(s.up_pressure),
SizedBox(height: 4),
CustomTextFormField(
inputFormatters: [digitsOnly],
controller: upPressureController,
autofocus: true,
focusNode: upFocusNode,
hintText: "90".tr,
hintText: "90",
onChanged: (newValue) {
final registrationCubit = context.read<RegistrationCubit>();
registrationCubit.updateSheet(registrationCubit.state.sheet.copyWith(bloodPressureUp: int.parse(newValue)));
},
),
SizedBox(height: 16),
Text("down_pressure".tr),
Text(s.down_pressure),
SizedBox(height: 4),
CustomTextFormField(
inputFormatters: [digitsOnly],
controller: downPressureController,
hintText: "90".tr,
hintText: '90',
onChanged: (newValue) {
final registrationCubit = context.read<RegistrationCubit>();
registrationCubit.updateSheet(registrationCubit.state.sheet.copyWith(bloodPressureDown: int.parse(newValue)));
},
),
SizedBox(height: 16),
Text("do_you_have_hypotension_tendency".tr),
Text(s.do_you_have_hypotension_tendency),
SizedBox(height: 4),
CustomDropDown(
icon: Container(
@@ -98,7 +99,7 @@ class _BloodPressureScreenState extends State<BloodPressureScreen> {
width: 16,
),
),
hintText: "Не выбрано".tr,
hintText: "Не выбрано",
items: selectionPopupList,
value: selectedPopupHypo,
onChanged: (newPopup) {
@@ -110,7 +111,7 @@ class _BloodPressureScreenState extends State<BloodPressureScreen> {
},
),
SizedBox(height: 16),
Text("do_you_have_hypertension_tendency".tr),
Text(s.do_you_have_hypertension_tendency),
SizedBox(height: 4),
CustomDropDown(
icon: Container(
@@ -124,7 +125,7 @@ class _BloodPressureScreenState extends State<BloodPressureScreen> {
width: 16,
),
),
hintText: "Не выбрано".tr,
hintText: "Не выбрано",
items: selectionPopupList,
value: selectedPopupHyper,
onChanged: (newPopup) {

View File

@@ -1,6 +1,6 @@
import 'package:eatvio_app/features/registration/models/user_registration_model.dart';
import 'package:eatvio_app/features/registration/presentation/bloc/registration_cubit/registration_cubit.dart';
import 'package:eatvio_app/localization/app_localization.dart';
import 'package:eatvio_app/generated/l10n.dart';
import 'package:eatvio_app/widgets/custom_text_form_field.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
@@ -33,43 +33,44 @@ class _BodyCircumferencesScreenState extends State<BodyCircumferencesScreen> {
@override
Widget build(BuildContext context) {
final s = S.of(context);
return SingleChildScrollView(
padding: EdgeInsets.only(bottom: 80, left: 16, right: 16, top: 16),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text("chest_circumference".tr),
Text(s.chest_circumference),
SizedBox(height: 4),
CustomTextFormField(
inputFormatters: [digitsOnly],
autofocus: true,
focusNode: chestFocus,
controller: chestCircumferenceController,
hintText: "90".tr,
hintText: '90',
onChanged: (value) {
final registrationCubit = context.read<RegistrationCubit>();
registrationCubit.updateSheet(registrationCubit.state.sheet.copyWith(chestCircumference: int.parse(value)));
},
),
SizedBox(height: 16),
Text("waist_circumference".tr),
Text(s.waist_circumference),
SizedBox(height: 4),
CustomTextFormField(
inputFormatters: [digitsOnly],
controller: waistCircumferenceController,
hintText: "60".tr,
hintText: "60",
onChanged: (value) {
final registrationCubit = context.read<RegistrationCubit>();
registrationCubit.updateSheet(registrationCubit.state.sheet.copyWith(waistCircumference: int.parse(value)));
},
),
SizedBox(height: 16),
Text("hip_circumference".tr),
Text(s.hip_circumference),
SizedBox(height: 4),
CustomTextFormField(
inputFormatters: [digitsOnly],
controller: hipCircumferenceController,
hintText: "90".tr,
hintText: '90',
textInputAction: TextInputAction.done,
onChanged: (value) {
final registrationCubit = context.read<RegistrationCubit>();

View File

@@ -1,6 +1,6 @@
import 'package:eatvio_app/features/registration/models/user_registration_model.dart';
import 'package:eatvio_app/features/registration/presentation/bloc/registration_cubit/registration_cubit.dart';
import 'package:eatvio_app/localization/app_localization.dart';
import 'package:eatvio_app/generated/l10n.dart';
import 'package:eatvio_app/widgets/custom_text_form_field.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
@@ -31,13 +31,14 @@ class _CredentialsScreenState extends State<CredentialsScreen> {
@override
Widget build(BuildContext context) {
final s = S.of(context);
return SingleChildScrollView(
padding: EdgeInsets.only(bottom: 80, top: 16, left: 16, right: 16),
child: Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text("email".tr),
Text(s.email),
SizedBox(height: 4),
CustomTextFormField(
controller: emailController,
@@ -51,7 +52,7 @@ class _CredentialsScreenState extends State<CredentialsScreen> {
},
),
SizedBox(height: 16),
Text("password".tr),
Text(s.password),
SizedBox(height: 4),
CustomTextFormField(
obscureText: true,
@@ -64,7 +65,7 @@ class _CredentialsScreenState extends State<CredentialsScreen> {
},
),
SizedBox(height: 16),
Text("password_confirmation".tr),
Text(s.password_confirmation),
SizedBox(height: 4),
CustomTextFormField(
obscureText: true,

View File

@@ -1,7 +1,7 @@
import 'package:eatvio_app/core/utils/date_time_utils.dart';
import 'package:eatvio_app/features/registration/models/user_registration_model.dart';
import 'package:eatvio_app/features/registration/presentation/bloc/registration_cubit/registration_cubit.dart';
import 'package:eatvio_app/localization/app_localization.dart';
import 'package:eatvio_app/generated/l10n.dart';
import 'package:eatvio_app/theme/theme_helper.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
@@ -34,12 +34,13 @@ class _DateOfBirthScreenState extends State<DateOfBirthScreen> {
@override
Widget build(BuildContext context) {
final s = S.of(context);
return SingleChildScrollView(
padding: EdgeInsets.only(bottom: 80, top: 16, left: 16, right: 16),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text("date_of_birth".tr),
Text(s.date_of_birth),
SizedBox(height: 4),
ListTile(
onTap: onTapCalendar(context),

View File

@@ -1,6 +1,6 @@
import 'package:eatvio_app/features/registration/models/user_registration_model.dart';
import 'package:eatvio_app/features/registration/presentation/bloc/registration_cubit/registration_cubit.dart';
import 'package:eatvio_app/localization/app_localization.dart';
import 'package:eatvio_app/generated/l10n.dart';
import 'package:eatvio_app/widgets/custom_text_form_field.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
@@ -29,16 +29,17 @@ class _FavoriteFoodsScreenState extends State<FavoriteFoodsScreen> {
@override
Widget build(BuildContext context) {
final s = S.of(context);
return SingleChildScrollView(
padding: EdgeInsets.only(bottom: 80, left: 16, right: 16, top: 16),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text("favorite_foods".tr),
Text(s.favorite_foods),
SizedBox(height: 4),
CustomTextFormField(
controller: favoriteFoodsController,
hintText: "enter_information".tr,
hintText: s.enter_information,
maxLines: 7,
minLines: 2,
focusNode: favoriteFocusNode,
@@ -49,11 +50,11 @@ class _FavoriteFoodsScreenState extends State<FavoriteFoodsScreen> {
},
),
SizedBox(height: 16),
Text("unfavorite_foods".tr),
Text(s.unfavorite_foods),
SizedBox(height: 4),
CustomTextFormField(
controller: unFavoriteFoodsController,
hintText: "enter_information".tr,
hintText: s.enter_information,
textInputAction: TextInputAction.done,
maxLines: 7,
minLines: 2,

View File

@@ -1,6 +1,6 @@
import 'package:eatvio_app/features/registration/models/user_registration_model.dart';
import 'package:eatvio_app/features/registration/presentation/bloc/registration_cubit/registration_cubit.dart';
import 'package:eatvio_app/localization/app_localization.dart';
import 'package:eatvio_app/generated/l10n.dart';
import 'package:eatvio_app/widgets/custom_text_form_field.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
@@ -27,12 +27,13 @@ class _FavoriteSportsScreenState extends State<FavoriteSportsScreen> {
@override
Widget build(BuildContext context) {
final s = S.of(context);
return SingleChildScrollView(
padding: EdgeInsets.only(bottom: 80, left: 16, right: 16, top: 16),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text("your_favorite_sports".tr),
Text(s.your_favorite_sports),
SizedBox(height: 4),
CustomTextFormField(
controller: enterInformationController,

View File

@@ -1,6 +1,6 @@
import 'package:eatvio_app/features/registration/models/user_registration_model.dart';
import 'package:eatvio_app/features/registration/presentation/bloc/registration_cubit/registration_cubit.dart';
import 'package:eatvio_app/localization/app_localization.dart';
import 'package:eatvio_app/generated/l10n.dart';
import 'package:eatvio_app/widgets/custom_text_form_field.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
@@ -28,12 +28,13 @@ class _HeightScreenState extends State<HeightScreen> {
@override
Widget build(BuildContext context) {
final s = S.of(context);
return SingleChildScrollView(
padding: EdgeInsets.only(bottom: 80, left: 16, right: 16, top: 16),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text("your_height".tr),
Text(s.your_height),
SizedBox(height: 4),
CustomTextFormField(
textInputAction: TextInputAction.done,

View File

@@ -1,7 +1,7 @@
import 'package:eatvio_app/data/models/selectionPopupModel/selection_popup_model.dart';
import 'package:eatvio_app/features/registration/models/user_registration_model.dart';
import 'package:eatvio_app/features/registration/presentation/bloc/registration_cubit/registration_cubit.dart';
import 'package:eatvio_app/localization/app_localization.dart';
import 'package:eatvio_app/generated/l10n.dart';
import 'package:eatvio_app/widgets/custom_drop_down.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
@@ -36,18 +36,19 @@ class _LanguageSelectScreenState extends State<LanguageSelectScreen> {
@override
Widget build(BuildContext context) {
final s = S.of(context);
return SingleChildScrollView(
padding: EdgeInsets.only(bottom: 80, right: 16, left: 16, top: 16),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
"preferred_language".tr,
s.preferred_language,
),
const SizedBox(height: 4),
CustomDropDown(
value: value,
hintText: "Не выбрано".tr,
hintText: "Не выбрано",
items: dropdownItemList,
onChanged: (SelectionPopupModel newValue) => setState(() {
value = newValue;

View File

@@ -1,6 +1,6 @@
import 'package:eatvio_app/features/registration/models/user_registration_model.dart';
import 'package:eatvio_app/features/registration/presentation/bloc/registration_cubit/registration_cubit.dart';
import 'package:eatvio_app/localization/app_localization.dart';
import 'package:eatvio_app/generated/l10n.dart';
import 'package:eatvio_app/widgets/custom_text_form_field.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
@@ -27,16 +27,17 @@ class _MedicineIntakeScreenState extends State<MedicineIntakeScreen> {
@override
Widget build(BuildContext context) {
final s = S.of(context);
return SingleChildScrollView(
padding: EdgeInsets.only(bottom: 80, left: 16, right: 16, top: 16),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text("do_you_take_pills".tr),
Text(s.do_you_take_pills),
SizedBox(height: 4),
CustomTextFormField(
controller: enterInformationController,
hintText: "enter_information".tr,
hintText: s.enter_information,
textInputAction: TextInputAction.done,
focusNode: infoFocusNode,
autofocus: true,

View File

@@ -1,6 +1,6 @@
import 'package:eatvio_app/features/registration/models/user_registration_model.dart';
import 'package:eatvio_app/features/registration/presentation/bloc/registration_cubit/registration_cubit.dart';
import 'package:eatvio_app/localization/app_localization.dart';
import 'package:eatvio_app/generated/l10n.dart';
import 'package:eatvio_app/widgets/custom_text_form_field.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
@@ -29,12 +29,13 @@ class _NameScreenState extends State<NameScreen> {
@override
Widget build(BuildContext context) {
final s = S.of(context);
return SingleChildScrollView(
padding: EdgeInsets.only(bottom: 80, top: 16, left: 16, right: 16),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text("first_name".tr),
Text(s.first_name),
SizedBox(height: 4),
CustomTextFormField(
controller: firstNameController,
@@ -47,7 +48,7 @@ class _NameScreenState extends State<NameScreen> {
},
),
SizedBox(height: 16),
Text("last_name".tr),
Text(s.last_name),
SizedBox(height: 4),
CustomTextFormField(
controller: lastNameController,

View File

@@ -16,7 +16,7 @@ import 'package:eatvio_app/features/registration/presentation/pages/language_sel
import 'package:eatvio_app/features/registration/presentation/pages/medicine_intake_screen.dart';
import 'package:eatvio_app/features/registration/presentation/pages/name_screen.dart';
import 'package:eatvio_app/features/registration/presentation/pages/weight_screen.dart';
import 'package:eatvio_app/localization/app_localization.dart';
import 'package:eatvio_app/generated/l10n.dart';
import 'package:eatvio_app/locator_service.dart';
import 'package:eatvio_app/theme/theme_helper.dart';
import 'package:eatvio_app/widgets/app_bar/appbar_title_image.dart';
@@ -180,7 +180,12 @@ class _RegistrationScreenState extends State<RegistrationScreen> {
Future<bool> canGoNext(RegistrationState state) async {
switch (step) {
case 2:
List<String> errors = validateCredentialsFields(state.sheet.email, state.sheet.password, state.sheet.passwordConfirmation);
List<String> errors = validateCredentialsFields(
state.sheet.email,
state.sheet.password,
state.sheet.passwordConfirmation,
context,
);
if (errors.isEmpty) {
return true;
} else {
@@ -209,6 +214,7 @@ class _RegistrationScreenState extends State<RegistrationScreen> {
List<String> errors = validateNameFields(
state.sheet.firstName.toString(),
state.sheet.lastName.toString(),
context,
);
if (errors.isEmpty) {
return true;
@@ -277,6 +283,7 @@ class _RegistrationScreenState extends State<RegistrationScreen> {
state.sheet.chestCircumference.toString(),
state.sheet.waistCircumference.toString(),
state.sheet.hipCircumference.toString(),
context,
);
if (errors.isEmpty) {
return true;
@@ -336,43 +343,57 @@ class _RegistrationScreenState extends State<RegistrationScreen> {
String chestCircumference,
String waistCircumference,
String hipCircumference,
BuildContext context,
) {
final s = S.of(context);
List<String> errors = [];
if (chestCircumference.isEmpty | waistCircumference.isEmpty | hipCircumference.isEmpty) {
errors.add('circumference_empty'.tr);
errors.add(s.circumference_empty);
}
if (![chestCircumference, waistCircumference, hipCircumference].every((circumference) => int.tryParse(circumference) != null)) {
errors.add('circumference_is_not_a_number'.tr);
errors.add(s.circumference_is_not_a_number);
}
return errors;
}
List<String> validateCredentialsFields(String email, String password, String passwordConfirmation) {
List<String> validateCredentialsFields(
String email,
String password,
String passwordConfirmation,
BuildContext context,
) {
final s = S.of(context);
List<String> errors = [];
if (!isEmail(email)) {
errors.add('email_invalid'.tr);
errors.add(s.email_invalid);
}
if (email.isEmpty) {
errors.add('email_empty'.tr);
errors.add(s.email_empty);
}
if (password.length < 6) {
errors.add('password_short'.tr);
errors.add(s.password_short);
}
if (password != passwordConfirmation) {
errors.add('password_confirmation_mismatch'.tr);
errors.add(s.password_confirmation_mismatch);
}
return errors;
}
List<String> validateNameFields(String firstName, String lastName) {
List<String> validateNameFields(
String firstName,
String lastName,
BuildContext context,
) {
List<String> errors = [];
if (firstName.isEmpty) {

View File

@@ -1,6 +1,6 @@
import 'package:eatvio_app/features/registration/models/user_registration_model.dart';
import 'package:eatvio_app/features/registration/presentation/bloc/registration_cubit/registration_cubit.dart';
import 'package:eatvio_app/localization/app_localization.dart';
import 'package:eatvio_app/generated/l10n.dart';
import 'package:eatvio_app/widgets/custom_text_form_field.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
@@ -28,12 +28,13 @@ class _WeightScreenState extends State<WeightScreen> {
@override
Widget build(BuildContext context) {
final s = S.of(context);
return SingleChildScrollView(
padding: EdgeInsets.only(bottom: 80, left: 16, right: 16, top: 16),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text("your_weight".tr),
Text(s.your_weight),
SizedBox(height: 4),
CustomTextFormField(
autofocus: true,