intimacy_user_widget.dart 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. import 'package:flutter/cupertino.dart';
  2. import '../../../resource/assets.gen.dart';
  3. import '../../../resource/colors.gen.dart';
  4. import '../../../widget/avatar/avatar_image_widget.dart';
  5. import '../../user_info/enums/gender_type.dart';
  6. /// 亲密用户组件,包含2个头像和中间一个心形图标
  7. class IntimacyUserWidget extends StatelessWidget {
  8. /// 组件的宽度
  9. final double width;
  10. /// 组件的高度
  11. final double height;
  12. /// 头像的大小
  13. final double avatarSize;
  14. /// 头像的边框宽度
  15. final double avatarBorderWidth;
  16. /// 爱心的大小
  17. final double loveSize;
  18. /// 我的头像
  19. final String myAvatar;
  20. /// Ta的头像
  21. final String taAvatar;
  22. /// 我的性别
  23. final GenderType? myGender;
  24. /// 他的性别
  25. final GenderType? taGender;
  26. const IntimacyUserWidget({
  27. super.key,
  28. required this.width,
  29. required this.height,
  30. required this.avatarSize,
  31. required this.avatarBorderWidth,
  32. required this.loveSize,
  33. required this.myAvatar,
  34. required this.taAvatar,
  35. required this.myGender,
  36. required this.taGender,
  37. });
  38. @override
  39. Widget build(BuildContext context) {
  40. return SizedBox(
  41. width: width,
  42. height: height,
  43. child: Stack(
  44. // 默认内容都居中
  45. alignment: Alignment.center,
  46. children: [
  47. // 用户1
  48. Positioned(
  49. left: 0,
  50. child: _buildAvatarWithGender(myAvatar, myGender),
  51. ),
  52. // 用户2
  53. Positioned(
  54. // 距离左侧的距离
  55. left: avatarSize - (avatarBorderWidth * 2),
  56. top: 0,
  57. child: _buildAvatarWithGender(taAvatar, taGender),
  58. ),
  59. // 爱心
  60. Positioned(
  61. // 位置,在2个头像的中间
  62. left: avatarSize - (avatarBorderWidth * 2) - (loveSize / 2),
  63. child: Assets.images.iconIntimacyAnalyseLove.image(
  64. width: loveSize,
  65. height: loveSize,
  66. ),
  67. ),
  68. ],
  69. ),
  70. );
  71. }
  72. /// 用户头像
  73. /// [gender] 性别
  74. Widget _buildAvatarWithGender(String? imageUrl, GenderType? gender) {
  75. ImageProvider defaultImage;
  76. if (gender == GenderType.male) {
  77. defaultImage = Assets.images.iconDefaultAvatarMale.image().image;
  78. } else if (gender == GenderType.female) {
  79. defaultImage = Assets.images.iconDefaultAvatarFemale.image().image;
  80. } else {
  81. // 默认值
  82. defaultImage = Assets.images.iconDefaultAvatarFemale.image().image;
  83. }
  84. return _buildAvatar(imageUrl, defaultImage: defaultImage);
  85. }
  86. /// 圆形头像
  87. Widget _buildAvatar(String? imageUrl, {ImageProvider? defaultImage}) {
  88. return CircleAvatarWidget(
  89. imageUrl: imageUrl,
  90. placeholderImage: defaultImage,
  91. borderColor: ColorName.white,
  92. borderWidth: avatarBorderWidth,
  93. backgroundColor: ColorName.white,
  94. size: avatarSize,
  95. );
  96. }
  97. }