import 'package:aitrainer_app/localization/app_language.dart'; import 'package:aitrainer_app/localization/app_localization.dart'; import 'package:aitrainer_app/viewmodel/exercise_changing_view_model.dart'; import 'package:flutter/services.dart'; import 'package:intl/intl.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; //import 'package:datetime_picker_formfield/datetime_picker_formfield.dart'; class ExerciseNewPage extends StatefulWidget{ _ExerciseNewPageState createState() => _ExerciseNewPageState(); } class _ExerciseNewPageState extends State { final List excluded = [43,44]; final _formKey = GlobalKey(); @override Widget build(BuildContext context) { return Consumer( builder: (context, model, child ) { String exerciseName = ""; String customerName = ""; if ( model != null ) { if ( model.exerciseViewModel == null ) { model.createNewModel(); } model.exerciseViewModel.createNew(); customerName = model != null && model.customer != null ? model.customer.name + " " + model.customer.firstname : "Please select a customer"; exerciseName = model != null && model.exerciseType != null ? model.exerciseType.name : "Please select an exercise"; } AppLanguage appLanguage = AppLanguage(); var date = DateTime.now(); String dateName = DateFormat(DateFormat.YEAR_MONTH_DAY, appLanguage.appLocal.toString()).format(date.toUtc()) + " " +DateFormat(DateFormat.HOUR_MINUTE, appLanguage.appLocal.toString()).format(date.toUtc()); return Form( key: _formKey, autovalidate: true, child: Scaffold( resizeToAvoidBottomInset: false, appBar: AppBar( leading: IconButton( icon: Icon(Icons.arrow_back, color: Colors.deepOrange), onPressed: () => { Navigator.of(context).pop() }, ), title: Text(AppLocalizations.of(context).translate(exerciseName) + " " + AppLocalizations.of(context).translate('Save Exercise'), style: TextStyle(fontWeight: FontWeight.bold, fontSize: 18, color: Colors.deepOrange)), backgroundColor: Colors.white70, ), body: Container( decoration: BoxDecoration( image: DecorationImage( image: AssetImage('asset/image/WT_login.png'), fit: BoxFit.cover, //height: double.infinity, //width: double.infinity, alignment: Alignment.center, ), ), child: Container( padding: const EdgeInsets.only (top: 65, left:25, right: 100), child: Column( mainAxisAlignment: MainAxisAlignment.spaceAround, children: [ columnQuantityUnit(model), columnQuantity(model), Column( children: [ Row( mainAxisAlignment: MainAxisAlignment.center, children: [ new InkWell( child: new Text(dateName, style: TextStyle( fontSize: 16,color: Colors.blue)), ), ButtonTheme( minWidth: 30.0, height: 30.0, child: FlatButton( padding: EdgeInsets.only(bottom: 0), color: Colors.transparent, splashColor: Colors.black26, child: Row( children: [ Icon(Icons.arrow_forward_ios, color: Colors.orange,) ]), onPressed:() { print("date change");}, )), ], ), new InkWell( child: new Text(AppLocalizations.of(context).translate('Exercise date and time'), style: TextStyle( fontSize: 16)), ), ]), RaisedButton( textColor: Colors.white, color: Colors.deepOrange, focusColor: Colors.white, onPressed: () => { if (_formKey.currentState.validate()) { //model = ExerciseChangingViewModel(model.exerciseViewModel), if ( ! excluded.contains(model.exerciseType.exerciseTypeId) ) { model.addExercise(), }, Navigator.pop(context), } }, child: Text("Save", style: TextStyle(fontSize: 16),) ), ]), ) ), ), ); }); } Column columnQuantityUnit( ExerciseChangingViewModel model) { Column column = Column(); if ( model.exerciseType != null && model.exerciseType.unitQuantity == "1") { column = Column( children: [ TextFormField( autovalidate: true, textAlign: TextAlign.center, initialValue: "0", style: TextStyle(fontSize: 30, color: Colors.lightBlue, fontWeight: FontWeight.bold), validator: (input) { return validateNumberInput(input); }, inputFormatters: [ WhitelistingTextInputFormatter(RegExp(r"[\d.]")) ], onChanged: (input) => { print ("UnitQuantity value $input"), model.exerciseViewModel.setUnitQuantity( double.parse(input)) }, ), new InkWell( child: new Text(AppLocalizations.of(context).translate( model.exerciseType.unitQuantityUnit), style: TextStyle(fontSize: 16)), ), ]); }; return column; } Column columnQuantity( ExerciseChangingViewModel model) { Column column = Column(); column = Column( children: [ TextFormField( autovalidate: true, textAlign: TextAlign.center, initialValue: "0", style: TextStyle(fontSize: 60, color: Colors.deepOrange, fontWeight: FontWeight.bold), validator: (input) { return validateNumberInput(input); }, inputFormatters: [ WhitelistingTextInputFormatter(RegExp(r"[\d.]")) ], onChanged: (input) => { print ("Quantity value $input"), model.exerciseViewModel.setQuantity( double.parse(input)), model.exerciseViewModel.setUnit(model.exerciseType.unit) } ), new InkWell( child: new Text(AppLocalizations.of(context).translate(model.exerciseType.unit), style: TextStyle(fontSize: 16)), ), ]); return column; } String validateNumberInput( input ) { String error = AppLocalizations.of(context).translate("Please type the right quantity 0-10000"); dynamic rc = ( input != null && input.length > 0); if ( ! rc ) { return null; } Pattern pattern = r'^\d+(?:\.\d+)?$'; RegExp regex = new RegExp(pattern); if (!regex.hasMatch(input)) { return error; } rc = double.tryParse(input); if ( rc == null ) { return error; } if ( ! ( double.parse(input) < 10000 && double.parse(input) > 0) ) { return error; } return null; } }