import 'package:flutter/material.dart'; import 'package:font_awesome_flutter/font_awesome_flutter.dart'; import 'package:bmi_calculator/components/icon_content.dart'; import 'package:bmi_calculator/components/reusable_card.dart'; import 'package:bmi_calculator/constants.dart'; import 'package:bmi_calculator/screens/results_page.dart'; import 'package:bmi_calculator/components/bottom_button.dart'; import 'package:bmi_calculator/components/round_icon_button.dart'; import 'package:bmi_calculator/calculator_brain.dart'; enum Gender { male, female, } class InputPage extends StatefulWidget { @override _InputPageState createState() => _InputPageState(); } class _InputPageState extends State { Gender selectedGender; int height = 180; int weight = 60; int age = 20; @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text('BMI CALCULATOR'), ), body: Column( crossAxisAlignment: CrossAxisAlignment.stretch, children: [ Expanded( child: Row( children: [ Expanded( child: ReusableCard( onPress: () { setState(() { selectedGender = Gender.male; }); }, colour: selectedGender == Gender.male ? kActiveCardColour : kInactiveCardColour, cardChild: IconContent( icon: FontAwesomeIcons.mars, label: 'MALE', ), ), ), Expanded( child: ReusableCard( onPress: () { setState(() { selectedGender = Gender.female; }); }, colour: selectedGender == Gender.female ? kActiveCardColour : kInactiveCardColour, cardChild: IconContent( icon: FontAwesomeIcons.venus, label: 'FEMALE', ), ), ), ], )), Expanded( child: ReusableCard( colour: kActiveCardColour, cardChild: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ Text( 'HEIGHT', style: kLabelTextStyle, ), Row( mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.baseline, textBaseline: TextBaseline.alphabetic, children: [ Text( height.toString(), style: kNumberTextStyle, ), Text( 'cm', style: kLabelTextStyle, ) ], ), SliderTheme( data: SliderTheme.of(context).copyWith( inactiveTrackColor: Color(0xFF8D8E98), activeTrackColor: Colors.white, thumbColor: Color(0xFFEB1555), overlayColor: Color(0x29EB1555), thumbShape: RoundSliderThumbShape(enabledThumbRadius: 15.0), overlayShape: RoundSliderOverlayShape(overlayRadius: 30.0), ), child: Slider( value: height.toDouble(), min: 120.0, max: 220.0, onChanged: (double newValue) { setState(() { height = newValue.round(); }); }, ), ), ], ), ), ), Expanded( child: Row( children: [ Expanded( child: ReusableCard( colour: kActiveCardColour, cardChild: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ Text( 'WEIGHT', style: kLabelTextStyle, ), Text( weight.toString(), style: kNumberTextStyle, ), Row( mainAxisAlignment: MainAxisAlignment.center, children: [ RoundIconButton( icon: FontAwesomeIcons.minus, onPressed: () { setState(() { weight--; }); }), SizedBox( width: 10.0, ), RoundIconButton( icon: FontAwesomeIcons.plus, onPressed: () { setState(() { weight++; }); }, ), ], ), ], ), ), ), Expanded( child: ReusableCard( colour: kActiveCardColour, cardChild: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ Text( 'AGE', style: kLabelTextStyle, ), Text( age.toString(), style: kNumberTextStyle, ), Row( mainAxisAlignment: MainAxisAlignment.center, children: [ RoundIconButton( icon: FontAwesomeIcons.minus, onPressed: () { setState( () { age--; }, ); }, ), SizedBox( width: 10.0, ), RoundIconButton( icon: FontAwesomeIcons.plus, onPressed: () { setState(() { age++; }); }) ], ) ], ), ), ), ], ), ), BottomButton( buttonTitle: 'CALCULATE', onTap: () { CalculatorBrain calc = CalculatorBrain(height: height, weight: weight); Navigator.push( context, MaterialPageRoute( builder: (context) => ResultsPage( bmiResult: calc.calculateBMI(), resultText: calc.getResult(), interpretation: calc.getInterpretation(), ), ), ); }, ), ], ), ); } }