Files
eatvio_app/lib/features/settings/presentation/pages/physical_activity_screen.dart
2024-09-30 12:54:55 +03:00

133 lines
4.8 KiB
Dart
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import 'package:eatvio_app/features/profile/models/profile_model.dart';
import 'package:eatvio_app/theme/theme_helper.dart';
import 'package:flutter/material.dart';
import 'package:go_router/go_router.dart';
class PhysicalActivityScreen extends StatefulWidget {
final ProfileDetailsModel profileDetailsModel;
const PhysicalActivityScreen({
super.key,
required this.profileDetailsModel,
});
@override
State<PhysicalActivityScreen> createState() => _PhysicalActivityScreenState();
}
enum PhysicalActivity { minimum, low, medium, high, extreme, hardWork }
class _PhysicalActivityScreenState extends State<PhysicalActivityScreen> {
PhysicalActivity? _physicalActivity = PhysicalActivity.minimum;
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Физическая нагрузка'),
),
bottomSheet: _saveButton(),
body: SingleChildScrollView(
physics: const BouncingScrollPhysics(),
padding: const EdgeInsets.only(top: 16, bottom: 80, left: 8, right: 16),
child: Column(
children: [
RadioListTile<PhysicalActivity>(
contentPadding: EdgeInsets.zero,
title: const Text('1,2 — минимальный (сидячая работа, отсутствие физических нагрузок);'),
value: PhysicalActivity.minimum,
groupValue: _physicalActivity,
onChanged: (PhysicalActivity? value) {
setState(() {
_physicalActivity = value;
});
},
),
RadioListTile<PhysicalActivity>(
contentPadding: EdgeInsets.zero,
title: const Text('1,375 — низкий (тренировки не менее 20 мин 1–3 раза в неделю);'),
value: PhysicalActivity.low,
groupValue: _physicalActivity,
onChanged: (PhysicalActivity? value) {
setState(() {
_physicalActivity = value;
});
},
),
RadioListTile<PhysicalActivity>(
contentPadding: EdgeInsets.zero,
title: const Text('1,55 — умеренный (тренировки 30–60 мин 3–4 раза в неделю);'),
value: PhysicalActivity.medium,
groupValue: _physicalActivity,
onChanged: (PhysicalActivity? value) {
setState(() {
_physicalActivity = value;
});
},
),
RadioListTile<PhysicalActivity>(
contentPadding: EdgeInsets.zero,
title: const Text('1,7 — высокий (тренировки 30–60 мин 5–7 раза в неделю; тяжёлая физическая работа);'),
value: PhysicalActivity.high,
groupValue: _physicalActivity,
onChanged: (PhysicalActivity? value) {
setState(() {
_physicalActivity = value;
});
},
),
RadioListTile<PhysicalActivity>(
contentPadding: EdgeInsets.zero,
title: const Text('1,9 — экстремальный (несколько интенсивных тренировок в день'),
value: PhysicalActivity.extreme,
groupValue: _physicalActivity,
onChanged: (PhysicalActivity? value) {
setState(() {
_physicalActivity = value;
});
},
),
RadioListTile<PhysicalActivity>(
contentPadding: EdgeInsets.zero,
title: const Text('1,9 6–7 раз в неделю; очень трудоёмкая работа).'),
value: PhysicalActivity.hardWork,
groupValue: _physicalActivity,
onChanged: (PhysicalActivity? value) {
setState(() {
_physicalActivity = value;
});
},
),
],
),
),
);
}
_saveButton() {
return InkWell(
onTap: () => GoRouter.of(context).pop(),
borderRadius: BorderRadius.circular(20),
child: Ink(
height: 52,
width: MediaQuery.of(context).size.width - 32,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(20),
color: appTheme.blueA400,
),
child: Center(
child: Text(
'Сохранить',
style: TextStyle(
color: Colors.white,
height: 1,
fontWeight: FontWeight.w600,
fontSize: 18,
),
),
),
),
);
}
}