intimacy_user_widget.dart 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  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. child: _buildAvatarWithGender(taAvatar, taGender),
  57. ),
  58. // 爱心
  59. Positioned(
  60. // 位置,在2个头像的中间
  61. left: avatarSize - (avatarBorderWidth * 2) - (loveSize / 2),
  62. child: Assets.images.iconIntimacyAnalyseLove.image(
  63. width: loveSize,
  64. height: loveSize,
  65. ),
  66. ),
  67. ],
  68. ),
  69. );
  70. }
  71. /// 用户头像
  72. /// [gender] 性别
  73. Widget _buildAvatarWithGender(String? imageUrl, GenderType? gender) {
  74. ImageProvider defaultImage;
  75. if (gender == GenderType.male) {
  76. // 男
  77. defaultImage = Assets.images.iconDefaultAvatarMale.image().image;
  78. } else if (gender == GenderType.female) {
  79. // 女
  80. defaultImage = Assets.images.iconDefaultAvatarFemale.image().image;
  81. } else {
  82. // 未设置
  83. defaultImage = Assets.images.iconDefaultAvatarUnknown.image().image;
  84. }
  85. return _buildAvatar(imageUrl, defaultImage: defaultImage);
  86. }
  87. /// 圆形头像
  88. Widget _buildAvatar(String? imageUrl, {ImageProvider? defaultImage}) {
  89. return CircleAvatarWidget(
  90. imageUrl: imageUrl,
  91. placeholderImage: defaultImage,
  92. borderColor: ColorName.white,
  93. borderWidth: avatarBorderWidth,
  94. backgroundColor: ColorName.white,
  95. size: avatarSize,
  96. );
  97. }
  98. }