import 'package:cssd/config/routes.dart'; import 'package:cssd/providers/input.dart'; import 'package:cssd/providers/test_results.dart'; import 'package:cssd/widgets/TestResultScreens/Add/form_creator.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import 'package:random_string/random_string.dart'; class FormPage extends StatefulWidget { final String name; final String uniqueCode; final String testResultId; final String testTypeId; FormPage({this.name, this.uniqueCode, this.testResultId, this.testTypeId}); @override _FormPageState createState() => _FormPageState(); } class _FormPageState extends State { bool _isInit = true; bool _isLoading = false; bool isAdding = false; final _form = GlobalKey(); Map values = {}; List> formInputs; void _saveForm() { final batchId = randomString(10); formatData(formInputs); var prvObject = Provider.of(context, listen: false); if (this.widget.testResultId != null && this.widget.testResultId != '') { values['_method'] = 'put'; TestResultsProvider.updateTestResult(this.widget.testResultId, values) .then((_) { Navigator.of(context).pop(); }); } else { setState(() { _isLoading = true; }); prvObject.createTestResult(values, batchId).then((result) { setState(() { _isLoading = false; }); if (result == 'done') { showDialog( context: context, builder: (ctx) => AlertDialog( content: Text('Test added.'), actions: [ FlatButton( onPressed: () { Navigator.of(ctx).pop(); }, child: Text('Ok'), ) ], ), ).then((value) => Navigator.of(context).popAndPushNamed(Routes.testResultScreen)); } }); } } @override void didChangeDependencies() { if (_isInit) { setState(() { _isLoading = true; }); Provider.of(context) .getInputs( testResultId: this.widget.testResultId ?? "", name: this.widget.name ?? "", uniqueCode: this.widget.uniqueCode ?? "", testTypeId: this.widget.testTypeId ?? "") .then((_) { setState(() { _isLoading = false; }); }); } _isInit = false; super.didChangeDependencies(); } @override Widget build(BuildContext context) { return WillPopScope( onWillPop: () async { Navigator.pushReplacementNamed( context, Routes.testResultAddScreen, ); return true; }, child: Scaffold( appBar: AppBar( centerTitle: true, title: Text('Add Test Result'), actions: [ IconButton( icon: Icon(Icons.save), onPressed: () { _saveForm(); }, ) ], leading: IconButton( icon: Icon( Icons.keyboard_arrow_left, size: 35, ), onPressed: () { Navigator.of(context).popAndPushNamed(Routes.testResultScreen); }, ), ), body: Column( children: [ Expanded( child: _isLoading ? Center(child: CircularProgressIndicator()) : Form( key: _form, child: Consumer( builder: (context, inputs, _) { formInputs = inputs.inputItems; return formInputs.length != 0 ? FormCreator( form: inputs.inputItems, onChanged: (value) { formInputs = value; }, ) : Center( child: Text('An error happen!!!'), ); }, ), ), ), // https://www.cssd-doc.com/api/GetInfo // InkWell( // onTap: () { // _saveForm(); // }, // child: Container( // padding: EdgeInsets.symmetric(horizontal: 60, vertical: 15), // margin: EdgeInsets.symmetric(vertical: 20, horizontal: 50), // decoration: BoxDecoration( // gradient: LinearGradient(colors: [Colors.blue, Colors.green]), // borderRadius: BorderRadius.circular(10), // ), // child: Text( // 'Save', // style: TextStyle(color: Colors.white, fontSize: 17), // textAlign: TextAlign.center, // ), // ), // ), ], )), ); } void formatData(inputs) { for (var input in inputs) { if (input['type'] != 'Form') { if (input['key'] == 'result') { values[input["key"]] = input["value"] ? "Accept" : "Reject"; // print('${input["key"]} : ${input["value"] ? "Accept" : "Reject"}'); } else if (input['key'] == 'date') { var date = input["value"]; values[input["key"]] = "${date.year}-${date.month}-${date.day}"; } else { values[input["key"]] = input["value"]; // print('${input["key"]} : ${input["value"]}'); } } if (input['children'] != null && input['children'].isNotEmpty) { formatData(input['children']); } } print(values); } }