import 'dart:convert'; import 'package:flutter/material.dart'; import 'package:http/http.dart' as http; import '../config/urls.dart'; import '../config/user.dart'; class Inputs with ChangeNotifier { List> inputItems = []; Future getInputs({ required String testResultId, required String testTypeId, required bool isId, }) async { var url = isId == true ? "${Url.getInputs}/$testTypeId" : "${Url.getInputs}/$testTypeId?by=code"; var response = await http.get( Uri.parse(url), headers: { 'Authorization': User.token, 'X-Requested-With': 'XMLHttpRequest', }, ); if (response.statusCode != 200) { inputItems = []; notifyListeners(); return false; } final responseData = json.decode(response.body); Map? values; if (testResultId.isNotEmpty) { response = await http.get( Uri.parse(Url.testResultFormValues(testResultId)), headers: {'Authorization': User.token}); values = json.decode(response.body)['data']; } var inputs = responseData['data']['inputs'] as List; var general = responseData['data']['testType'] as Map; clearInputs(); bool result = false; DateTime dateTime = DateTime.now(); String? deviceLabel; if (values != null && values.isNotEmpty) { result = values['result'] == 'Accept' ? true : false; dateTime = values['date'] == null ? DateTime.now() : DateTime.parse(values['date']); deviceLabel = values['device_id'] ?? ''; } inputItems.add({ 'type': 'Label', 'key': 'test_type_id', 'name': general['name'], 'value': general['id'] }); inputItems.add({ 'type': 'Text', 'key': 'device_id', 'name': general['device_label'], 'value': deviceLabel, }); inputItems.add( {'type': 'Date', 'key': 'date', 'name': 'date', 'value': dateTime}); inputItems.add( {'type': 'Switch', 'key': 'result', 'name': 'Result', 'value': result}); setValues(inputs, values); for (var input in inputs) { inputItems.add(input as Map); } inputItems.add({ 'type': 'Image', 'key': 'test_type_id', 'name': general['name'], 'value': general['id'] }); notifyListeners(); return true; } void setValues(inputs, values) { for (var input in inputs) { if (input.containsKey('children')) { setValues(input['children'], values); } var key = "${input['name']}_${input['id']}"; input['key'] = key; if (values != null && values.isNotEmpty && values.containsKey(key)) { if (input['type'] == 'Range' || input['type'] == 'Temperature' || input['type'] == 'Pressure') { input['value'] = double.parse(values[key]); } else if (input['type'] == 'Switch') { input['value'] = values[key] == "1" ? true : false; } else if (input['type'] == 'Time') { input['value'] = values[key] == null ? '' : values[key].substring(0, 2) + ":" + values[key].substring(2, 4); } else { input['value'] = values[key]; } } } } void clearInputs() { inputItems.clear(); } }