Browse Source

Facility的图标宽高适配与本地资源删除

liukai 2 months ago
parent
commit
aa491fc8bc

+ 3 - 2
packages/cpt_facility/lib/modules/facility/book/facility_book_state.dart

@@ -1,3 +1,4 @@
+import 'package:domain/entity/facility_index_entity.dart';
 import 'package:domain/entity/id_name_entity.dart';
 import 'package:widgets/load_state_layout.dart';
 
@@ -7,7 +8,7 @@ class FacilityBookState {
   LoadState loadingState;
   String? errorMessage;
 
-  List<IdNameEntity> datas; //页面列表数据
+  List<FacilityIndexEntity> datas; //页面列表数据
 
   // ===================================  Begin  ↓  ===================================
 
@@ -21,7 +22,7 @@ class FacilityBookState {
     LoadState? loadingState,
     String? errorMessage,
     bool? needShowPlaceholder,
-    List<IdNameEntity>? datas,
+    List<FacilityIndexEntity>? datas,
   }) {
     return FacilityBookState(
       errorMessage: errorMessage ?? this.errorMessage,

+ 2 - 1
packages/cpt_facility/lib/modules/facility/book/facility_book_view_model.dart

@@ -1,3 +1,4 @@
+import 'package:domain/entity/facility_index_entity.dart';
 import 'package:domain/entity/id_name_entity.dart';
 import 'package:domain/repository/facility_repository.dart';
 import 'package:plugin_platform/http/dio/dio_cancelable_mixin.dart';
@@ -68,7 +69,7 @@ class FacilityBookViewModel extends _$FacilityBookViewModel with DioCancelableMi
   }
 
   // 处理数据与展示的逻辑
-  void handleList(List<IdNameEntity>? list) {
+  void handleList(List<FacilityIndexEntity>? list) {
     if (list != null && list.isNotEmpty) {
       //有数据
       state = state.copyWith(datas: list, loadingState: LoadState.State_Success);

+ 9 - 6
packages/cpt_facility/lib/modules/facility/book/item_facility_book.dart

@@ -1,16 +1,16 @@
 import 'package:cs_resources/theme/app_colors_theme.dart';
-import 'package:domain/entity/id_name_entity.dart';
+import 'package:domain/entity/facility_index_entity.dart';
 import 'package:flutter/material.dart';
+import 'package:shared/utils/log_utils.dart';
+import 'package:shared/utils/util.dart';
 import 'package:widgets/ext/ex_widget.dart';
 import 'package:widgets/my_load_image.dart';
 import 'package:widgets/my_text_view.dart';
 
-import '../facility_types.dart';
-
 ///  设施的Book的Item
 class FacilityBookItem extends StatelessWidget {
   final int index;
-  final IdNameEntity item;
+  final FacilityIndexEntity item;
 
   const FacilityBookItem({
     required this.index,
@@ -19,6 +19,7 @@ class FacilityBookItem extends StatelessWidget {
 
   @override
   Widget build(BuildContext context) {
+    Log.d("width:${Utils.extractWidthHeight(item.icon)?[0]} height:${Utils.extractWidthHeight(item.icon)?[1]}");
     return Container(
       width: double.infinity,
       height: 80,
@@ -33,8 +34,10 @@ class FacilityBookItem extends StatelessWidget {
         crossAxisAlignment: CrossAxisAlignment.center,
         children: [
           MyLoadImage(
-            "https://img0.baidu.com/it/u=2679587808,2501833998&fm=253&fmt=auto&app=120&f=JPEG?w=372&h=400",
-            width: 38.5,
+            item.icon,
+            //因为传的是xxhdpi的图片,故要除以3才是显示的宽高
+            width: Utils.extractWidthHeight(item.icon) == null ? 40 : Utils.extractWidthHeight(item.icon)![0] / 3,
+            height: Utils.extractWidthHeight(item.icon) == null ? 40 : Utils.extractWidthHeight(item.icon)![1] / 3,
           ),
           MyTextView(
             item.name ?? "-",

+ 0 - 52
packages/cpt_facility/lib/modules/facility/facility_types.dart

@@ -1,52 +0,0 @@
-import 'package:cs_resources/generated/assets.dart';
-import 'package:cs_resources/generated/l10n.dart';
-
-
-class FacilityTypes {
-  //对应的type类型 对应的icon的图片与宽高
-  static Map<String, Map<String, dynamic>> iconMap = {
-    //Function Room
-    '1': {
-      'name': S.current.function_room,
-      'icon_path': Assets.facilityFunctionRoomIcon,
-      'width': 39.0,
-      'height': 39.5,
-    },
-    //Gourmet Pavilion
-    '2': {
-      'name': S.current.gourmet_pavilion,
-      'icon_path': Assets.facilityGourmetPavilionIcon,
-      'width': 38.0,
-      'height': 33.5,
-    },
-    //Kids Party Room
-    '3': {
-      'name': S.current.kids_party_room,
-      'icon_path': Assets.facilityKidsPartyRoomIcon,
-      'width': 39.0,
-      'height': 39.0,
-    },
-    //Media Room
-    '4': {
-      'name': S.current.media_room,
-      'icon_path': Assets.facilityMediaRoomIcon,
-      'width': 38.5,
-      'height': 38.0,
-    },
-    //Pet Pavilion
-    '5': {
-      'name': S.current.pet_pavilion,
-      'icon_path': Assets.facilityPetPavilionIcon,
-      'width': 38.5,
-      'height': 36.5,
-    },
-    //Tennis Court
-    '6': {
-      'name': S.current.tennis_court,
-      'icon_path': Assets.facilityTennisCourt,
-      'width': 38.5,
-      'height': 38.5,
-    },
-  };
-
-}

+ 22 - 0
packages/cs_domain/lib/entity/facility_index_entity.dart

@@ -0,0 +1,22 @@
+import 'package:domain/generated/json/base/json_field.dart';
+import 'package:domain/generated/json/facility_index_entity.g.dart';
+import 'dart:convert';
+export 'package:domain/generated/json/facility_index_entity.g.dart';
+
+@JsonSerializable()
+class FacilityIndexEntity {
+	String? id;
+	String? icon;
+	String? name;
+
+	FacilityIndexEntity();
+
+	factory FacilityIndexEntity.fromJson(Map<String, dynamic> json) => $FacilityIndexEntityFromJson(json);
+
+	Map<String, dynamic> toJson() => $FacilityIndexEntityToJson(this);
+
+	@override
+	String toString() {
+		return jsonEncode(this);
+	}
+}

+ 5 - 0
packages/cs_domain/lib/generated/json/base/json_convert_content.dart

@@ -7,6 +7,7 @@ import 'package:flutter/material.dart' show debugPrint;
 import 'package:domain/entity/auth_login_entity.dart';
 import 'package:domain/entity/captcha_img_entity.dart';
 import 'package:domain/entity/facility_book_entity.dart';
+import 'package:domain/entity/facility_index_entity.dart';
 import 'package:domain/entity/facility_page_entity.dart';
 import 'package:domain/entity/feedback_detail_entity.dart';
 import 'package:domain/entity/feedback_list_entity.dart';
@@ -184,6 +185,9 @@ class JsonConvert {
     if (<FacilityBookFacilitiesPeriods>[] is M) {
       return data.map<FacilityBookFacilitiesPeriods>((Map<String, dynamic> e) => FacilityBookFacilitiesPeriods.fromJson(e)).toList() as M;
     }
+    if (<FacilityIndexEntity>[] is M) {
+      return data.map<FacilityIndexEntity>((Map<String, dynamic> e) => FacilityIndexEntity.fromJson(e)).toList() as M;
+    }
     if (<FacilityPageEntity>[] is M) {
       return data.map<FacilityPageEntity>((Map<String, dynamic> e) => FacilityPageEntity.fromJson(e)).toList() as M;
     }
@@ -384,6 +388,7 @@ class JsonConvertClassCollection {
     (FacilityBookFacilityType).toString(): FacilityBookFacilityType.fromJson,
     (FacilityBookFacilities).toString(): FacilityBookFacilities.fromJson,
     (FacilityBookFacilitiesPeriods).toString(): FacilityBookFacilitiesPeriods.fromJson,
+    (FacilityIndexEntity).toString(): FacilityIndexEntity.fromJson,
     (FacilityPageEntity).toString(): FacilityPageEntity.fromJson,
     (FacilityDetail).toString(): FacilityDetail.fromJson,
     (FacilityPageListBooking).toString(): FacilityPageListBooking.fromJson,

+ 40 - 0
packages/cs_domain/lib/generated/json/facility_index_entity.g.dart

@@ -0,0 +1,40 @@
+import 'package:domain/generated/json/base/json_convert_content.dart';
+import 'package:domain/entity/facility_index_entity.dart';
+
+FacilityIndexEntity $FacilityIndexEntityFromJson(Map<String, dynamic> json) {
+  final FacilityIndexEntity facilityIndexEntity = FacilityIndexEntity();
+  final String? id = jsonConvert.convert<String>(json['id']);
+  if (id != null) {
+    facilityIndexEntity.id = id;
+  }
+  final String? icon = jsonConvert.convert<String>(json['icon']);
+  if (icon != null) {
+    facilityIndexEntity.icon = icon;
+  }
+  final String? name = jsonConvert.convert<String>(json['name']);
+  if (name != null) {
+    facilityIndexEntity.name = name;
+  }
+  return facilityIndexEntity;
+}
+
+Map<String, dynamic> $FacilityIndexEntityToJson(FacilityIndexEntity entity) {
+  final Map<String, dynamic> data = <String, dynamic>{};
+  data['id'] = entity.id;
+  data['icon'] = entity.icon;
+  data['name'] = entity.name;
+  return data;
+}
+
+extension FacilityIndexEntityExtension on FacilityIndexEntity {
+  FacilityIndexEntity copyWith({
+    String? id,
+    String? icon,
+    String? name,
+  }) {
+    return FacilityIndexEntity()
+      ..id = id ?? this.id
+      ..icon = icon ?? this.icon
+      ..name = name ?? this.name;
+  }
+}

+ 6 - 5
packages/cs_domain/lib/repository/facility_repository.dart

@@ -15,6 +15,7 @@ import '../constants/api_constants.dart';
 import 'package:flutter_riverpod/flutter_riverpod.dart';
 import 'package:plugin_basic/provider/http_provider/http_provider.dart';
 import '../entity/facility_book_entity.dart';
+import '../entity/facility_index_entity.dart';
 import '../entity/facility_page_entity.dart';
 import '../entity/form_content_entity.dart';
 import '../entity/form_detail_entity.dart';
@@ -39,7 +40,7 @@ class FacilityRepository {
   FacilityRepository({required this.dioEngine});
 
   /// 获取设施可申请的列表
-  Future<HttpResult<IdNameEntity>> fetchFacilityList({
+  Future<HttpResult<FacilityIndexEntity>> fetchFacilityList({
     CancelToken? cancelToken,
   }) async {
     final result = await dioEngine.requestNetResult(
@@ -55,18 +56,18 @@ class FacilityRepository {
       var list = jsonList
           ?.map((value) {
         if (value is Map<String, dynamic>) {
-          return IdNameEntity.fromJson(value);
+          return FacilityIndexEntity.fromJson(value);
         } else {
           return null;
         }
       })
           .where((item) => item != null)
-          .cast<IdNameEntity>()
+          .cast<FacilityIndexEntity>()
           .toList();
 
-      return result.convert<IdNameEntity>(list: list);
+      return result.convert<FacilityIndexEntity>(list: list);
     }
-    return result.convert<IdNameEntity>();
+    return result.convert<FacilityIndexEntity>();
   }
 
   /// 获取设施的指定日期的表

BIN
packages/cs_resources/assets/facility/function_room_icon.webp


BIN
packages/cs_resources/assets/facility/gourmet_pavilion_icon.webp


BIN
packages/cs_resources/assets/facility/kids_party_room_icon.webp


BIN
packages/cs_resources/assets/facility/media_room_icon.webp


BIN
packages/cs_resources/assets/facility/pet_pavilion_icon.webp


BIN
packages/cs_resources/assets/facility/tennis_court.webp


+ 0 - 6
packages/cs_resources/lib/generated/assets.dart

@@ -73,15 +73,9 @@ class Assets {
   static const String facilityConfirmFacilityIcon = 'assets/facility/confirm_facility_icon.webp';
   static const String facilityConfirmPaymentIcon = 'assets/facility/confirm_payment_icon.webp';
   static const String facilityDepositIcon = 'assets/facility/deposit_icon.webp';
-  static const String facilityFunctionRoomIcon = 'assets/facility/function_room_icon.webp';
-  static const String facilityGourmetPavilionIcon = 'assets/facility/gourmet_pavilion_icon.webp';
   static const String facilityHistoryIcon = 'assets/facility/history_icon.webp';
-  static const String facilityKidsPartyRoomIcon = 'assets/facility/kids_party_room_icon.webp';
-  static const String facilityMediaRoomIcon = 'assets/facility/media_room_icon.webp';
   static const String facilityPaymentSuccessIcon = 'assets/facility/payment_success_icon.webp';
-  static const String facilityPetPavilionIcon = 'assets/facility/pet_pavilion_icon.webp';
   static const String facilityQuestionIcon = 'assets/facility/question_icon.webp';
-  static const String facilityTennisCourt = 'assets/facility/tennis_court.webp';
   static const String facilityTitleLocationIcon = 'assets/facility/title_location_icon.webp';
   static const String formAccessCard = 'assets/form/access_card.webp';
   static const String formApplyIcon = 'assets/form/apply_icon.webp';

+ 23 - 6
packages/cs_shared/lib/utils/util.dart

@@ -5,9 +5,6 @@ import 'dart:math';
 import 'package:flutter/material.dart';
 import 'package:flutter/widgets.dart';
 
-
-
-
 class Utils {
   /// 是否字符串为空
   static bool isEmpty(String? value) {
@@ -88,7 +85,8 @@ class Utils {
   }
 
   /// 无参数的防抖函数
-  static VoidCallback debounce(VoidCallback func, [
+  static VoidCallback debounce(
+    VoidCallback func, [
     Duration delay = const Duration(milliseconds: 400),
   ]) {
     late Timer timer;
@@ -103,7 +101,8 @@ class Utils {
   }
 
   /// 带参数的防抖函数
-  static Function debounceArg<T>(Function func, [
+  static Function debounceArg<T>(
+    Function func, [
     Duration delay = const Duration(milliseconds: 2000),
   ]) {
     late Timer timer;
@@ -171,4 +170,22 @@ class Utils {
     }
   }
 
-}
+  /// 从 Url 中找到对应的宽高
+  static List<double>? extractWidthHeight(String? url) {
+    if (isEmpty(url)) return null;
+
+    // 使用正则表达式来查找形如 "宽x高" 的部分
+    final RegExp regex = RegExp(r'-(\d+)x(\d+)\.');
+    final matches = regex.allMatches(url!);
+
+    if (matches.isNotEmpty) {
+      // 获取最后一个匹配项
+      final lastMatch = matches.last;
+      final width = double.parse(lastMatch.group(1)!);
+      final height = double.parse(lastMatch.group(2)!);
+      return [width, height]; // 返回宽高列表
+    }
+
+    return null; // 未找到宽高
+  }
+}