upload_step_card.dart 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. import 'package:flutter/cupertino.dart';
  2. import 'package:flutter_screenutil/flutter_screenutil.dart';
  3. import '../../../../data/bean/upload_info.dart';
  4. import '../../../../resource/assets.gen.dart';
  5. import '../../../../resource/colors.gen.dart';
  6. import '../../../../utils/step_card_util.dart';
  7. import '../../../../utils/upload/upload_scene_type.dart';
  8. import '../../intimacy_analyse_upload/widget/upload_add_widget.dart';
  9. import '../../intimacy_analyse_upload/widget/upload_item_widget.dart';
  10. import '../../intimacy_analyse_upload/widget/upload_nine_grid.dart';
  11. import '../step_card.dart';
  12. /// 上传步骤卡片
  13. class UploadStepCard extends StatelessWidget {
  14. /// 上传场景类型
  15. final UploadSceneType sceneType;
  16. /// 图片资源列表
  17. final List<UploadInfo> imageUploadInfoList;
  18. /// 顶部标题区域的组件
  19. final Widget? topTitleWidget;
  20. /// 底部的子组件,可以没有
  21. final Widget? bottomChild;
  22. /// 点击上传按钮的回调
  23. final OnClickAddCallback? onClickAddCallback;
  24. /// 点击删除时回调
  25. final OnClickDeleteCallback? onClickDeleteCallback;
  26. const UploadStepCard({
  27. super.key,
  28. required this.sceneType,
  29. required this.imageUploadInfoList,
  30. this.topTitleWidget,
  31. this.bottomChild,
  32. this.onClickAddCallback,
  33. this.onClickDeleteCallback,
  34. });
  35. @override
  36. Widget build(BuildContext context) {
  37. Mode mode = Mode.edit;
  38. return StepCard(
  39. // 背景图片
  40. bgImageProvider: StepCardUtil.getCardBgImageProvider(
  41. itemCount: imageUploadInfoList.length,
  42. sceneType: sceneType,
  43. mode: mode,
  44. ),
  45. // 顶部的标题
  46. topTitleWidget: topTitleWidget,
  47. // 顶部的图标
  48. topIconWidget: Assets.images.iconIntimacyAnalyseUploadTop.image(
  49. height: 63.h,
  50. width: 103.w,
  51. ),
  52. // 顶部图标的位置
  53. topIconWidgetLocation: StepCardUtil.calculateTopIconWidgetLocation(
  54. itemCount: imageUploadInfoList.length,
  55. sceneType: sceneType,
  56. mode: mode,
  57. ),
  58. contentWidget: Column(
  59. children: [
  60. SizedBox(height: 14.h),
  61. // 图片九宫格
  62. Container(
  63. margin: EdgeInsets.only(left: 12.w, right: 12.w),
  64. padding: EdgeInsets.only(
  65. left: 12.w,
  66. top: 12.h,
  67. right: 12.w,
  68. bottom: 12.h,
  69. ),
  70. decoration: BoxDecoration(
  71. color: ColorName.white,
  72. borderRadius: BorderRadius.circular(16.r),
  73. ),
  74. // 图片九宫格
  75. child: UploadNineGrid(
  76. mode: mode,
  77. imageUploadInfoList: imageUploadInfoList,
  78. spacing: 8.0,
  79. onClickAddCallback: onClickAddCallback,
  80. onClickDeleteCallback: onClickDeleteCallback,
  81. ),
  82. ),
  83. SizedBox(height: 10.h),
  84. // 当前的亲密关系
  85. bottomChild ?? SizedBox(),
  86. ],
  87. ),
  88. );
  89. }
  90. }