forked from eatvio/eatvio_app
133 lines
4.8 KiB
Dart
133 lines
4.8 KiB
Dart
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,
|
||
),
|
||
),
|
||
),
|
||
),
|
||
);
|
||
}
|
||
}
|