From 96c9515e8747a855978cabf05f7f7524b4f4eacc Mon Sep 17 00:00:00 2001 From: zaid_daoud Date: Thu, 3 Aug 2023 10:24:45 +0300 Subject: [PATCH] Status for both sender and receiver is synchronized. --- lib/controllers/api_routes/api_manager.dart | 5 +- lib/controllers/api_routes/urls.dart | 1 + .../api/device_transfer_provider.dart | 17 ++ .../device_transfer_details.dart | 276 +++++++++--------- .../update_device_transfer.dart | 1 - .../device_trancfer/device_transfer_list.dart | 9 +- 6 files changed, 169 insertions(+), 140 deletions(-) diff --git a/lib/controllers/api_routes/api_manager.dart b/lib/controllers/api_routes/api_manager.dart index 3bbfed51..77adc8b5 100644 --- a/lib/controllers/api_routes/api_manager.dart +++ b/lib/controllers/api_routes/api_manager.dart @@ -1,7 +1,5 @@ import 'dart:convert'; -import 'dart:developer'; -import 'package:flutter/cupertino.dart'; import 'package:flutter/foundation.dart'; import 'package:fluttertoast/fluttertoast.dart'; import 'package:http/http.dart' as http; @@ -23,6 +21,7 @@ class ApiManager { Future get( String url, { Map headers, + enableToastMessage = true, }) async { headers ??= {}; @@ -34,7 +33,7 @@ class ApiManager { http.Response response = await http.get(_url, headers: headers); if (jsonDecode(response.body) is Map) { final message = jsonDecode(response.body)["message"]; - if (message != null && message.toString().isNotEmpty) { + if (message != null && message.toString().isNotEmpty && enableToastMessage) { Fluttertoast.showToast(msg: message ?? "", toastLength: Toast.LENGTH_LONG); } } diff --git a/lib/controllers/api_routes/urls.dart b/lib/controllers/api_routes/urls.dart index b4cb7226..ff44c03e 100644 --- a/lib/controllers/api_routes/urls.dart +++ b/lib/controllers/api_routes/urls.dart @@ -87,6 +87,7 @@ class URLs { static get requestDeviceTransfer => "$_baseUrl/AssetTransfer/AddAssetTransfer"; // get static get updateDeviceTransfer => "$_baseUrl/AssetTransfer/UpdateAssetTransfer"; // get static get getDeviceTransfer => "$_baseUrl/AssetTransfer/GetAssetTransfers"; // get + static get getAssetTransferById => "$_baseUrl/AssetTransfer/GetAssetTransferById"; // get // employee static get getEmployees => "$_baseUrl/Lookups/GetLookup?lookupEnum=33"; // get diff --git a/lib/controllers/providers/api/device_transfer_provider.dart b/lib/controllers/providers/api/device_transfer_provider.dart index 453954be..d4f55572 100644 --- a/lib/controllers/providers/api/device_transfer_provider.dart +++ b/lib/controllers/providers/api/device_transfer_provider.dart @@ -109,6 +109,23 @@ class DeviceTransferProvider extends ChangeNotifier { } } + Future getRequestById({int assetTransferId}) async { + Response response; + try { + response = await ApiManager.instance.get( + URLs.getAssetTransferById + "?assetTransferId=$assetTransferId", + enableToastMessage: false, + ); + if (response.statusCode >= 200 && response.statusCode < 300) { + return DeviceTransfer.fromJson(json.decode(response.body)["data"]); + } + return null; + } catch (error) { + print(error); + return null; + } + } + Future createRequest({ @required String host, @required User user, diff --git a/lib/views/pages/device_transfer/device_transfer_details.dart b/lib/views/pages/device_transfer/device_transfer_details.dart index 4d6e7e24..a116f1c2 100644 --- a/lib/views/pages/device_transfer/device_transfer_details.dart +++ b/lib/views/pages/device_transfer/device_transfer_details.dart @@ -5,7 +5,6 @@ import 'package:test_sa/controllers/providers/api/device_transfer_provider.dart' import 'package:test_sa/controllers/providers/api/user_provider.dart'; import 'package:test_sa/controllers/providers/settings/setting_provider.dart'; import 'package:test_sa/models/device/device_transfer.dart'; -import 'package:test_sa/models/device/device_transfer_info.dart'; import 'package:test_sa/models/subtitle.dart'; import 'package:test_sa/views/app_style/colors.dart'; import 'package:test_sa/views/app_style/sizing.dart'; @@ -13,6 +12,7 @@ import 'package:test_sa/views/pages/device_transfer/update_device_transfer.dart' import 'package:test_sa/views/widgets/buttons/app_back_button.dart'; import 'package:test_sa/views/widgets/buttons/app_small_button.dart'; import 'package:test_sa/views/widgets/device_trancfer/device_transfer_info_section.dart'; +import 'package:test_sa/views/widgets/loaders/app_loading.dart'; import 'package:test_sa/views/widgets/loaders/loading_manager.dart'; import 'package:test_sa/views/widgets/requests/info_row.dart'; @@ -28,7 +28,7 @@ class DeviceTransferDetails extends StatefulWidget { } class _DeviceTransferDetailsState extends State { - final DeviceTransferInfo _model = DeviceTransferInfo(); + DeviceTransfer _model; bool _isSender = false; bool _isReceiver = false; UserProvider _userProvider; @@ -41,151 +41,167 @@ class _DeviceTransferDetailsState extends State { @override void initState() { + _model = widget.model; super.initState(); } + Future _getDeviceTransfer() async { + print("====== object"); + _model = await Provider.of(context).getRequestById(assetTransferId: widget.model.id); + print("====== object2"); + } + @override Widget build(BuildContext context) { - _subtitle = AppLocalization.of(context).subtitle; - _userProvider = Provider.of(context); - _settingProvider = Provider.of(context); - _deviceTransferProvider = Provider.of(context); - _isSender = _userProvider.user.userID == widget.model.sender?.userId; - _isReceiver = _userProvider.user.userID == widget.model.receiver?.userId; return Scaffold( key: _scaffoldKey, body: SafeArea( - child: Form( - key: _formKey, - child: LoadingManager( - isLoading: _isLoading, - isFailedLoading: false, - stateCode: 200, - onRefresh: () async {}, - child: Column( - children: [ - Container( - color: Theme.of(context).colorScheme.primary, - padding: const EdgeInsets.symmetric(horizontal: 0, vertical: 4), - child: Row( - children: [ - const ABackButton(), - Expanded( - child: Center( - child: Text( - _subtitle.details, - style: Theme.of(context).textTheme.headline6.copyWith(color: AColors.white, fontStyle: FontStyle.italic), - ), - ), - ), - const SizedBox(width: 58), - ], - ), - ), - Expanded( - child: SingleChildScrollView( - padding: EdgeInsets.all(16 * AppStyle.getScaleFactor(context)), + child: FutureBuilder( + future: _getDeviceTransfer(), + builder: (context, snapshot) { + if (snapshot.connectionState == ConnectionState.waiting) { + return const ALoading(); + } else { + _subtitle = AppLocalization.of(context).subtitle; + _userProvider = Provider.of(context); + _settingProvider = Provider.of(context); + _deviceTransferProvider = Provider.of(context); + _isSender = _userProvider.user.userID == _model.sender?.userId; + _isReceiver = _userProvider.user.userID == _model.receiver?.userId; + return Form( + key: _formKey, + child: LoadingManager( + isLoading: _isLoading, + isFailedLoading: false, + stateCode: 200, + onRefresh: () async {}, child: Column( - crossAxisAlignment: CrossAxisAlignment.start, children: [ - RequestInfoRow( - title: "Transfer Id", - info: widget.model.title?.toString(), - ), - RequestInfoRow( - title: _subtitle.assetName, - info: widget.model.device.assetName, - ), - RequestInfoRow( - title: _subtitle.assetSN, - info: widget.model.device.serialNumber, - ), - RequestInfoRow( - title: _subtitle.assetNumber, - info: widget.model.device.number, - ), - RequestInfoRow( - title: _subtitle.destinationSite, - info: widget.model.device.destSiteName, - ), - RequestInfoRow( - title: _subtitle.building, - info: widget.model.device.destBuildingName, - ), - RequestInfoRow( - title: _subtitle.floor, - info: widget.model.device.destFloor, - ), - RequestInfoRow( - title: _subtitle.department, - info: widget.model.device.destDepartmentName, - ), - RequestInfoRow( - title: _subtitle.room, - info: widget.model.device.destRoom, - ), - RequestInfoRow( - title: _subtitle.actions, - info: "", - ), - const SizedBox(height: 8), - Row( - children: [ - Expanded( - child: Text("Sender", style: Theme.of(context).textTheme.headline6), - ), - if (_userProvider.user?.type == UsersTypes.engineer) - ASmallButton( - text: _subtitle.edit, - onPressed: (_isSender || false) - ? () { - Navigator.of(context).push(MaterialPageRoute( - builder: (_) => UpdateDeviceTransfer( - model: widget.model, - isSender: true, - ))); - } - : null, + Container( + color: Theme.of(context).colorScheme.primary, + padding: const EdgeInsets.symmetric(horizontal: 0, vertical: 4), + child: Row( + children: [ + const ABackButton(), + Expanded( + child: Center( + child: Text( + _subtitle.details, + style: Theme.of(context).textTheme.headline6.copyWith(color: AColors.white, fontStyle: FontStyle.italic), + ), + ), ), - ], - ), - const SizedBox(height: 12), - DeviceTransferInfoSection( - info: widget.model.sender, + const SizedBox(width: 58), + ], + ), ), - const SizedBox(height: 8), - Row( - children: [ - Expanded( - child: Text("Receiver", style: Theme.of(context).textTheme.headline6), + Expanded( + child: SingleChildScrollView( + padding: EdgeInsets.all(16 * AppStyle.getScaleFactor(context)), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + RequestInfoRow( + title: "Transfer Id", + info: _model.title?.toString(), + ), + RequestInfoRow( + title: _subtitle.assetName, + info: _model.device.assetName, + ), + RequestInfoRow( + title: _subtitle.assetSN, + info: _model.device.serialNumber, + ), + RequestInfoRow( + title: _subtitle.assetNumber, + info: _model.device.number, + ), + RequestInfoRow( + title: _subtitle.destinationSite, + info: _model.device.destSiteName, + ), + RequestInfoRow( + title: _subtitle.building, + info: _model.device.destBuildingName, + ), + RequestInfoRow( + title: _subtitle.floor, + info: _model.device.destFloor, + ), + RequestInfoRow( + title: _subtitle.department, + info: _model.device.destDepartmentName, + ), + RequestInfoRow( + title: _subtitle.room, + info: _model.device.destRoom, + ), + RequestInfoRow( + title: _subtitle.actions, + info: "", + ), + const SizedBox(height: 8), + Row( + children: [ + Expanded( + child: Text("Sender", style: Theme.of(context).textTheme.headline6), + ), + if (_userProvider.user?.type == UsersTypes.engineer) + ASmallButton( + text: _subtitle.edit, + onPressed: (_isSender || false) + ? () { + Navigator.of(context).push(MaterialPageRoute( + builder: (_) => UpdateDeviceTransfer( + model: _model, + isSender: true, + ))); + } + : null, + ), + ], + ), + const SizedBox(height: 12), + DeviceTransferInfoSection( + info: _model.sender, + ), + const SizedBox(height: 8), + Row( + children: [ + Expanded( + child: Text("Receiver", style: Theme.of(context).textTheme.headline6), + ), + if (_userProvider.user?.type == UsersTypes.engineer) + ASmallButton( + text: _subtitle.edit, + onPressed: (_isReceiver || false) + ? () async { + Navigator.of(context).push( + MaterialPageRoute( + builder: (_) => UpdateDeviceTransfer( + model: _model, + isSender: false, + ), + ), + ); + } + : null, + ), + ], + ), + const SizedBox(height: 12), + DeviceTransferInfoSection(info: _model.receiver), + ], ), - if (_userProvider.user?.type == UsersTypes.engineer) - ASmallButton( - text: _subtitle.edit, - onPressed: (_isReceiver || false) - ? () { - Navigator.of(context).push(MaterialPageRoute( - builder: (_) => UpdateDeviceTransfer( - model: widget.model, - isSender: false, - ))); - } - : null, - ), - ], - ), - const SizedBox(height: 12), - DeviceTransferInfoSection( - info: widget.model.receiver, + ), ), ], ), ), - ), - ], - ), - ), - ), + ); + } + }), ), ); } diff --git a/lib/views/pages/device_transfer/update_device_transfer.dart b/lib/views/pages/device_transfer/update_device_transfer.dart index 9a870ad9..1de29ad0 100644 --- a/lib/views/pages/device_transfer/update_device_transfer.dart +++ b/lib/views/pages/device_transfer/update_device_transfer.dart @@ -72,7 +72,6 @@ class _UpdateDeviceTransferState extends State { ); _validate = false; Navigator.of(context).pop(); - Navigator.of(context).pop(); } } diff --git a/lib/views/widgets/device_trancfer/device_transfer_list.dart b/lib/views/widgets/device_trancfer/device_transfer_list.dart index dd6f0212..a90c74aa 100644 --- a/lib/views/widgets/device_trancfer/device_transfer_list.dart +++ b/lib/views/widgets/device_trancfer/device_transfer_list.dart @@ -16,7 +16,7 @@ class DeviceTransferList extends StatelessWidget { @override Widget build(BuildContext context) { - if (items.length == 0) { + if (items.isEmpty) { Subtitle subtitle = AppLocalization.of(context).subtitle; return NoItemFound( message: subtitle.noServiceRequestFound, @@ -33,11 +33,8 @@ class DeviceTransferList extends StatelessWidget { return DeviceTransferItem( index: itemIndex, item: items[itemIndex], - onPressed: (model) { - Navigator.of(context).push(MaterialPageRoute( - builder: (_) => DeviceTransferDetails( - model: model, - ))); + onPressed: (model) async { + Navigator.of(context).push(MaterialPageRoute(builder: (_) => DeviceTransferDetails(model: model))); }, ); }),