diff --git a/lib/api/api_client.dart b/lib/api/api_client.dart index 69e5989b..1a560f8e 100644 --- a/lib/api/api_client.dart +++ b/lib/api/api_client.dart @@ -129,7 +129,7 @@ class ApiClient { } Future postJsonForResponse(String url, T jsonObject, - {String? token, Map? queryParameters, Map? headers, int retryTimes = 0, bool isFormData = true}) async { + {String? token, Map? queryParameters, Map? headers, int retryTimes = 0, bool isFormData = false}) async { int currentRetryTime = retryTimes; String? requestBody; late Map stringObj; @@ -142,6 +142,11 @@ class ApiClient { } } + if(!kReleaseMode) + { print("url:$url"); + print("requestBody:$requestBody"); + } + if (isFormData) { headers = {'Content-Type': 'application/x-www-form-urlencoded'}; stringObj = ((jsonObject ?? {}) as Map).map((key, value) => MapEntry(key, value?.toString() ?? "")); diff --git a/lib/api/departments_api_client.dart b/lib/api/departments_api_client.dart new file mode 100644 index 00000000..c0cf283b --- /dev/null +++ b/lib/api/departments_api_client.dart @@ -0,0 +1,27 @@ +import 'dart:convert'; + +import 'package:http/http.dart'; +import 'package:test_sa/api/api_client.dart'; +import 'package:test_sa/controllers/api_routes/urls.dart'; + +import '../models/department.dart'; + +class DepartmentsApiClient{ + + static final DepartmentsApiClient _instance = DepartmentsApiClient._internal(); + + DepartmentsApiClient._internal(); + + factory DepartmentsApiClient() => _instance; + + Future getDepartment() async { + Response response; + response = await ApiClient().postJsonForResponse( + URLs.host1 + URLs.getDepartments, + {}, + isFormData: false + ); + Map listJson = json.decode(utf8.decode(response.bodyBytes).replaceAll("\\", "")); + return listJson['data'].map((department) => Department.fromJson(department)).toList(); + } +} \ No newline at end of file diff --git a/lib/api/device_transfer_api_client.dart b/lib/api/device_transfer_api_client.dart index 9cb7cbe7..1b2bfd25 100644 --- a/lib/api/device_transfer_api_client.dart +++ b/lib/api/device_transfer_api_client.dart @@ -15,16 +15,19 @@ class DeviceTransferApiClient { factory DeviceTransferApiClient() => _instance; Future> getRequests({required List items, required int pageItemNumber}) async { - final response = await ApiClient().getJsonForResponse("${URLs.host1}${URLs.getDeviceTransfer}", queryParameters: { - "uid": "${UserApiClient().user?.id}", - "token": "${UserApiClient().user?.token}", - "page": "${(items.length) ~/ pageItemNumber}", - }, headers: { - "Content-Type": "application/json; charset=utf-8" - }); + Map body= { + "pageSize": "${(items.length) ~/ pageItemNumber}", + }; + + final response = await ApiClient().postJsonForResponse( + "${URLs.host1}${URLs.getDeviceTransfer}", + body, + isFormData: false + ); - List listJson = json.decode(utf8.decode(response.bodyBytes).replaceAll("\\", "")); - return listJson.map((request) => DeviceTransfer.fromJson(request)).toList(); + Map listJson = json.decode(utf8.decode(response.bodyBytes).replaceAll("\\", "")); + print(listJson); + return listJson['data'].map((request) => DeviceTransfer.fromJson(request)).toList(); } Future createRequest({ diff --git a/lib/api/devices_api_client.dart b/lib/api/devices_api_client.dart index b77d50a5..8b53111d 100644 --- a/lib/api/devices_api_client.dart +++ b/lib/api/devices_api_client.dart @@ -16,22 +16,31 @@ class DevicesApiClient { /// Fetch devices by [hospitalId] and insert the result into [devices] list Future getEquipment(String hospitalId) async { - final response = await ApiClient().getJsonForResponse(URLs.host1 + URLs.getEquipment, queryParameters: {'client': hospitalId}); - List equipmentListJson = json.decode(utf8.decode(response.bodyBytes)); + + + final response = await ApiClient().postJsonForResponse( + URLs.host1 + URLs.getEquipment, + {'client': hospitalId}, + isFormData: false + ); + + Map equipmentListJson = json.decode(utf8.decode(response.bodyBytes)); + print(equipmentListJson); devices.clear(); - devices.addAll(equipmentListJson.map((device) => Device.fromJson(device)).toList()); + devices.addAll(equipmentListJson['data'] != null ? equipmentListJson['data'].map((device) => Device.fromJson(device)).toList(): []); debugPrint("devices : ${devices.length}"); } /// Returns a list of devices by [hospitalId] and [serialNumber] (or | and) [number] Future> getDevicesList({required String hospitalId, String? serialNumber, String? number}) async { - final response = await ApiClient().getJsonForResponse( + final response = await ApiClient().postJsonForResponse( URLs.host1 + URLs.getEquipment, - queryParameters: { + { 'client': hospitalId, if (serialNumber?.isEmpty == false) 'name': serialNumber, if (number?.isEmpty == false) 'number': number, }, + isFormData: false ); List categoriesListJson = json.decode(utf8.decode(response.bodyBytes)); return categoriesListJson.map((device) => Device.fromJson(device)).toList(); @@ -39,12 +48,13 @@ class DevicesApiClient { /// Returns a list of devices by [hospitalId] (and optionally) [serialNumber] Future> getDevicesListBySN({required String hospitalId, required String serialNumber}) async { - final response = await ApiClient().getJsonForResponse( + final response = await ApiClient().postJsonForResponse( URLs.host1 + URLs.getEquipment, - queryParameters: { + { 'client': hospitalId, if (serialNumber.isNotEmpty) 'serial_qr': serialNumber, }, + isFormData: false ); List categoriesListJson = json.decode(utf8.decode(response.bodyBytes)); return categoriesListJson.map((device) => Device.fromJson(device)).toList(); diff --git a/lib/api/gas_refill_api_client.dart b/lib/api/gas_refill_api_client.dart index 31cc3d83..0b5d86f6 100644 --- a/lib/api/gas_refill_api_client.dart +++ b/lib/api/gas_refill_api_client.dart @@ -1,5 +1,6 @@ import 'dart:convert'; +import 'package:http/http.dart'; import 'package:test_sa/api/user_api_client.dart'; import '../controllers/api_routes/urls.dart'; @@ -16,42 +17,73 @@ class GasRefillApiClient { // todo @majd there is a method postJsonForObject, use this, rather then postJsonForResponse Future> getRequestPages({required List items, required int pageItemNumber}) async { - final response = await ApiClient().getJsonForResponse("${URLs.host1}${URLs.getGasRefill}", //body - headers: { - "Content-Type": "application/json; charset=utf-8" - }, - queryParameters: { - "uid": "${UserApiClient().user?.id}", - "token": "${UserApiClient().user?.token}", - "page": "${(items.length) ~/ pageItemNumber}", - }); + + Map body = { + "uid": "${UserApiClient().user?.id}", + "token": "${UserApiClient().user?.token}", + "pageSize": "${(items.length) ~/ pageItemNumber}", + }; + + + final response = await ApiClient().postJsonForResponse( + "${URLs.host1}${URLs.getGasRefill}", + body, + isFormData: false, + ); // client's request was successfully received - List requestsListJson = json.decode(utf8.decode(response.bodyBytes)); - return requestsListJson.map((request) => GasRefillModel.fromJson(request)).toList(); + var requestsListJson = json.decode(utf8.decode(response.bodyBytes)); + print(requestsListJson); + return requestsListJson['data'].map((request) => GasRefillModel.fromJson(request)).toList(); } Future createModel({ required GasRefillModel model, }) async { + + Map body = { - "uid": UserApiClient().user?.id.toString(), - "token": UserApiClient().user?.token ?? "", - "title": model.title ?? "", - "status": "0", //model.status.value.toString(), + "gazRefillNo": await generateGazRefillNo(), + "assignedEmployee": { + "id": UserApiClient().user?.id.toString(), + "name": UserApiClient().user?.username.toString() + }, + "status": { + "id": 0, + "name": "", + "value": 0 + }, }; - body["details"] = jsonEncode(model.details + body["gazRefillDetails"] = model.details ?.map((model) => { - "type": model.type?.id.toString(), - "size": model.cylinderSize?.id.toString(), - "requsted_qty": model.requestedQuantity.toString(), + "gasType": { + "id": model.type?.id, + "name": model.type?.label.toString(), + "value": model.type?.id + }, + "cylinderType": { + "id": 0, + "name": "", + "value": 0 + }, + "cylinderSize": { + "id": model.cylinderSize?.id, + "name": model.cylinderSize?.label.toString(), + "value": model.cylinderSize?.id, + }, + "requestedQty": model.requestedQuantity, + "deliverdQty": 0 + }) - .toList()); + .toList(); + + print(body); final response = await ApiClient().postJsonForResponse( "${URLs.host1}${URLs.requestGasRefill}", body, + isFormData: false ); return GasRefillModel.fromJson(json.decode(utf8.decode(response.bodyBytes))[0]); @@ -61,24 +93,57 @@ class GasRefillApiClient { required GasRefillModel? oldModel, required GasRefillModel newModel, }) async { + Map body = { - "uid": UserApiClient().user?.id.toString(), - "token": UserApiClient().user?.token, - "title": newModel.title, - "status": newModel.status?.id.toString(), + "id": oldModel?.id, + "gazRefillNo": await generateGazRefillNo(), + "assignedEmployee": { + "id": UserApiClient().user?.id.toString(), + "name": UserApiClient().user?.username.toString() + }, + "status": { + "id": 0, + "name": "", + "value": 0 + }, }; - body["details"] = jsonEncode(newModel.details + body["gazRefillDetails"] = newModel.details ?.map((model) => { - "type": model.type?.id.toString(), - "size": model.cylinderSize?.id.toString(), - "requsted_qty": model.requestedQuantity.toString(), - "deliverd_qty": model.deliveredQuantity.toString(), - }) - .toList()); - - final reponse = await ApiClient().postJsonForResponse("${URLs.host1}${URLs.updateGasRefill}/${newModel.id}", body); + "gasType": { + "id": model.type?.id, + "name": model.type?.label.toString(), + "value": model.type?.id + }, + "cylinderType": { + "id": 0, + "name": "", + "value": 0 + }, + "cylinderSize": { + "id": model.cylinderSize?.id, + "name": model.cylinderSize?.label.toString(), + "value": model.cylinderSize?.id, + }, + "requestedQty": model.requestedQuantity, + "deliverdQty": 0 + + }) + .toList(); + + + + final reponse = await ApiClient().putJsonForResponse("${URLs.host1}${URLs.updateGasRefill}/${newModel.id}", body); oldModel?.fromGasRefillModel(newModel); } + + + Future generateGazRefillNo() async { + + final reponse = await ApiClient().getJsonForResponse("${URLs.host1}${URLs.generateGazRefillNo}"); + var data = json.decode(reponse.body); + return data['data']; + + } } diff --git a/lib/api/gas_types_api_client.dart b/lib/api/gas_types_api_client.dart new file mode 100644 index 00000000..1d8ce3e3 --- /dev/null +++ b/lib/api/gas_types_api_client.dart @@ -0,0 +1,25 @@ +import 'dart:convert'; + +import 'package:http/http.dart'; +import 'package:test_sa/api/api_client.dart'; +import 'package:test_sa/controllers/api_routes/urls.dart'; + +import '../models/lookup.dart'; + +class GasTypesApiClient{ + + static final GasTypesApiClient _instance = GasTypesApiClient._internal(); + + GasTypesApiClient._internal(); + + factory GasTypesApiClient() => _instance; + + Future > getData() async { + Response response; + response = await ApiClient().getJsonForResponse("${URLs.host1}${URLs.getGasTypes}"); + Map categoriesListJson = json.decode(utf8.decode(response.bodyBytes)); + return categoriesListJson["data"].map((item) => Lookup.fromJson(item)).toList(); + + } + +} \ No newline at end of file diff --git a/lib/api/hospitals_api_client.dart b/lib/api/hospitals_api_client.dart new file mode 100644 index 00000000..9c418409 --- /dev/null +++ b/lib/api/hospitals_api_client.dart @@ -0,0 +1,53 @@ + +import 'dart:convert'; + +import 'package:http/http.dart'; +import 'package:test_sa/controllers/api_routes/urls.dart'; + +import '../models/hospital.dart'; +import 'api_client.dart'; + +class HospitalsApiClient{ + +static final HospitalsApiClient _instance = HospitalsApiClient._internal(); + +HospitalsApiClient._internal(); + +factory HospitalsApiClient() => _instance; + + Future getHospitals({ + required String title, + required int pageSize + }) async { + + Response response = await ApiClient().postJsonForResponse( + URLs.host1 + URLs.getHospitals, + { + "pageSize": pageSize.toString(), + "name": title, + }, + isFormData: false + ); + + Map categoriesListJson = json.decode(utf8.decode(response.bodyBytes)); + print(categoriesListJson); + return categoriesListJson['data'].map((category) => Hospital.fromJson(category)).toList(); + } + + +Future> getHospitalsList({ + required String title, +}) async { + Response response; + response = await ApiClient().postJsonForResponse( + URLs.host1 + URLs.getHospitals, + {"name" : title}, + isFormData: false + ); + + List page = []; + Map categoriesListJson = json.decode(utf8.decode(response.bodyBytes)); + page = categoriesListJson['data'].map((category) => Hospital.fromJson(category)).toList(); + return page; +} +} \ No newline at end of file diff --git a/lib/api/service_request_api_client.dart b/lib/api/service_request_api_client.dart index a702319a..f34e0190 100644 --- a/lib/api/service_request_api_client.dart +++ b/lib/api/service_request_api_client.dart @@ -92,7 +92,7 @@ class ServiceRequestApiClient { body["date"] = newDate ?? ''; body["ass_emp"] = employee?.id?.toString() ?? ''; await ApiClient().postJsonForResponse('${URLs.host1}${URLs.updateRequestDate}', body); - request?.engineerName = employee?.label; + request?.engineerName = employee?.label.toString(); } Future createServiceReport({required ServiceReport? report, required ServiceRequest? request}) async { diff --git a/lib/controllers/api_routes/urls.dart b/lib/controllers/api_routes/urls.dart index ec450674..8795ecb9 100644 --- a/lib/controllers/api_routes/urls.dart +++ b/lib/controllers/api_routes/urls.dart @@ -1,15 +1,16 @@ -class URLs { +class URLs{ URLs._(); static const host2 = "http://194.163.164.213/atoms/api"; - static const host1 = "https://atomsuat.hmg.com"; + // static const host1 = "https://atoms.hmg.com/api"; // production url + static const host1 = "https://atomsuat.hmg.com"; // uat url // API Routes static const login = "/mobile/MobileAuth/Login"; // post static const register = "/handle/create/user"; // post static const updateProfile = "/update/user/profile"; // post - static const getHospitals = "/handle/return/all/clients"; // get - static const getDepartments = "/handle/return/all/departments"; // get - static const getEquipment = "/handle/return/all/client/equipments"; // get ?client=208051 + static const getHospitals = "/mobile/Customer/GetCustomers"; // get + static const getDepartments = "/mobile/Department/search"; // get + static const getEquipment = "/mobile/Asset/GetAssets"; // get ?client=208051 static const getServiceRequests = "/return/user/calls"; // get static const getPreventiveMaintenanceVisits = "/return/user/calibrations"; // get @@ -41,17 +42,18 @@ class URLs { static const getServiceReportDefectTypes = "/return/call/defect/type/list"; // get //gas refill - static const getGasTypes = "/return/gas/refill/types"; // get - static const getGasCylinderSize = "/return/gas/refill/size/cylinder"; // get - static const getGasStatus = "/return/gas/refill/status"; // get - static const requestGasRefill = "/create/gas/refill"; // get - static const updateGasRefill = "/update/gas/refill/"; // get - static const getGasRefill = "/search/gas/refill"; // get + static const getGasTypes = "/mobile/Lookups/GetLookup?lookupEnum=606"; // get + static const getGasCylinderSize = "/mobile/Lookups/GetLookup?lookupEnum=608"; // get + static const getGasStatus = "/mobile/Lookups/GetLookup?lookupEnum=609"; // get + static const requestGasRefill = "/mobile/GazRefill/AddGazRefill"; // get + static const updateGasRefill = "/mobile/GazRefill/UpdateGazRefill"; // get + static const getGasRefill = "/mobile/GazRefill/GetGazRefills"; // get + static const generateGazRefillNo= "/mobile/GazRefill/GenerateGazRefillNumber"; //device transfer - static const requestDeviceTransfer = "/create/transfer/asset"; // get - static const updateDeviceTransfer = "/update/transfer/asset"; // get - static const getDeviceTransfer = "/search/transfer/asset"; // get + static const requestDeviceTransfer = "/mobile/AssetTransfer/AddAssetTransfer"; // get + static const updateDeviceTransfer = "/mobile/AssetTransfer/UpdateAssetTransfer"; // get + static const getDeviceTransfer = "/mobile/AssetTransfer/GetAssetTransfers"; // get // employee static const getEmployees = "/return/assigned/employee"; // get @@ -63,4 +65,5 @@ class URLs { static const getPentryStatus = "/return/pentry/status/list"; // get // contacts static const getPentryContacts = "/handle/return/all/contacts"; // get -} + +} \ No newline at end of file diff --git a/lib/controllers/providers/api/departments_provider.dart b/lib/controllers/providers/api/departments_provider.dart index 7b54bdb5..c1c9474e 100644 --- a/lib/controllers/providers/api/departments_provider.dart +++ b/lib/controllers/providers/api/departments_provider.dart @@ -2,14 +2,16 @@ import 'dart:convert'; import 'package:flutter/cupertino.dart'; import 'package:http/http.dart'; +import 'package:test_sa/api/departments_api_client.dart'; import '../../../models/department.dart'; import '../../api_routes/urls.dart'; +import '../loading_notifier.dart'; -class DepartmentsProvider extends ChangeNotifier { +class DepartmentsProvider extends LoadingNotifier { //reset provider data void reset() { - departments = null; + departments.clear(); stateCode = null; } @@ -20,44 +22,17 @@ class DepartmentsProvider extends ChangeNotifier { // contain user data // when user not login or register _user = null - List? departments; + List departments=[]; - // when categories in-process _loading = true - // done _loading = true - // failed _loading = false - bool? isLoading; + Future getDepartment() async { - /// return -2 if request in progress - /// return -1 if error happen when sending request - /// return state code if request complete may be 200, 404 or 403 - /// for more details check http state manager - /// lib\controllers\http_status_manger\http_status_manger.dart - Future getDepartment(String host) async { - if (isLoading == true) { - return -2; - } - isLoading = true; - notifyListeners(); - Response response; - try { - response = await get( - Uri.parse(host + URLs.getDepartments), - headers: {"Content-Type": "application/json; charset=utf-8"}, - ); - } catch (error) { - isLoading = false; - stateCode = -1; + waitApiRequest(() async { + departments.addAll(await DepartmentsApiClient().getDepartment()); notifyListeners(); - return -1; - } - stateCode = response.statusCode; - if (response.statusCode >= 200 && response.statusCode < 300) { - // client's request was successfully received - List listJson = json.decode(utf8.decode(response.bodyBytes).replaceAll("\\", "")); - departments = listJson.map((department) => Department.fromJson(department)).toList(); + }, + onSuccess: (){ + stateCode=200; } - isLoading = false; - notifyListeners(); - return response.statusCode; + ); } } diff --git a/lib/controllers/providers/api/device_transfer_provider.dart b/lib/controllers/providers/api/device_transfer_provider.dart index 0996d0d4..330d207d 100644 --- a/lib/controllers/providers/api/device_transfer_provider.dart +++ b/lib/controllers/providers/api/device_transfer_provider.dart @@ -35,6 +35,7 @@ class DeviceTransferProvider extends LoadingNotifier { waitApiRequest(() async { items.clear(); items.addAll(await DeviceTransferApiClient().getRequests(items: items, pageItemNumber: pageItemNumber)); + print(items); notifyListeners(); if (items.length == pageItemNumber) { nextPage = true; diff --git a/lib/controllers/providers/api/hospitals_provider.dart b/lib/controllers/providers/api/hospitals_provider.dart index f0403dfa..db9abfef 100644 --- a/lib/controllers/providers/api/hospitals_provider.dart +++ b/lib/controllers/providers/api/hospitals_provider.dart @@ -3,126 +3,59 @@ import 'dart:convert'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:http/http.dart'; +import 'package:test_sa/api/hospitals_api_client.dart'; +import 'package:test_sa/controllers/providers/loading_notifier.dart'; import '../../../models/hospital.dart'; import '../../../models/user.dart'; import '../../api_routes/urls.dart'; -class HospitalsProvider extends ChangeNotifier { +class HospitalsProvider extends LoadingNotifier { // number of items call in each request final pageItemNumber = 50; //reset provider data void reset() { - _hospitals = null; + _hospitals.clear(); _stateCode = null; } - // state code of current request to defied error message - // like 400 customer request failed - // 500 service not available int? _stateCode; int? get stateCode => _stateCode; - // true if there is next page in product list and false if not - bool _nextPage = true; - - bool get nextPage => _nextPage; // contain user data // when user not login or register _user = null - List? _hospitals; - - List? get hospitals => _hospitals; + List _hospitals=[]; - // when categories in-process _loading = true - // done _loading = true - // failed _loading = false - bool? _loading; + List get hospitals => _hospitals; - bool? get isLoading => _loading; - - set isLoading(bool? isLoading) { - _loading = isLoading; - notifyListeners(); - } - /// return -2 if request in progress - /// return -1 if error happen when sending request - /// return state code if request complete may be 200, 404 or 403 - /// for more details check http state manager - /// lib\controllers\http_status_manger\http_status_manger.dart - Future getHospitals({ - required String host, - required User user, + Future getHospitals({ required String? title, }) async { - if (_loading == true) { - return -2; - } - _loading = true; - notifyListeners(); - Response response; - try { - response = await get( - Uri.parse( - "${host + URLs.getHospitals}?page=${(_hospitals?.length ?? 0) ~/ pageItemNumber}${title == null || title.isEmpty ? "" : "&name=$title"}", - ), - headers: {"Content-Type": "application/json; charset=utf-8"}, - ); - _stateCode = response.statusCode; - if (response.statusCode >= 200 && response.statusCode < 300) { - // client's request was successfully received - List categoriesListJson = json.decode(utf8.decode(response.bodyBytes)); - List page = categoriesListJson.map((category) => Hospital.fromJson(category)).toList(); - if (hospitals == null) _hospitals = []; - - _hospitals?.addAll(page); - if (page.length >= pageItemNumber) { - _nextPage = true; - } else { - _nextPage = false; - } - } - _loading = false; - notifyListeners(); - return response.statusCode; - } catch (error) { - _loading = false; - _stateCode = -1; - notifyListeners(); - return -1; + waitApiRequest(() async { + _hospitals = []; + _hospitals.addAll(await HospitalsApiClient().getHospitals(title: title ?? "", pageSize: _hospitals.length ~/ pageItemNumber)); + notifyListeners(); + }, + onSuccess: (){ + _stateCode = 200; } + ); } Future> getHospitalsList({ - required String host, - required User user, required String title, }) async { - Response response; - try { - response = await get( - Uri.parse( - host + URLs.getHospitals + (title.isEmpty ? "" : "?name=$title"), - ), - headers: {"Content-Type": "application/json; charset=utf-8"}, - ); - _stateCode = response.statusCode; - - List page = []; - if (response.statusCode >= 200 && response.statusCode < 300) { - // client's request was successfully received - List categoriesListJson = json.decode(utf8.decode(response.bodyBytes)); - page = categoriesListJson.map((category) => Hospital.fromJson(category)).toList(); - } - return page; - } catch (error) { - _loading = false; - _stateCode = -1; - notifyListeners(); - return []; + waitApiRequest((){ + return HospitalsApiClient().getHospitalsList(title: title); + }, + onSuccess: (){ + _stateCode=200; } + ); + return []; } } diff --git a/lib/controllers/providers/api/status_drop_down/gas_refill/gas_cylinder_size_provider.dart b/lib/controllers/providers/api/status_drop_down/gas_refill/gas_cylinder_size_provider.dart index 6a1c53f9..cc767b86 100644 --- a/lib/controllers/providers/api/status_drop_down/gas_refill/gas_cylinder_size_provider.dart +++ b/lib/controllers/providers/api/status_drop_down/gas_refill/gas_cylinder_size_provider.dart @@ -57,14 +57,16 @@ class GasCylinderSizesProvider extends ChangeNotifier { notifyListeners(); Response response; try { + response = await get( Uri.parse((host ?? '') + URLs.getGasCylinderSize), ); _stateCode = response.statusCode; if (response.statusCode >= 200 && response.statusCode < 300) { // client's request was successfully received - List categoriesListJson = json.decode(utf8.decode(response.bodyBytes)); - _items = categoriesListJson.map((item) => Lookup.fromJson(item)).toList(); + + var categoriesListJson = json.decode(response.body); + _items = categoriesListJson['data'].map((item) => Lookup.fromJson(item)).toList(); } _loading = false; notifyListeners(); diff --git a/lib/controllers/providers/api/status_drop_down/gas_refill/gas_types_provider.dart b/lib/controllers/providers/api/status_drop_down/gas_refill/gas_types_provider.dart index 03ab6b24..55a677f3 100644 --- a/lib/controllers/providers/api/status_drop_down/gas_refill/gas_types_provider.dart +++ b/lib/controllers/providers/api/status_drop_down/gas_refill/gas_types_provider.dart @@ -4,16 +4,18 @@ import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:http/http.dart'; +import '../../../../../api/gas_types_api_client.dart'; import '../../../../../models/lookup.dart'; import '../../../../../models/user.dart'; import '../../../../api_routes/urls.dart'; +import '../../../loading_notifier.dart'; -class GasTypesProvider extends ChangeNotifier { +class GasTypesProvider extends LoadingNotifier { //reset provider data void reset() { - _items = null; - _loading = null; + _items?.clear(); _stateCode = null; + stopLoading(); } // state code of current request to defied error message @@ -29,44 +31,14 @@ class GasTypesProvider extends ChangeNotifier { List? get items => _items; - // when categories in-process _loading = true - // done _loading = true - // failed _loading = false - bool? _loading; - - bool? get isLoading => _loading; - - set isLoading(bool? isLoading) { - _loading = isLoading; - notifyListeners(); - } - - /// return -2 if request in progress - /// return -1 if error happen when sending request - /// return state code if request complete may be 200, 404 or 403 - /// for more details check http state manager - /// lib\controllers\http_status_manger\http_status_manger.dart - Future getData({required String? host, required User? user}) async { - if (_loading == true) return -2; - _loading = true; - notifyListeners(); - Response response; - try { - response = await get(Uri.parse((host ?? '') + URLs.getGasTypes)); - _stateCode = response.statusCode; - if (response.statusCode >= 200 && response.statusCode < 300) { - // client's request was successfully received - List categoriesListJson = json.decode(utf8.decode(response.bodyBytes)); - _items = categoriesListJson.map((item) => Lookup.fromJson(item)).toList(); - } - _loading = false; - notifyListeners(); - return response.statusCode; - } catch (error) { - _loading = false; - _stateCode = -1; + Future getData() async { + waitApiRequest(() async { + _items = await GasTypesApiClient().getData(); notifyListeners(); - return -1; - } + }, + onSuccess: () { + _stateCode = 200; + notifyListeners(); + }); } } diff --git a/lib/models/department.dart b/lib/models/department.dart index da54c314..9b1bde5c 100644 --- a/lib/models/department.dart +++ b/lib/models/department.dart @@ -1,5 +1,5 @@ class Department { - String? id; + int? id; String? name; Department({ diff --git a/lib/models/device/device.dart b/lib/models/device/device.dart index e266d366..db628c73 100644 --- a/lib/models/device/device.dart +++ b/lib/models/device/device.dart @@ -27,7 +27,7 @@ class Device { factory Device.fromJson(Map parsedJson) { return Device( - id: parsedJson["nid"] ?? parsedJson["id"], + id: parsedJson["nid"] ?? parsedJson["id"].toString(), serialNumber: parsedJson["sn"] ?? parsedJson["value"], number: parsedJson["asset_no"], brand: parsedJson["brand"] as String?, diff --git a/lib/models/device/device_transfer.dart b/lib/models/device/device_transfer.dart index bb6d6d21..0b7a0b1b 100644 --- a/lib/models/device/device_transfer.dart +++ b/lib/models/device/device_transfer.dart @@ -2,7 +2,7 @@ import 'device.dart'; import 'device_transfer_info.dart'; class DeviceTransfer { - String? id; + int? id; String? userId; String? title; Device? device; @@ -46,8 +46,8 @@ class DeviceTransfer { title: parsedJson["title"], userId: parsedJson["uid"], device: Device.fromJson(parsedJson["eq_sn"]), - sender: DeviceTransferInfo.fromJson(parsedJson, "sender_"), - receiver: DeviceTransferInfo.fromJson(parsedJson, "receiver_"), + sender: DeviceTransferInfo.fromJson(parsedJson, "sender"), + receiver: DeviceTransferInfo.fromJson(parsedJson, "receiver"), ); } } diff --git a/lib/models/device/device_transfer_info.dart b/lib/models/device/device_transfer_info.dart index 4c18df0f..6a6fa24f 100644 --- a/lib/models/device/device_transfer_info.dart +++ b/lib/models/device/device_transfer_info.dart @@ -3,7 +3,7 @@ import '../hospital.dart'; import '../lookup.dart'; class DeviceTransferInfo { - String? userId; + int? userId; String? comment; Hospital? client; Department? department; @@ -27,18 +27,18 @@ class DeviceTransferInfo { Map toJson(bool isSender) { Map body = {}; - final baseKey = isSender ? "sender_" : "receiver_"; + final baseKey = isSender ? "sender" : "receiver"; - if (comment?.isNotEmpty ?? false) body["${baseKey}comment"] = comment!; + if (comment?.isNotEmpty ?? false) body["${baseKey}Comment"] = comment!; if (workingHours?.isNotEmpty ?? false) { - body["${baseKey}working_hours"] = workingHours!; + body["${baseKey}WorkingHours"] = workingHours!; } if (travelingHours?.isNotEmpty ?? false) { - body["${baseKey}travel_hours"] = comment!; + body["${baseKey}TravelingHours"] = travelingHours!; } final status = this.status; - if (status != null) body["${baseKey}status"] = status.id.toString(); - if (signature?.isNotEmpty ?? false) body["${baseKey}image"] = signature!; + if (status != null) body["${baseKey}MachineStatusId"] = status.id.toString(); + if (signature?.isNotEmpty ?? false) body["${baseKey}AttachmentUrl"] = signature!; return body; } @@ -62,15 +62,15 @@ class DeviceTransferInfo { factory DeviceTransferInfo.fromJson(Map parsedJson, String key) { return DeviceTransferInfo( - workingHours: parsedJson["${key}working_hours"], - travelingHours: parsedJson["${key}travel_hours"], - name: parsedJson["${key}name"], - signature: parsedJson["${key}image"], - userId: parsedJson["${key}id"], - comment: parsedJson["${key}comment"], - client: Hospital.fromJson(parsedJson["${key}client"]), - department: Department.fromJson(parsedJson["${key}department"]), - status: Lookup.fromJson(parsedJson["${key}status"]), + workingHours: parsedJson["${key}WorkingHours"], + travelingHours: parsedJson["${key}TravelingHours"], + name: parsedJson["${key}SiteName"], + signature: parsedJson["${key}AttachmentUrl"], + userId: parsedJson["${key}SiteId"], + comment: parsedJson["${key}Comment"], + client: Hospital(id: parsedJson["${key}senderAssignedEmployeeId"], name: parsedJson["${key}senderAssignedEmployeeName"]), + department: Department(id: parsedJson["${key}DepartmentId"], name: parsedJson["${key}DepartmentName"]), + status: Lookup(id: parsedJson["${key}senderMachineStatusId"], label: parsedJson["${key}senderMachineStatusName"]), ); } } diff --git a/lib/models/gas_refill/gas_refill_details.dart b/lib/models/gas_refill/gas_refill_details.dart index 077e4c3a..f9effc4c 100644 --- a/lib/models/gas_refill/gas_refill_details.dart +++ b/lib/models/gas_refill/gas_refill_details.dart @@ -23,10 +23,10 @@ class GasRefillDetails { factory GasRefillDetails.fromJson(Map parsedJson) { return GasRefillDetails( - type: Lookup.fromJson(parsedJson["type"]), - cylinderSize: Lookup.fromJson(parsedJson["size"]), - requestedQuantity: parsedJson["requsted_qty"] == null ? 0 : int.tryParse(parsedJson["requsted_qty"].toString()) ?? 0, - deliveredQuantity: parsedJson["deliverd_qty"] == null ? 0 : int.tryParse(parsedJson["deliverd_qty"].toString()) ?? 0, + type: Lookup.fromJson(parsedJson["gasType"]), + cylinderSize: Lookup.fromJson(parsedJson["cylinderSize"]), + requestedQuantity: parsedJson["requestedQty"] == null ? 0 : int.tryParse(parsedJson["requestedQty"].toString()) ?? 0, + deliveredQuantity: parsedJson["deliverdQty"] == null ? 0 : int.tryParse(parsedJson["deliverdQty"].toString()) ?? 0, model: null, ); } diff --git a/lib/models/gas_refill/gas_refill_model.dart b/lib/models/gas_refill/gas_refill_model.dart index 0ce33a99..0feef819 100644 --- a/lib/models/gas_refill/gas_refill_model.dart +++ b/lib/models/gas_refill/gas_refill_model.dart @@ -2,7 +2,7 @@ import '../lookup.dart'; import 'gas_refill_details.dart'; class GasRefillModel { - String? id; + int? id; String? userId; String? clientName; String? title; @@ -36,15 +36,15 @@ class GasRefillModel { factory GasRefillModel.fromJson(Map parsedJson) { List details = []; - if (parsedJson["details"] != null) { - List list = parsedJson["details"]; + if (parsedJson["gazRefillDetails"] != null) { + List list = parsedJson["gazRefillDetails"]; details = list.map((e) => GasRefillDetails.fromJson(e)).toList(); } return GasRefillModel( id: parsedJson["id"], userId: parsedJson["uid"], title: parsedJson["title"], - clientName: parsedJson["client"], + clientName: parsedJson["site"]['custName'], status: Lookup.fromJson(parsedJson["status"]), details: details, ); diff --git a/lib/models/hospital.dart b/lib/models/hospital.dart index a41d8dd2..bf1ecfe5 100644 --- a/lib/models/hospital.dart +++ b/lib/models/hospital.dart @@ -1,5 +1,5 @@ class Hospital { - String? id; + int? id; String? name; Hospital({ diff --git a/lib/models/lookup.dart b/lib/models/lookup.dart index d0d14a34..9afaf7b7 100644 --- a/lib/models/lookup.dart +++ b/lib/models/lookup.dart @@ -25,14 +25,14 @@ class Lookup { factory Lookup.fromJson(Map parsedJson) { return Lookup( - label: parsedJson["value"], + label: parsedJson["name"], id: parsedJson["id"] is int? ? parsedJson["id"] : int.tryParse(parsedJson["id"] ?? parsedJson["uid"]), ); } factory Lookup.fromIntIdJson(Map parsedJson) { return Lookup( - label: parsedJson["value"], + label: parsedJson["name"], id: parsedJson["id"], ); } diff --git a/lib/views/pages/device_transfer/update_device_transfer.dart b/lib/views/pages/device_transfer/update_device_transfer.dart index e0286a28..a4836599 100644 --- a/lib/views/pages/device_transfer/update_device_transfer.dart +++ b/lib/views/pages/device_transfer/update_device_transfer.dart @@ -56,7 +56,7 @@ class _UpdateDeviceTransferState extends State { _isLoading = true; setState(() {}); int? status = await _deviceTransferProvider?.updateRequest( - user: UserApiClient().user ?? User(), host: _settingProvider?.host ?? "", requestId: widget.model?.id ?? "", isSender: widget.isSender ?? false, newModel: _formModel, oldModel: widget.model); + user: UserApiClient().user ?? User(), host: _settingProvider?.host ?? "", requestId: widget.model?.id.toString() ?? "", isSender: widget.isSender ?? false, newModel: _formModel, oldModel: widget.model); _isLoading = false; setState(() {}); if (status != null && status >= 200 && status < 300) { diff --git a/lib/views/pages/user/gas_refill/gas_refill_details.dart b/lib/views/pages/user/gas_refill/gas_refill_details.dart index a20ab9a2..97e77702 100644 --- a/lib/views/pages/user/gas_refill/gas_refill_details.dart +++ b/lib/views/pages/user/gas_refill/gas_refill_details.dart @@ -167,7 +167,7 @@ class _GasRefillDetailsState extends State { textScaleFactor: AppStyle.getScaleFactor(context), ), ), - StatusLabel(label: _model.status?.label ?? "", color: AColors.getGasStatusColor(_model.status?.id ?? 0)), + StatusLabel(label: _model.status?.label.toString() ?? "", color: AColors.getGasStatusColor(_model.status?.id ?? 0)), ], ), const SizedBox( diff --git a/lib/views/pages/user/gas_refill/request_gas_refill.dart b/lib/views/pages/user/gas_refill/request_gas_refill.dart index a0d2aed0..3ea104b6 100644 --- a/lib/views/pages/user/gas_refill/request_gas_refill.dart +++ b/lib/views/pages/user/gas_refill/request_gas_refill.dart @@ -18,6 +18,7 @@ import '../../../widgets/app_text_form_field.dart'; import '../../../widgets/buttons/app_button.dart'; import '../../../widgets/gas_refill/gas_refill_create_details_item.dart'; import '../../../widgets/loaders/loading_manager.dart'; +import '../../../widgets/status/gas_refill/gas_cylinder_size.dart'; import '../../../widgets/status/gas_refill/gas_type.dart'; import '../../../widgets/titles/app_sub_title.dart'; @@ -147,17 +148,17 @@ class _RequestGasRefillState extends State { }, ), - // const SizedBox(height: 8,), - // const ASubTitle("Cylinder Size"), - // if(_validate && _currentDetails.cylinderSize == null) - // ASubTitle(_subtitle.requiredWord,color: Colors.red,), - // const SizedBox(height: 4,), - // GasCylinderSizeMenu( - // initialValue: _currentDetails.cylinderSize, - // onSelect: (status){ - // _currentDetails.cylinderSize = status; - // }, - // ), + const SizedBox(height: 8,), + const ASubTitle("Cylinder Size"), + if(_validate && _currentDetails.cylinderSize == null) + ASubTitle(_subtitle?.requiredWord??"",color: Colors.red,), + const SizedBox(height: 4,), + GasCylinderSizeMenu( + initialValue: _currentDetails.cylinderSize, + onSelect: (status){ + _currentDetails.cylinderSize = status; + }, + ), const SizedBox( height: 8, ), diff --git a/lib/views/widgets/departments/single_department_picker.dart b/lib/views/widgets/departments/single_department_picker.dart index a656b647..96901364 100644 --- a/lib/views/widgets/departments/single_department_picker.dart +++ b/lib/views/widgets/departments/single_department_picker.dart @@ -35,14 +35,12 @@ class _SingleDepartmentPickerState extends State { return Scaffold( resizeToAvoidBottomInset: false, body: LoadingManager( - isLoading: _departmentsProvider?.isLoading, + isLoading: _departmentsProvider?.loading, stateCode: _departmentsProvider?.stateCode, isFailedLoading: _departmentsProvider?.departments == null, onRefresh: () async { _departmentsProvider?.reset(); - await _departmentsProvider?.getDepartment( - _settingProvider?.host ?? "", - ); + await _departmentsProvider?.getDepartment(); }, child: Column( children: [ diff --git a/lib/views/widgets/gas_refill/gas_refill_update_details_item.dart b/lib/views/widgets/gas_refill/gas_refill_update_details_item.dart index 699ffd9b..2f9104e4 100644 --- a/lib/views/widgets/gas_refill/gas_refill_update_details_item.dart +++ b/lib/views/widgets/gas_refill/gas_refill_update_details_item.dart @@ -48,7 +48,7 @@ class GasRefillUpdateDetailsItem extends StatelessWidget { initialValue: (details.deliveredQuantity ?? "").toString(), textAlign: TextAlign.center, style: Theme.of(context).textTheme.subtitle1, - validator: (value) => Validator.isNumeric(value!) ? "" : "allow numbers only", + validator: (value) => Validator.isNumeric(value) ? null : "allow numbers only", textInputType: TextInputType.number, onSaved: (value) { details.deliveredQuantity = int.tryParse(value!); diff --git a/lib/views/widgets/hospitals/hospital_auto_complete_field.dart b/lib/views/widgets/hospitals/hospital_auto_complete_field.dart index f16b8344..b8c472c9 100644 --- a/lib/views/widgets/hospitals/hospital_auto_complete_field.dart +++ b/lib/views/widgets/hospitals/hospital_auto_complete_field.dart @@ -73,7 +73,7 @@ class _HospitalAutoCompleteFieldState extends State { widget.onSearch!(_controller.text); }), suggestionsCallback: (vale) async { - return await HospitalsProvider().getHospitalsList(host: _settingProvider?.host ?? "", title: vale, user: User()); + return await HospitalsProvider().getHospitalsList(title: vale); }, itemBuilder: (context, hospital) { return HospitalItem( diff --git a/lib/views/widgets/hospitals/single_hospital_picker.dart b/lib/views/widgets/hospitals/single_hospital_picker.dart index 9e6e512f..ed2ecc0b 100644 --- a/lib/views/widgets/hospitals/single_hospital_picker.dart +++ b/lib/views/widgets/hospitals/single_hospital_picker.dart @@ -36,12 +36,12 @@ class _SingleHospitalPickerState extends State { return Scaffold( resizeToAvoidBottomInset: false, body: LoadingManager( - isLoading: _hospitalsProvider?.isLoading, + isLoading: _hospitalsProvider?.loading, stateCode: _hospitalsProvider?.stateCode, isFailedLoading: _hospitalsProvider?.hospitals == null, onRefresh: () async { _hospitalsProvider?.reset(); - await _hospitalsProvider?.getHospitals(host: _settingProvider?.host ?? "", user: User(), title: ''); + await _hospitalsProvider?.getHospitals(title: ''); }, child: Column( children: [ diff --git a/lib/views/widgets/status/gas_refill/gas_type.dart b/lib/views/widgets/status/gas_refill/gas_type.dart index 666cb9ec..caeff6a9 100644 --- a/lib/views/widgets/status/gas_refill/gas_type.dart +++ b/lib/views/widgets/status/gas_refill/gas_type.dart @@ -3,6 +3,7 @@ import 'package:provider/provider.dart'; import '../../../../api/user_api_client.dart'; import '../../../../controllers/providers/api/status_drop_down/gas_refill/gas_types_provider.dart'; +import '../../../../controllers/providers/loading_notifier.dart'; import '../../../../controllers/providers/settings/setting_provider.dart'; import '../../../../controllers/providers/user_provider.dart'; import '../../../../models/lookup.dart'; @@ -21,16 +22,14 @@ class GasTypeMenu extends StatelessWidget { @override Widget build(BuildContext context) { - final settingProvider = Provider.of(context); - final userProvider = Provider.of(context); final menuProvider = Provider.of(context); return LoadingManager( - isLoading: menuProvider.isLoading, + isLoading: GasTypesProvider().loading, isFailedLoading: menuProvider.items == null, stateCode: menuProvider.stateCode, onRefresh: () async { menuProvider.reset(); - await menuProvider.getData(user: UserApiClient().user, host: settingProvider.host); + await menuProvider.getData(); }, child: SingleStatusMenu( initialStatus: initialValue, diff --git a/pubspec.lock b/pubspec.lock new file mode 100644 index 00000000..414df867 --- /dev/null +++ b/pubspec.lock @@ -0,0 +1,1167 @@ +# Generated by pub +# See https://dart.dev/tools/pub/glossary#lockfile +packages: + _flutterfire_internals: + dependency: transitive + description: + name: _flutterfire_internals + sha256: "3ff770dfff04a67b0863dff205a0936784de1b87a5e99b11c693fc10e66a9ce3" + url: "https://pub.dev" + source: hosted + version: "1.0.12" + archive: + dependency: transitive + description: + name: archive + sha256: ed7cc591a948744994714375caf9a2ce89e1d82e8243997c8a2994d57181c212 + url: "https://pub.dev" + source: hosted + version: "3.3.5" + args: + dependency: transitive + description: + name: args + sha256: b003c3098049a51720352d219b0bb5f219b60fbfb68e7a4748139a06a5676515 + url: "https://pub.dev" + source: hosted + version: "2.3.1" + async: + dependency: transitive + description: + name: async + sha256: bfe67ef28df125b7dddcea62755991f807aa39a2492a23e1550161692950bbe0 + url: "https://pub.dev" + source: hosted + version: "2.10.0" + audioplayers: + dependency: "direct main" + description: + name: audioplayers + sha256: bb506873ab4fb663db9b47243754ef669adf684dbe6ba8b57c26e27b834065c4 + url: "https://pub.dev" + source: hosted + version: "1.2.0" + audioplayers_android: + dependency: transitive + description: + name: audioplayers_android + sha256: "53969a1c5d94ebdaef72e334f1c0ea2f3946ab2baa8d398a9584ac27baf4f037" + url: "https://pub.dev" + source: hosted + version: "1.1.3" + audioplayers_darwin: + dependency: transitive + description: + name: audioplayers_darwin + sha256: dcd5a4ceef5aa3d04e8ae49441f13a3d9f93fe6e9e88fe121ff6b6f391b2a40b + url: "https://pub.dev" + source: hosted + version: "1.0.4" + audioplayers_linux: + dependency: transitive + description: + name: audioplayers_linux + sha256: ea1cb9a5c9389b38f293ee1375b22b02fb1d1f7a2e1517fcb674297dd074dc7b + url: "https://pub.dev" + source: hosted + version: "1.0.2" + audioplayers_platform_interface: + dependency: transitive + description: + name: audioplayers_platform_interface + sha256: "589c3106d0c656540e81ac2c7a78a9414a4a6534ae7b77f06ddb5d6aa5dc653c" + url: "https://pub.dev" + source: hosted + version: "2.1.0" + audioplayers_web: + dependency: transitive + description: + name: audioplayers_web + sha256: "13fb044a443276223774f8ed1f8d2b82f443cf8980edd0e172e55967c1556a49" + url: "https://pub.dev" + source: hosted + version: "2.1.0" + audioplayers_windows: + dependency: transitive + description: + name: audioplayers_windows + sha256: "87964ddece7275b97277935df67af60536155914c81c633f708914b99433129b" + url: "https://pub.dev" + source: hosted + version: "1.1.1" + boolean_selector: + dependency: transitive + description: + name: boolean_selector + sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66" + url: "https://pub.dev" + source: hosted + version: "2.1.1" + cached_network_image: + dependency: "direct main" + description: + name: cached_network_image + sha256: fd3d0dc1d451f9a252b32d95d3f0c3c487bc41a75eba2e6097cb0b9c71491b15 + url: "https://pub.dev" + source: hosted + version: "3.2.3" + cached_network_image_platform_interface: + dependency: transitive + description: + name: cached_network_image_platform_interface + sha256: bb2b8403b4ccdc60ef5f25c70dead1f3d32d24b9d6117cfc087f496b178594a7 + url: "https://pub.dev" + source: hosted + version: "2.0.0" + cached_network_image_web: + dependency: transitive + description: + name: cached_network_image_web + sha256: b8eb814ebfcb4dea049680f8c1ffb2df399e4d03bf7a352c775e26fa06e02fa0 + url: "https://pub.dev" + source: hosted + version: "1.0.2" + carousel_slider: + dependency: "direct main" + description: + name: carousel_slider + sha256: "9c695cc963bf1d04a47bd6021f68befce8970bcd61d24938e1fb0918cf5d9c42" + url: "https://pub.dev" + source: hosted + version: "4.2.1" + characters: + dependency: transitive + description: + name: characters + sha256: e6a326c8af69605aec75ed6c187d06b349707a27fbff8222ca9cc2cff167975c + url: "https://pub.dev" + source: hosted + version: "1.2.1" + checked_yaml: + dependency: transitive + description: + name: checked_yaml + sha256: "3d1505d91afa809d177efd4eed5bb0eb65805097a1463abdd2add076effae311" + url: "https://pub.dev" + source: hosted + version: "2.0.2" + cli_util: + dependency: transitive + description: + name: cli_util + sha256: "66f86e916d285c1a93d3b79587d94bd71984a66aac4ff74e524cfa7877f1395c" + url: "https://pub.dev" + source: hosted + version: "0.3.5" + clock: + dependency: transitive + description: + name: clock + sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf + url: "https://pub.dev" + source: hosted + version: "1.1.1" + collection: + dependency: transitive + description: + name: collection + sha256: cfc915e6923fe5ce6e153b0723c753045de46de1b4d63771530504004a45fae0 + url: "https://pub.dev" + source: hosted + version: "1.17.0" + convert: + dependency: transitive + description: + name: convert + sha256: "0f08b14755d163f6e2134cb58222dd25ea2a2ee8a195e53983d57c075324d592" + url: "https://pub.dev" + source: hosted + version: "3.1.1" + cross_file: + dependency: transitive + description: + name: cross_file + sha256: f71079978789bc2fe78d79227f1f8cfe195b31bbd8db2399b0d15a4b96fb843b + url: "https://pub.dev" + source: hosted + version: "0.3.3+2" + crypto: + dependency: transitive + description: + name: crypto + sha256: aa274aa7774f8964e4f4f38cc994db7b6158dd36e9187aaceaddc994b35c6c67 + url: "https://pub.dev" + source: hosted + version: "3.0.2" + cupertino_icons: + dependency: "direct main" + description: + name: cupertino_icons + sha256: e35129dc44c9118cee2a5603506d823bab99c68393879edb440e0090d07586be + url: "https://pub.dev" + source: hosted + version: "1.0.5" + dbus: + dependency: transitive + description: + name: dbus + sha256: "6f07cba3f7b3448d42d015bfd3d53fe12e5b36da2423f23838efc1d5fb31a263" + url: "https://pub.dev" + source: hosted + version: "0.7.8" + fake_async: + dependency: transitive + description: + name: fake_async + sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78" + url: "https://pub.dev" + source: hosted + version: "1.3.1" + ffi: + dependency: transitive + description: + name: ffi + sha256: a38574032c5f1dd06c4aee541789906c12ccaab8ba01446e800d9c5b79c4a978 + url: "https://pub.dev" + source: hosted + version: "2.0.1" + file: + dependency: transitive + description: + name: file + sha256: "1b92bec4fc2a72f59a8e15af5f52cd441e4a7860b49499d69dfa817af20e925d" + url: "https://pub.dev" + source: hosted + version: "6.1.4" + firebase_core: + dependency: "direct main" + description: + name: firebase_core + sha256: c129209ba55f3d4272c89fb4a4994c15bea77fb6de63a82d45fb6bc5c94e4355 + url: "https://pub.dev" + source: hosted + version: "2.4.1" + firebase_core_platform_interface: + dependency: transitive + description: + name: firebase_core_platform_interface + sha256: "5fab93f5b354648efa62e7cc829c90efb68c8796eecf87e0888cae2d5f3accd4" + url: "https://pub.dev" + source: hosted + version: "4.5.2" + firebase_core_web: + dependency: transitive + description: + name: firebase_core_web + sha256: "18b35ce111b0a4266abf723c825bcf9d4e2519d13638cc7f06f2a8dd960c75bc" + url: "https://pub.dev" + source: hosted + version: "2.1.0" + firebase_messaging: + dependency: "direct main" + description: + name: firebase_messaging + sha256: dc010a6436333029fba858415fe65887c3fe44d8f6e6ea162bb8d3dd764fbcb6 + url: "https://pub.dev" + source: hosted + version: "14.2.1" + firebase_messaging_platform_interface: + dependency: transitive + description: + name: firebase_messaging_platform_interface + sha256: abda2d766486096eb1c568c7b20aef46180596c8b0708190b929133ff03e0a8d + url: "https://pub.dev" + source: hosted + version: "4.2.10" + firebase_messaging_web: + dependency: transitive + description: + name: firebase_messaging_web + sha256: "7a0ce957bd2210e8636325152234728874dad039f1c7271ba1be5c752fdc5888" + url: "https://pub.dev" + source: hosted + version: "3.2.11" + flare_flutter: + dependency: "direct main" + description: + name: flare_flutter + sha256: "99d63c60f00fac81249ce6410ee015d7b125c63d8278a30da81edf3317a1f6a0" + url: "https://pub.dev" + source: hosted + version: "3.0.2" + flutter: + dependency: "direct main" + description: flutter + source: sdk + version: "0.0.0" + flutter_blurhash: + dependency: transitive + description: + name: flutter_blurhash + sha256: "05001537bd3fac7644fa6558b09ec8c0a3f2eba78c0765f88912882b1331a5c6" + url: "https://pub.dev" + source: hosted + version: "0.7.0" + flutter_cache_manager: + dependency: transitive + description: + name: flutter_cache_manager + sha256: "32cd900555219333326a2d0653aaaf8671264c29befa65bbd9856d204a4c9fb3" + url: "https://pub.dev" + source: hosted + version: "3.3.0" + flutter_keyboard_visibility: + dependency: transitive + description: + name: flutter_keyboard_visibility + sha256: "86b71bbaffa38e885f5c21b1182408b9be6951fd125432cf6652c636254cef2d" + url: "https://pub.dev" + source: hosted + version: "5.4.0" + flutter_keyboard_visibility_linux: + dependency: transitive + description: + name: flutter_keyboard_visibility_linux + sha256: "6fba7cd9bb033b6ddd8c2beb4c99ad02d728f1e6e6d9b9446667398b2ac39f08" + url: "https://pub.dev" + source: hosted + version: "1.0.0" + flutter_keyboard_visibility_macos: + dependency: transitive + description: + name: flutter_keyboard_visibility_macos + sha256: c5c49b16fff453dfdafdc16f26bdd8fb8d55812a1d50b0ce25fc8d9f2e53d086 + url: "https://pub.dev" + source: hosted + version: "1.0.0" + flutter_keyboard_visibility_platform_interface: + dependency: transitive + description: + name: flutter_keyboard_visibility_platform_interface + sha256: e43a89845873f7be10cb3884345ceb9aebf00a659f479d1c8f4293fcb37022a4 + url: "https://pub.dev" + source: hosted + version: "2.0.0" + flutter_keyboard_visibility_web: + dependency: transitive + description: + name: flutter_keyboard_visibility_web + sha256: d3771a2e752880c79203f8d80658401d0c998e4183edca05a149f5098ce6e3d1 + url: "https://pub.dev" + source: hosted + version: "2.0.0" + flutter_keyboard_visibility_windows: + dependency: transitive + description: + name: flutter_keyboard_visibility_windows + sha256: fc4b0f0b6be9b93ae527f3d527fb56ee2d918cd88bbca438c478af7bcfd0ef73 + url: "https://pub.dev" + source: hosted + version: "1.0.0" + flutter_launcher_icons: + dependency: "direct main" + description: + name: flutter_launcher_icons + sha256: a9de6706cd844668beac27c0aed5910fa0534832b3c2cad61a5fd977fce82a5d + url: "https://pub.dev" + source: hosted + version: "0.10.0" + flutter_lints: + dependency: "direct dev" + description: + name: flutter_lints + sha256: aeb0b80a8b3709709c9cc496cdc027c5b3216796bc0af0ce1007eaf24464fd4c + url: "https://pub.dev" + source: hosted + version: "2.0.1" + flutter_local_notifications: + dependency: "direct main" + description: + name: flutter_local_notifications + sha256: f222919a34545931e47b06000836b5101baeffb0e6eb5a4691d2d42851740dd9 + url: "https://pub.dev" + source: hosted + version: "12.0.4" + flutter_local_notifications_linux: + dependency: transitive + description: + name: flutter_local_notifications_linux + sha256: "3c6d6db334f609a92be0c0915f40871ec56f5d2adf01e77ae364162c587c0ca8" + url: "https://pub.dev" + source: hosted + version: "2.0.0" + flutter_local_notifications_platform_interface: + dependency: transitive + description: + name: flutter_local_notifications_platform_interface + sha256: "5ec1feac5f7f7d9266759488bc5f76416152baba9aa1b26fe572246caa00d1ab" + url: "https://pub.dev" + source: hosted + version: "6.0.0" + flutter_localizations: + dependency: "direct main" + description: flutter + source: sdk + version: "0.0.0" + flutter_plugin_android_lifecycle: + dependency: transitive + description: + name: flutter_plugin_android_lifecycle + sha256: "60fc7b78455b94e6de2333d2f95196d32cf5c22f4b0b0520a628804cb463503b" + url: "https://pub.dev" + source: hosted + version: "2.0.7" + flutter_sound: + dependency: "direct main" + description: + name: flutter_sound + sha256: "090a4694b11ecc744c2010621c4ffc5fe7c3079d304ea014961a72c7b72cfe6c" + url: "https://pub.dev" + source: hosted + version: "9.2.13" + flutter_sound_platform_interface: + dependency: transitive + description: + name: flutter_sound_platform_interface + sha256: "4537eaeb58a32748c42b621ad6116f7f4c6ee0a8d6ffaa501b165fe1c9df4753" + url: "https://pub.dev" + source: hosted + version: "9.2.13" + flutter_sound_web: + dependency: transitive + description: + name: flutter_sound_web + sha256: ad4ca92671a1879e1f613e900bbbdb8170b20d57d1e4e6363018fe56b055594f + url: "https://pub.dev" + source: hosted + version: "9.2.13" + flutter_svg: + dependency: transitive + description: + name: flutter_svg + sha256: "6ff9fa12892ae074092de2fa6a9938fb21dbabfdaa2ff57dc697ff912fc8d4b2" + url: "https://pub.dev" + source: hosted + version: "1.1.6" + flutter_test: + dependency: "direct dev" + description: flutter + source: sdk + version: "0.0.0" + flutter_typeahead: + dependency: "direct main" + description: + name: flutter_typeahead + sha256: "0ec56e1deac7556f3616f3cd53c9a25bf225dc8b72e9f44b5a7717e42bb467b5" + url: "https://pub.dev" + source: hosted + version: "4.1.1" + flutter_web_plugins: + dependency: transitive + description: flutter + source: sdk + version: "0.0.0" + fluttertoast: + dependency: "direct main" + description: + name: fluttertoast + sha256: "7cc92eabe01e3f1babe1571c5560b135dfc762a34e41e9056881e2196b178ec1" + url: "https://pub.dev" + source: hosted + version: "8.1.2" + font_awesome_flutter: + dependency: "direct main" + description: + name: font_awesome_flutter + sha256: "875dbb9ec1ad30d68102019ceb682760d06c72747c1c5b7885781b95f88569cc" + url: "https://pub.dev" + source: hosted + version: "10.3.0" + graphs: + dependency: transitive + description: + name: graphs + sha256: f9e130f3259f52d26f0cfc0e964513796dafed572fa52e45d2f8d6ca14db39b2 + url: "https://pub.dev" + source: hosted + version: "2.2.0" + http: + dependency: "direct main" + description: + name: http + sha256: "6aa2946395183537c8b880962d935877325d6a09a2867c3970c05c0fed6ac482" + url: "https://pub.dev" + source: hosted + version: "0.13.5" + http_parser: + dependency: transitive + description: + name: http_parser + sha256: "2aa08ce0341cc9b354a498388e30986515406668dbcc4f7c950c3e715496693b" + url: "https://pub.dev" + source: hosted + version: "4.0.2" + image: + dependency: transitive + description: + name: image + sha256: "8e9d133755c3e84c73288363e6343157c383a0c6c56fc51afcc5d4d7180306d6" + url: "https://pub.dev" + source: hosted + version: "3.3.0" + image_picker: + dependency: "direct main" + description: + name: image_picker + sha256: a8f2f0aed50c03230ab37e93ca2905c50b6c4097245345956eb24a88f45328cd + url: "https://pub.dev" + source: hosted + version: "0.8.6" + image_picker_android: + dependency: transitive + description: + name: image_picker_android + sha256: b22718074bcecfd0d5008e5fe1ab89db157e125c015b0776ab57ce2160167b82 + url: "https://pub.dev" + source: hosted + version: "0.8.5+4" + image_picker_for_web: + dependency: transitive + description: + name: image_picker_for_web + sha256: "7d319fb74955ca46d9bf7011497860e3923bb67feebcf068f489311065863899" + url: "https://pub.dev" + source: hosted + version: "2.1.10" + image_picker_ios: + dependency: transitive + description: + name: image_picker_ios + sha256: "356426b01c5acd493db244dd6122e9864ef712d4f97b1bfa8cf29809efc06d8b" + url: "https://pub.dev" + source: hosted + version: "0.8.6+5" + image_picker_platform_interface: + dependency: transitive + description: + name: image_picker_platform_interface + sha256: "7cef2f28f4f2fef99180f636c3d446b4ccbafd6ba0fad2adc9a80c4040f656b8" + url: "https://pub.dev" + source: hosted + version: "2.6.2" + intl: + dependency: "direct main" + description: + name: intl + sha256: "910f85bce16fb5c6f614e117efa303e85a1731bb0081edf3604a2ae6e9a3cc91" + url: "https://pub.dev" + source: hosted + version: "0.17.0" + js: + dependency: transitive + description: + name: js + sha256: "5528c2f391ededb7775ec1daa69e65a2d61276f7552de2b5f7b8d34ee9fd4ab7" + url: "https://pub.dev" + source: hosted + version: "0.6.5" + json_annotation: + dependency: transitive + description: + name: json_annotation + sha256: "3520fa844009431b5d4491a5a778603520cdc399ab3406332dcc50f93547258c" + url: "https://pub.dev" + source: hosted + version: "4.7.0" + lints: + dependency: transitive + description: + name: lints + sha256: "5e4a9cd06d447758280a8ac2405101e0e2094d2a1dbdd3756aec3fe7775ba593" + url: "https://pub.dev" + source: hosted + version: "2.0.1" + logger: + dependency: transitive + description: + name: logger + sha256: "5076f09225f91dc49289a4ccb92df2eeea9ea01cf7c26d49b3a1f04c6a49eec1" + url: "https://pub.dev" + source: hosted + version: "1.1.0" + matcher: + dependency: transitive + description: + name: matcher + sha256: "16db949ceee371e9b99d22f88fa3a73c4e59fd0afed0bd25fc336eb76c198b72" + url: "https://pub.dev" + source: hosted + version: "0.12.13" + material_color_utilities: + dependency: transitive + description: + name: material_color_utilities + sha256: d92141dc6fe1dad30722f9aa826c7fbc896d021d792f80678280601aff8cf724 + url: "https://pub.dev" + source: hosted + version: "0.2.0" + meta: + dependency: transitive + description: + name: meta + sha256: "6c268b42ed578a53088d834796959e4a1814b5e9e164f147f580a386e5decf42" + url: "https://pub.dev" + source: hosted + version: "1.8.0" + mime: + dependency: transitive + description: + name: mime + sha256: "52e38f7e1143ef39daf532117d6b8f8f617bf4bcd6044ed8c29040d20d269630" + url: "https://pub.dev" + source: hosted + version: "1.0.3" + nested: + dependency: transitive + description: + name: nested + sha256: "03bac4c528c64c95c722ec99280375a6f2fc708eec17c7b3f07253b626cd2a20" + url: "https://pub.dev" + source: hosted + version: "1.0.0" + octo_image: + dependency: transitive + description: + name: octo_image + sha256: "107f3ed1330006a3bea63615e81cf637433f5135a52466c7caa0e7152bca9143" + url: "https://pub.dev" + source: hosted + version: "1.0.2" + package_info: + dependency: "direct main" + description: + name: package_info + sha256: "6c07d9d82c69e16afeeeeb6866fe43985a20b3b50df243091bfc4a4ad2b03b75" + url: "https://pub.dev" + source: hosted + version: "2.0.2" + path: + dependency: transitive + description: + name: path + sha256: db9d4f58c908a4ba5953fcee2ae317c94889433e5024c27ce74a37f94267945b + url: "https://pub.dev" + source: hosted + version: "1.8.2" + path_drawing: + dependency: transitive + description: + name: path_drawing + sha256: bbb1934c0cbb03091af082a6389ca2080345291ef07a5fa6d6e078ba8682f977 + url: "https://pub.dev" + source: hosted + version: "1.0.1" + path_parsing: + dependency: transitive + description: + name: path_parsing + sha256: e3e67b1629e6f7e8100b367d3db6ba6af4b1f0bb80f64db18ef1fbabd2fa9ccf + url: "https://pub.dev" + source: hosted + version: "1.0.1" + path_provider: + dependency: transitive + description: + name: path_provider + sha256: "050e8e85e4b7fecdf2bb3682c1c64c4887a183720c802d323de8a5fd76d372dd" + url: "https://pub.dev" + source: hosted + version: "2.0.11" + path_provider_android: + dependency: transitive + description: + name: path_provider_android + sha256: a776c088d671b27f6e3aa8881d64b87b3e80201c64e8869b811325de7a76c15e + url: "https://pub.dev" + source: hosted + version: "2.0.22" + path_provider_ios: + dependency: transitive + description: + name: path_provider_ios + sha256: "03d639406f5343478352433f00d3c4394d52dac8df3d847869c5e2333e0bbce8" + url: "https://pub.dev" + source: hosted + version: "2.0.11" + path_provider_linux: + dependency: transitive + description: + name: path_provider_linux + sha256: ab0987bf95bc591da42dffb38c77398fc43309f0b9b894dcc5d6f40c4b26c379 + url: "https://pub.dev" + source: hosted + version: "2.1.7" + path_provider_macos: + dependency: transitive + description: + name: path_provider_macos + sha256: "2a97e7fbb7ae9dcd0dfc1220a78e9ec3e71da691912e617e8715ff2a13086ae8" + url: "https://pub.dev" + source: hosted + version: "2.0.6" + path_provider_platform_interface: + dependency: transitive + description: + name: path_provider_platform_interface + sha256: f0abc8ebd7253741f05488b4813d936b4d07c6bae3e86148a09e342ee4b08e76 + url: "https://pub.dev" + source: hosted + version: "2.0.5" + path_provider_windows: + dependency: transitive + description: + name: path_provider_windows + sha256: bcabbe399d4042b8ee687e17548d5d3f527255253b4a639f5f8d2094a9c2b45c + url: "https://pub.dev" + source: hosted + version: "2.1.3" + pedantic: + dependency: transitive + description: + name: pedantic + sha256: "67fc27ed9639506c856c840ccce7594d0bdcd91bc8d53d6e52359449a1d50602" + url: "https://pub.dev" + source: hosted + version: "1.11.1" + permission_handler: + dependency: "direct main" + description: + name: permission_handler + sha256: "33c6a1253d1f95fd06fa74b65b7ba907ae9811f9d5c1d3150e51417d04b8d6a8" + url: "https://pub.dev" + source: hosted + version: "10.2.0" + permission_handler_android: + dependency: transitive + description: + name: permission_handler_android + sha256: "8028362b40c4a45298f1cbfccd227c8dd6caf0e27088a69f2ba2ab15464159e2" + url: "https://pub.dev" + source: hosted + version: "10.2.0" + permission_handler_apple: + dependency: transitive + description: + name: permission_handler_apple + sha256: "9c370ef6a18b1c4b2f7f35944d644a56aa23576f23abee654cf73968de93f163" + url: "https://pub.dev" + source: hosted + version: "9.0.7" + permission_handler_platform_interface: + dependency: transitive + description: + name: permission_handler_platform_interface + sha256: "68abbc472002b5e6dfce47fe9898c6b7d8328d58b5d2524f75e277c07a97eb84" + url: "https://pub.dev" + source: hosted + version: "3.9.0" + permission_handler_windows: + dependency: transitive + description: + name: permission_handler_windows + sha256: f67cab14b4328574938ecea2db3475dad7af7ead6afab6338772c5f88963e38b + url: "https://pub.dev" + source: hosted + version: "0.1.2" + petitparser: + dependency: transitive + description: + name: petitparser + sha256: "49392a45ced973e8d94a85fdb21293fbb40ba805fc49f2965101ae748a3683b4" + url: "https://pub.dev" + source: hosted + version: "5.1.0" + platform: + dependency: transitive + description: + name: platform + sha256: "4a451831508d7d6ca779f7ac6e212b4023dd5a7d08a27a63da33756410e32b76" + url: "https://pub.dev" + source: hosted + version: "3.1.0" + plugin_platform_interface: + dependency: transitive + description: + name: plugin_platform_interface + sha256: dbf0f707c78beedc9200146ad3cb0ab4d5da13c246336987be6940f026500d3a + url: "https://pub.dev" + source: hosted + version: "2.1.3" + pointycastle: + dependency: transitive + description: + name: pointycastle + sha256: db7306cf0249f838d1a24af52b5a5887c5bf7f31d8bb4e827d071dc0939ad346 + url: "https://pub.dev" + source: hosted + version: "3.6.2" + process: + dependency: transitive + description: + name: process + sha256: "53fd8db9cec1d37b0574e12f07520d582019cb6c44abf5479a01505099a34a09" + url: "https://pub.dev" + source: hosted + version: "4.2.4" + provider: + dependency: "direct main" + description: + name: provider + sha256: cdbe7530b12ecd9eb455bdaa2fcb8d4dad22e80b8afb4798b41479d5ce26847f + url: "https://pub.dev" + source: hosted + version: "6.0.5" + qr_code_scanner: + dependency: "direct main" + description: + name: qr_code_scanner + sha256: f23b68d893505a424f0bd2e324ebea71ed88465d572d26bb8d2e78a4749591fd + url: "https://pub.dev" + source: hosted + version: "1.0.1" + recase: + dependency: transitive + description: + name: recase + sha256: e4eb4ec2dcdee52dcf99cb4ceabaffc631d7424ee55e56f280bc039737f89213 + url: "https://pub.dev" + source: hosted + version: "4.1.0" + rive: + dependency: "direct main" + description: + name: rive + sha256: "22e3755b75f4ea4492d2fecf4fc2acf1c8d0073df39781d290a20cbfe74c3760" + url: "https://pub.dev" + source: hosted + version: "0.9.1" + rxdart: + dependency: transitive + description: + name: rxdart + sha256: "0c7c0cedd93788d996e33041ffecda924cc54389199cde4e6a34b440f50044cb" + url: "https://pub.dev" + source: hosted + version: "0.27.7" + share: + dependency: "direct main" + description: + name: share + sha256: "97e6403f564ed1051a01534c2fc919cb6e40ea55e60a18ec23cee6e0ce19f4be" + url: "https://pub.dev" + source: hosted + version: "2.0.4" + shared_preferences: + dependency: "direct main" + description: + name: shared_preferences + sha256: "76917b7d4b9526b2ba416808a7eb9fb2863c1a09cf63ec85f1453da240fa818a" + url: "https://pub.dev" + source: hosted + version: "2.0.15" + shared_preferences_android: + dependency: transitive + description: + name: shared_preferences_android + sha256: "8e251f3c986002b65fed6396bce81f379fb63c27317d49743cf289fd0fd1ab97" + url: "https://pub.dev" + source: hosted + version: "2.0.14" + shared_preferences_ios: + dependency: transitive + description: + name: shared_preferences_ios + sha256: "585a14cefec7da8c9c2fb8cd283a3bb726b4155c0952afe6a0caaa7b2272de34" + url: "https://pub.dev" + source: hosted + version: "2.1.1" + shared_preferences_linux: + dependency: transitive + description: + name: shared_preferences_linux + sha256: fbc3cd6826896b66a5f576b025e4f344f780c84ea7f8203097a353370607a2c8 + url: "https://pub.dev" + source: hosted + version: "2.1.2" + shared_preferences_macos: + dependency: transitive + description: + name: shared_preferences_macos + sha256: "81b6a60b2d27020eb0fc41f4cebc91353047309967901a79ee8203e40c42ed46" + url: "https://pub.dev" + source: hosted + version: "2.0.5" + shared_preferences_platform_interface: + dependency: transitive + description: + name: shared_preferences_platform_interface + sha256: da9431745ede5ece47bc26d5d73a9d3c6936ef6945c101a5aca46f62e52c1cf3 + url: "https://pub.dev" + source: hosted + version: "2.1.0" + shared_preferences_web: + dependency: transitive + description: + name: shared_preferences_web + sha256: a4b5bc37fe1b368bbc81f953197d55e12f49d0296e7e412dfe2d2d77d6929958 + url: "https://pub.dev" + source: hosted + version: "2.0.4" + shared_preferences_windows: + dependency: transitive + description: + name: shared_preferences_windows + sha256: "07c274c2115d4d5e4280622abb09f0980e2c5b1fcdc98ae9f59a3bad5bfc1f26" + url: "https://pub.dev" + source: hosted + version: "2.1.2" + signature: + dependency: "direct main" + description: + name: signature + sha256: ad23383717dfa926204695ef6928ff513a77387be1b4a8c685099ce3ec35e5f8 + url: "https://pub.dev" + source: hosted + version: "5.3.0" + sky_engine: + dependency: transitive + description: flutter + source: sdk + version: "0.0.99" + source_span: + dependency: transitive + description: + name: source_span + sha256: dd904f795d4b4f3b870833847c461801f6750a9fa8e61ea5ac53f9422b31f250 + url: "https://pub.dev" + source: hosted + version: "1.9.1" + speech_to_text: + dependency: "direct main" + description: + name: speech_to_text + sha256: ff8fbd31d039bdbac6c7ec9f0516d37df2cbea62c45198326d3b64034e6fb920 + url: "https://pub.dev" + source: hosted + version: "6.1.1" + speech_to_text_macos: + dependency: transitive + description: + name: speech_to_text_macos + sha256: "6b5575e5a8346be1779838b0a482c259474965b5943668830b479147a75b5bfc" + url: "https://pub.dev" + source: hosted + version: "1.0.2" + speech_to_text_platform_interface: + dependency: transitive + description: + name: speech_to_text_platform_interface + sha256: "13d90215a7554b9a8c1ce47c0a1739af8eacd2cf196ca66351e54dfd2172746d" + url: "https://pub.dev" + source: hosted + version: "2.0.1" + sqflite: + dependency: transitive + description: + name: sqflite + sha256: "2b1697c7b78576fdc722c358f16f62171bd56e92dc13422d9e44be3fc446c276" + url: "https://pub.dev" + source: hosted + version: "2.2.2" + sqflite_common: + dependency: transitive + description: + name: sqflite_common + sha256: "0c21a187d645aa65da5be6997c0c713eed61e049158870ae2de157e6897067ab" + url: "https://pub.dev" + source: hosted + version: "2.4.0+2" + stack_trace: + dependency: transitive + description: + name: stack_trace + sha256: c3c7d8edb15bee7f0f74debd4b9c5f3c2ea86766fe4178eb2a18eb30a0bdaed5 + url: "https://pub.dev" + source: hosted + version: "1.11.0" + stream_channel: + dependency: transitive + description: + name: stream_channel + sha256: "83615bee9045c1d322bbbd1ba209b7a749c2cbcdcb3fdd1df8eb488b3279c1c8" + url: "https://pub.dev" + source: hosted + version: "2.1.1" + string_scanner: + dependency: transitive + description: + name: string_scanner + sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde" + url: "https://pub.dev" + source: hosted + version: "1.2.0" + synchronized: + dependency: transitive + description: + name: synchronized + sha256: "7b530acd9cb7c71b0019a1e7fa22c4105e675557a4400b6a401c71c5e0ade1ac" + url: "https://pub.dev" + source: hosted + version: "3.0.0+3" + term_glyph: + dependency: transitive + description: + name: term_glyph + sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84 + url: "https://pub.dev" + source: hosted + version: "1.2.1" + test_api: + dependency: transitive + description: + name: test_api + sha256: ad540f65f92caa91bf21dfc8ffb8c589d6e4dc0c2267818b4cc2792857706206 + url: "https://pub.dev" + source: hosted + version: "0.4.16" + timezone: + dependency: transitive + description: + name: timezone + sha256: "24c8fcdd49a805d95777a39064862133ff816ebfffe0ceff110fb5960e557964" + url: "https://pub.dev" + source: hosted + version: "0.9.1" + typed_data: + dependency: transitive + description: + name: typed_data + sha256: "26f87ade979c47a150c9eaab93ccd2bebe70a27dc0b4b29517f2904f04eb11a5" + url: "https://pub.dev" + source: hosted + version: "1.3.1" + url_launcher: + dependency: "direct main" + description: + name: url_launcher + sha256: "3c92b0efb5e9dcb8f846aefabf9f0f739f91682ed486b991ceda51c288e60896" + url: "https://pub.dev" + source: hosted + version: "6.1.7" + url_launcher_android: + dependency: transitive + description: + name: url_launcher_android + sha256: "6f91d30ce9060c204b2dbe728adb300750fa4b228e8f7ed1b961aa1ceb728799" + url: "https://pub.dev" + source: hosted + version: "6.0.22" + url_launcher_ios: + dependency: transitive + description: + name: url_launcher_ios + sha256: "6ba7dddee26c9fae27c9203c424631109d73c8fa26cfa7bc3e35e751cb87f62e" + url: "https://pub.dev" + source: hosted + version: "6.0.17" + url_launcher_linux: + dependency: transitive + description: + name: url_launcher_linux + sha256: "360fa359ab06bcb4f7c5cd3123a2a9a4d3364d4575d27c4b33468bd4497dd094" + url: "https://pub.dev" + source: hosted + version: "3.0.1" + url_launcher_macos: + dependency: transitive + description: + name: url_launcher_macos + sha256: a9b3ea9043eabfaadfa3fb89de67a11210d85569086d22b3854484beab8b3978 + url: "https://pub.dev" + source: hosted + version: "3.0.1" + url_launcher_platform_interface: + dependency: transitive + description: + name: url_launcher_platform_interface + sha256: "4eae912628763eb48fc214522e58e942fd16ce195407dbf45638239523c759a6" + url: "https://pub.dev" + source: hosted + version: "2.1.1" + url_launcher_web: + dependency: transitive + description: + name: url_launcher_web + sha256: "5669882643b96bb6d5786637cac727c6e918a790053b09245fd4513b8a07df2a" + url: "https://pub.dev" + source: hosted + version: "2.0.13" + url_launcher_windows: + dependency: transitive + description: + name: url_launcher_windows + sha256: e3c3b16d3104260c10eea3b0e34272aaa57921f83148b0619f74c2eced9b7ef1 + url: "https://pub.dev" + source: hosted + version: "3.0.1" + uuid: + dependency: transitive + description: + name: uuid + sha256: "648e103079f7c64a36dc7d39369cabb358d377078a051d6ae2ad3aa539519313" + url: "https://pub.dev" + source: hosted + version: "3.0.7" + vector_math: + dependency: transitive + description: + name: vector_math + sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803" + url: "https://pub.dev" + source: hosted + version: "2.1.4" + win32: + dependency: transitive + description: + name: win32 + sha256: c9ebe7ee4ab0c2194e65d3a07d8c54c5d00bb001b76081c4a04cdb8448b59e46 + url: "https://pub.dev" + source: hosted + version: "3.1.3" + xdg_directories: + dependency: transitive + description: + name: xdg_directories + sha256: "11541eedefbcaec9de35aa82650b695297ce668662bbd6e3911a7fabdbde589f" + url: "https://pub.dev" + source: hosted + version: "0.2.0+2" + xml: + dependency: transitive + description: + name: xml + sha256: ac0e3f4bf00ba2708c33fbabbbe766300e509f8c82dbd4ab6525039813f7e2fb + url: "https://pub.dev" + source: hosted + version: "6.1.0" + yaml: + dependency: transitive + description: + name: yaml + sha256: "23812a9b125b48d4007117254bca50abb6c712352927eece9e155207b1db2370" + url: "https://pub.dev" + source: hosted + version: "3.1.1" +sdks: + dart: ">=2.18.0 <3.0.0" + flutter: ">=3.3.0"