import 'package:flutter/material.dart'; import 'util/conver_util.dart'; void main() { runApp(MaterialApp( title: 'Measures Converter', home: MyApp(), )); } class MyApp extends StatefulWidget { @override MyAppState createState() => MyAppState(); } class MyAppState extends State<MyApp> { double _numberFrom = 0; String _startMeasure; String _convertedMeasure; double _result = 0; String _resultMessage = ''; @override Widget build(BuildContext context) { double sizeX = MediaQuery.of(context).size.width; double sizeY = MediaQuery.of(context).size.height; final TextStyle inputStyle = TextStyle( fontSize: 20, color: Colors.blue[900], ); final TextStyle labelStyle = TextStyle( fontSize: 24, color: Colors.grey[700], ); final spacer = Padding(padding: EdgeInsets.only(bottom: sizeY / 40)); final List<String> _measures = [ 'meters', 'kilometers', 'grams', 'kilograms', 'feet', 'miles', 'pounds (lbs)', 'ounces', ]; return Scaffold( appBar: AppBar( title: Text('Measures Converter'), ), body: Container( sizeX, padding: EdgeInsets.all(sizeX / 20), child: SingleChildScrollView( child: Column( children: [ Text( 'Value', style: labelStyle, ), spacer, TextField( style: inputStyle, decoration: InputDecoration( hintText: "Please insert the measure to be converted", ), onChanged: (text) { setState(() { _numberFrom = double.parse(text); }); }, ), spacer, Text( 'From', style: labelStyle, ), spacer, DropdownButton( isExpanded: true, style: inputStyle, value: _startMeasure, items: _measures.map((String value) { return DropdownMenuItem<String>( value: value, child: Text( value, style: inputStyle, ), ); }).toList(), onChanged: (value) { onStartMeasureChanged(value); }, ), spacer, Text( 'To', style: labelStyle, ), spacer, DropdownButton( isExpanded: true, style: inputStyle, value: _convertedMeasure, items: _measures.map((String value) { return DropdownMenuItem<String>( value: value, child: Text( value, style: inputStyle, ), ); }).toList(), onChanged: (value) { onConvertedMeasureChanged(value); }, ), spacer, RaisedButton( child: Text('Convert', style: inputStyle), onPressed: () => convert(), ), spacer, Text( _resultMessage, style: labelStyle, ) ], )), ), ); } void onStartMeasureChanged(String value) { setState(() { _startMeasure = value; }); } void onConvertedMeasureChanged(String value) { setState(() { _convertedMeasure = value; }); } void convert() { if (_startMeasure.isEmpty || _convertedMeasure.isEmpty || _numberFrom == 0) { return; } Conversion c = Conversion(); double result = c.convert(_numberFrom, _startMeasure, _convertedMeasure); setState(() { _result = result; if (result == 0) { _resultMessage = 'This conversion cannot be performed'; } else { _resultMessage = '${_numberFrom.toString()} $_startMeasure are ${_result.toString()} $_convertedMeasure'; } }); } }