cpd_2022_energy/lib/widgets/input_widget.dart

114 lines
4.1 KiB
Dart
Raw Normal View History

2023-02-06 03:12:39 +01:00
import 'package:cpd_2022_energy/provider/energy_model.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
class InputWidget extends StatelessWidget {
const InputWidget({super.key});
@override
Widget build(BuildContext context) {
var heightStartInputController = TextEditingController();
var heightEndInputController = TextEditingController();
var velocityStartInputController = TextEditingController();
var velocityEndInputController = TextEditingController();
var weightInputController = TextEditingController();
final ButtonStyle style =
ElevatedButton.styleFrom(textStyle: const TextStyle(fontSize: 20));
final formKey = GlobalKey<FormState>();
final energyModel = Provider.of<EnergyModel>(context, listen: false);
void onSubmitButtonClick() {
if (formKey.currentState!.validate() == false) return;
energyModel.heightStart = double.parse(heightStartInputController.text);
energyModel.heightEnd = double.parse(heightEndInputController.text);
energyModel.velocityStart = double.parse(velocityStartInputController.text);
energyModel.velocityEnd = double.parse(velocityEndInputController.text);
energyModel.weight = double.parse(weightInputController.text);
energyModel.calc();
}
bool isNumeric(String s) {
return double.tryParse(s) != null;
}
return Form(
key: formKey,
child: Column(
children: <Widget>[
const Text('Height'),
TextFormField(
decoration: const InputDecoration(
hintText: 'Enter the height of the starting point (in m)',
),
validator: (String? value) {
if (value == null || value.isEmpty || !isNumeric(value)) {
return 'Invalid input. Please enter the height of the starting point (in m)';
}
return null;
},
controller: heightStartInputController,
),
TextFormField(
decoration: const InputDecoration(
hintText: 'Enter the height of the ending point (in m)',
),
validator: (String? value) {
if (value == null || value.isEmpty || !isNumeric(value)) {
return 'Invalid input. Please enter the height of the ending point (in m)';
}
return null;
},
controller: heightEndInputController,
),
const Text('Velocity'),
TextFormField(
decoration: const InputDecoration(
hintText: 'Enter the velocity of the starting point (in s)',
),
validator: (String? value) {
if (value == null || value.isEmpty || !isNumeric(value)) {
return 'Invalid input. Please enter the velocity of the starting point (in s)';
}
return null;
},
controller: velocityStartInputController,
),
TextFormField(
decoration: const InputDecoration(
hintText: 'Enter the velocity of the ending point (in s)',
),
validator: (String? value) {
if (value == null || value.isEmpty || !isNumeric(value)) {
return 'Invalid input. Please enter the velocity of the ending point (in s)';
}
return null;
},
controller: velocityEndInputController,
),
const Text('Weight'),
TextFormField(
decoration: const InputDecoration(
hintText: 'Enter the weight in kg',
),
validator: (String? value) {
if (value == null || value.isEmpty || !isNumeric(value)) {
return 'Invalid input. Please enter the weight (in kg)';
}
return null;
},
controller: weightInputController,
),
ElevatedButton(
style: style,
onPressed: onSubmitButtonClick,
child: const Text('Calculate Energy'),
),
],
),
);
}
}