turn dob picker into radio button choices

pull/1011/head
Gabby Gurdin 2 years ago
parent 54e490216e
commit 758ebde1f7

@ -2743,7 +2743,7 @@
"type": "text",
"placeholders": {}
},
"yourBirthdayPleaseShort": "Please provide your date of birth",
"yourBirthdayPleaseShort": "Please selected your age group",
"@yourBirthdayPleaseShort": {
"type": "text",
"placeholders": {}
@ -3940,5 +3940,12 @@
"subscribedToUnlockTools": "Subscribe to unlock language tools, including",
"more": "More",
"translationTooltip": "Translate",
"audioTooltip": "Play Audio"
"audioTooltip": "Play Audio",
"certifyAge": "I certify that I am over {age} years of age",
"@certifyAge": {
"type": "text",
"placeholders": {
"age": {}
}
}
}

@ -3027,11 +3027,6 @@
"type": "text",
"placeholders": {}
},
"yourBirthdayPleaseShort": "Por favor, introduzca su fecha de nacimiento",
"@yourBirthdayPleaseShort": {
"type": "text",
"placeholders": {}
},
"inviteStudentByUserName": "Invitar a estudiantes por usuario",
"@inviteStudentByUserName": {
"type": "text",
@ -4578,5 +4573,13 @@
"clickMessageBody": "Haga clic en los mensajes para acceder a las definiciones, traducciones y audio.",
"more": "Más",
"translationTooltip": "Traducir",
"audioTooltip": "Reproducir audio"
"audioTooltip": "Reproducir audio",
"yourBirthdayPleaseShort": "Seleccione su grupo de edad",
"certifyAge": "Certifico que soy mayor de {age} años",
"@certifyAge": {
"type": "text",
"placeholders": {
"age": {}
}
}
}

@ -1,17 +1,16 @@
import 'dart:developer';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter_gen/gen_l10n/l10n.dart';
import 'package:intl/intl.dart';
import 'package:fluffychat/pangea/constants/age_limits.dart';
import 'package:fluffychat/pangea/controllers/pangea_controller.dart';
import 'package:fluffychat/pangea/pages/p_user_age/p_user_age_view.dart';
import 'package:fluffychat/pangea/utils/p_extension.dart';
import 'package:fluffychat/widgets/fluffy_chat_app.dart';
import 'package:fluffychat/widgets/matrix.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter_gen/gen_l10n/l10n.dart';
import 'package:intl/intl.dart';
import '../../utils/bot_name.dart';
import '../../utils/error_handler.dart';
@ -24,13 +23,11 @@ class PUserAge extends StatefulWidget {
class PUserAgeController extends State<PUserAge> {
bool loading = false;
final GlobalKey<FormState> formKey = GlobalKey<FormState>();
int? selectedAge;
TextEditingController dobController = TextEditingController();
// #Pangea
String? error;
bool unknownErrorState = false;
// DateTime? dateOfBirth;
final PangeaController pangeaController = MatrixState.pangeaController;
@ -52,13 +49,12 @@ class PUserAgeController extends State<PUserAge> {
);
}
String? dobFieldValidator(String? value) {
String? dobValidator() {
try {
if (value?.isEmpty ?? true) {
if (selectedDate == null) {
return L10n.of(context)!.yourBirthdayPleaseShort;
}
final DateTime dob = _textToDate!;
if (!dob.isAtLeastYearsOld(AgeLimits.toUseTheApp)) {
if (!selectedDate!.isAtLeastYearsOld(AgeLimits.toUseTheApp)) {
return L10n.of(context)!.mustBe13;
}
return null;
@ -68,30 +64,26 @@ class PUserAgeController extends State<PUserAge> {
}
}
DateTime? get _textToDate {
try {
final DateTime initial = DateFormat.yMd().parse(dobController.text);
return initial;
} catch (err) {
return null;
}
DateTime? get selectedDate {
if (selectedAge == null) return null;
final now = DateTime.now();
return DateTime(now.year - selectedAge!, now.month, now.day);
}
DateTime get initialDate =>
_textToDate ?? DateTime.now().subtract(const Duration(days: 13 * 365));
//Note: used linear progress bar (also used in fluffychat signup button) for consistency
createUserInPangea() async {
try {
setState(() {
error = null;
error = dobValidator();
});
if (!formKey.currentState!.validate()) return;
if (error?.isNotEmpty == true) return;
setState(() {
loading = true;
});
final String date = DateFormat('MM-dd-yyyy').format(_textToDate!);
final String date = DateFormat('MM-dd-yyyy').format(selectedDate!);
if (pangeaController.userController.userModel?.access == null) {
await pangeaController.userController.createPangeaUser(dob: date);
@ -100,11 +92,6 @@ class PUserAgeController extends State<PUserAge> {
dateOfBirth: date,
);
}
// Matrix.of(context).widget.router!.currentState!.to(
// '/rooms',
// queryParameters:
// Matrix.of(context).widget.router!.currentState!.queryParameters,
// );
FluffyChatApp.router.go('/rooms');
} catch (err, s) {
setState(() {
@ -117,6 +104,12 @@ class PUserAgeController extends State<PUserAge> {
}
}
void setSelectedAge(int? value) {
setState(() {
selectedAge = value;
});
}
@override
Widget build(BuildContext context) {
return !unknownErrorState

@ -1,10 +1,7 @@
import 'package:fluffychat/pangea/pages/p_user_age/p_user_age.dart';
import 'package:flutter/material.dart';
import 'package:flutter_gen/gen_l10n/l10n.dart';
import 'package:intl/intl.dart';
import 'package:syncfusion_flutter_datepicker/datepicker.dart';
import 'package:fluffychat/pangea/pages/p_user_age/p_user_age.dart';
import '../../../widgets/layouts/login_scaffold.dart';
class PUserAgeView extends StatelessWidget {
@ -17,124 +14,81 @@ class PUserAgeView extends StatelessWidget {
appBar: AppBar(
automaticallyImplyLeading: !controller.loading,
),
body: Form(
key: controller.formKey,
child: ListView(
children: [
// #Pangea
Container(
margin: const EdgeInsets.only(top: 10),
padding: const EdgeInsets.all(12),
child: Text(
L10n.of(context)!.yourBirthdayPlease,
textAlign: TextAlign.justify,
style: const TextStyle(color: Colors.white),
),
body: ListView(
children: [
Container(
margin: const EdgeInsets.only(top: 10),
padding: const EdgeInsets.all(12),
child: Text(
L10n.of(context)!.yourBirthdayPlease,
textAlign: TextAlign.justify,
style: const TextStyle(color: Colors.white),
),
const SizedBox(
height: 10,
),
const SizedBox(
height: 10,
),
Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(10),
color: Theme.of(context)
.colorScheme
.onSecondaryContainer
.withAlpha(50),
),
Padding(
padding: const EdgeInsets.symmetric(horizontal: 12),
child: TextFormField(
readOnly: controller.loading,
autocorrect: false,
controller: controller.dobController,
keyboardType: TextInputType.datetime,
autofillHints:
controller.loading ? null : [AutofillHints.birthday],
validator: controller.dobFieldValidator,
onTap: () async {
showDialog(
context: context,
builder: (BuildContext context) {
return Center(
child: Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(25),
color: Theme.of(context).colorScheme.background,
),
padding: const EdgeInsets.all(12),
// height: 350,
width: 500,
child: Column(
mainAxisSize: MainAxisSize.min,
children: <Widget>[
Card(
child: SfDateRangePicker(
view: DateRangePickerView.month,
showNavigationArrow: true,
showActionButtons: true,
selectionMode:
DateRangePickerSelectionMode.single,
initialDisplayDate: controller.initialDate,
initialSelectedDate: controller.initialDate,
onSubmit: (val) {
final DateTime? pickedDate =
val as DateTime?;
if (pickedDate != null) {
controller.dobController.text =
DateFormat.yMd().format(pickedDate);
controller.error = null;
} else {
controller.error =
L10n.of(context)!.invalidDob;
}
Navigator.pop(context);
},
onCancel: () => Navigator.pop(context),
),
),
],
),
),
);
},
);
},
// onChanged: (String newValue) {
// try {
// controller.dateOfBirth =
// DateTime.parse(controller.dobController.text);
// controller.error = null;
// } catch (err) {
// controller.error = L10n.of(context)!.invalidDob;
// }
// },
decoration: InputDecoration(
prefixIcon: const Icon(Icons.calendar_today),
hintText: L10n.of(context)!.enterYourDob,
fillColor: Theme.of(context)
.colorScheme
.background
.withOpacity(0.75),
errorText: controller.error,
errorStyle: TextStyle(
color: controller.dobController.text.isEmpty
? Colors.orangeAccent
: Colors.orange,
child: Column(
children: [
ListTile(
title: Text(
L10n.of(context)!.certifyAge(13),
style: const TextStyle(color: Colors.white),
),
leading: Radio<int>(
value: 13,
groupValue: controller.selectedAge,
onChanged: controller.setSelectedAge,
),
),
),
ListTile(
title: Text(
L10n.of(context)!.certifyAge(18),
style: const TextStyle(color: Colors.white),
),
leading: Radio<int>(
value: 18,
groupValue: controller.selectedAge,
onChanged: controller.setSelectedAge,
),
),
],
),
const SizedBox(
height: 10,
),
const SizedBox(
height: 10,
),
if (controller.error != null)
Padding(
padding: const EdgeInsets.all(12),
child: Text(
controller.error!,
style: const TextStyle(color: Colors.white),
),
),
Hero(
tag: 'loginButton',
child: Padding(
padding: const EdgeInsets.all(12),
child: ElevatedButton(
onPressed: controller.createUserInPangea,
child: controller.loading
? const LinearProgressIndicator()
: Text(L10n.of(context)!.getStarted),
),
Hero(
tag: 'loginButton',
child: Padding(
padding: const EdgeInsets.all(12),
child: ElevatedButton(
onPressed: controller.createUserInPangea,
child: controller.loading
? const LinearProgressIndicator()
: Text(L10n.of(context)!.getStarted),
),
),
],
),
),
],
),
// ),
);
}
}

Loading…
Cancel
Save