import 'package:flutter/material.dart'; import 'package:fluttertoast/fluttertoast.dart'; import 'package:provider/provider.dart'; import 'package:random_string/random_string.dart'; import '../../config/routes.dart'; import '../../providers/input.dart'; import '../../providers/test_results.dart'; import '../../widgets/TestResultScreens/Add/form_creator.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 _isLoadingButton = 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(() { _isLoadingButton = true; }); prvObject.createTestResult(values, batchId).then( (result) { setState(() { _isLoadingButton = false; }); if (result == 'done') { // Navigator.of(context).popAndPushNamed(Routes.testResultScreen); Navigator.of(context).pop(); prvObject.setLoading(); prvObject.resetPageNumber(); prvObject .getTestResults() .then((value) => {prvObject.resetLoading()}); Fluttertoast.showToast( msg: "Test added.", toastLength: Toast.LENGTH_SHORT, gravity: ToastGravity.BOTTOM, ); } else { Fluttertoast.showToast( msg: result, toastLength: Toast.LENGTH_SHORT, gravity: ToastGravity.BOTTOM, ); } }, ); } } @override void didChangeDependencies() { if (_isInit) { setState(() { _isLoading = true; }); var providerObject = Provider.of(context); String testTypeId = Provider.of(context).testTypeId; bool isFromTestID = Provider.of(context).isFromTestID; providerObject.catchImages.clear(); Provider.of(context, listen: false) .getInputs( testResultId: '', testTypeId: testTypeId, isId: isFromTestID, ) .then((_) { setState(() { _isLoading = false; }); }); } _isInit = false; super.didChangeDependencies(); } @override Widget build(BuildContext context) { return SafeArea( child: Scaffold( appBar: AppBar( centerTitle: true, title: Text( 'Add Test Result', style: TextStyle( color: Colors.white, ), ), backgroundColor: Colors.black, actions: [ _isLoadingButton ? Center( child: CircularProgressIndicator( color: Colors.white, ), ) : IconButton( icon: Icon( Icons.save, color: Colors.white, ), onPressed: () { _saveForm(); }, ) ], leading: IconButton( icon: Icon( Icons.keyboard_arrow_left, color: Colors.white, size: 35, ), onPressed: () { Navigator.of(context).popAndPushNamed(Routes.testResultScreen); }, ), ), body: SingleChildScrollView( child: Column( children: [ _isLoading ? Center( child: CircularProgressIndicator( color: Colors.black, ), ) : Form( key: _form, child: Consumer( builder: (context, inputs, _) { formInputs = inputs.inputItems; print(formInputs); return formInputs.length != 0 ? FormCreator( form: formInputs, onChanged: (value) { formInputs = value; }, ) : Center( child: Text('Something went wrong!!!'), ); }, ), ), // 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); } }