From 67516817ec8048ee324189e8988a5600cd541c4a Mon Sep 17 00:00:00 2001 From: hannathkadher Date: Thu, 9 Jan 2025 16:18:19 +0400 Subject: [PATCH] add asset validation --- .../widgets/dialogs/create_space_dialog.dart | 10 +++++--- lib/services/space_mana_api.dart | 25 +++++++++++-------- lib/utils/asset_validator.dart | 15 +++++++++++ 3 files changed, 36 insertions(+), 14 deletions(-) create mode 100644 lib/utils/asset_validator.dart diff --git a/lib/pages/spaces_management/all_spaces/widgets/dialogs/create_space_dialog.dart b/lib/pages/spaces_management/all_spaces/widgets/dialogs/create_space_dialog.dart index 222881a8..054606cb 100644 --- a/lib/pages/spaces_management/all_spaces/widgets/dialogs/create_space_dialog.dart +++ b/lib/pages/spaces_management/all_spaces/widgets/dialogs/create_space_dialog.dart @@ -8,6 +8,7 @@ import 'package:syncrow_web/pages/spaces_management/all_spaces/model/space_model import 'package:syncrow_web/pages/spaces_management/all_spaces/widgets/add_device_type_widget.dart'; import 'package:syncrow_web/pages/spaces_management/all_spaces/widgets/dialogs/icon_selection_dialog.dart'; import 'package:syncrow_web/pages/spaces_management/all_spaces/widgets/hoverable_button.dart'; +import 'package:syncrow_web/utils/asset_validator.dart'; import 'package:syncrow_web/utils/color_manager.dart'; import 'package:syncrow_web/utils/constants/assets.dart'; import 'package:syncrow_web/utils/constants/space_icon_const.dart'; @@ -60,7 +61,7 @@ class CreateSpaceDialogState extends State { @override @override - Widget build(BuildContext context) { + Future build(BuildContext context) async { final screenWidth = MediaQuery.of(context).size.width; return AlertDialog( @@ -91,7 +92,9 @@ class CreateSpaceDialogState extends State { ), ), SvgPicture.asset( - selectedIcon, + await AssetValidator.isValidAsset(selectedIcon) + ? selectedIcon + : Assets.location, width: screenWidth * 0.04, height: screenWidth * 0.04, ), @@ -143,7 +146,8 @@ class CreateSpaceDialogState extends State { } }); }, - style: const TextStyle(color: ColorsManager.blackColor), + style: + const TextStyle(color: ColorsManager.blackColor), decoration: InputDecoration( hintText: 'Please enter the name', hintStyle: const TextStyle( diff --git a/lib/services/space_mana_api.dart b/lib/services/space_mana_api.dart index be789844..b637cbc7 100644 --- a/lib/services/space_mana_api.dart +++ b/lib/services/space_mana_api.dart @@ -19,23 +19,26 @@ class CommunitySpaceManagementApi { .replaceAll('{projectId}', TempConst.projectId), queryParameters: {'page': page}, expectedResponseModel: (json) { - List jsonData = json['data']; - hasNext = json['hasNext'] ?? false; - int currentPage = json['page'] ?? 1; - List communityList = jsonData.map((jsonItem) { - return CommunityModel.fromJson(jsonItem); - }).toList(); - - allCommunities.addAll(communityList); - page = currentPage + 1; - return communityList; + try { + List jsonData = json['data'] ?? []; + hasNext = json['hasNext'] ?? false; + int currentPage = json['page'] ?? 1; + List communityList = jsonData.map((jsonItem) { + return CommunityModel.fromJson(jsonItem); + }).toList(); + allCommunities.addAll(communityList); + page = currentPage + 1; + return communityList; + } catch (_) { + hasNext = false; + return []; + } }, ); } return allCommunities; } catch (e) { - debugPrint('Error fetching communities: $e'); return []; } } diff --git a/lib/utils/asset_validator.dart b/lib/utils/asset_validator.dart new file mode 100644 index 00000000..add6a3f4 --- /dev/null +++ b/lib/utils/asset_validator.dart @@ -0,0 +1,15 @@ +import 'package:flutter/services.dart'; + +class AssetValidator { + static Future isValidAsset(String? assetPath) async { + if (assetPath == null || assetPath.isEmpty) { + return false; + } + try { + await rootBundle.load(assetPath); + return true; + } catch (_) { + return false; + } + } +}