friend_list_item.dart 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. import 'dart:ui';
  2. import 'package:flutter/cupertino.dart';
  3. import 'package:flutter_screenutil/flutter_screenutil.dart';
  4. import 'package:location/resource/string.gen.dart';
  5. import 'package:location/utils/common_expand.dart';
  6. import 'package:location/utils/common_style.dart';
  7. import '../../data/bean/user_info.dart';
  8. import '../../data/consts/constants.dart';
  9. import '../../resource/assets.gen.dart';
  10. import '../../resource/colors.gen.dart';
  11. import '../../utils/date_util.dart';
  12. Widget buildFriendItem(UserInfo userInfo, bool isMemberExpired,
  13. {VoidCallback? onEditClick, VoidCallback? viewTraceClick}) {
  14. return Container(
  15. margin: EdgeInsets.only(left: 12.w, right: 12.w, bottom: 10.w),
  16. width: double.infinity,
  17. decoration: BoxDecoration(boxShadow: [
  18. BoxShadow(
  19. color: ColorName.black.withOpacity(0.04),
  20. offset: Offset(2, 2),
  21. blurRadius: 8,
  22. )
  23. ], color: ColorName.white, borderRadius: BorderRadius.circular(14.w)),
  24. child: Stack(
  25. children: [
  26. Positioned(
  27. top: 0,
  28. right: 0,
  29. child: Assets.images.bgFriendItem.image(width: 190.w)),
  30. Column(
  31. children: [
  32. SizedBox(height: 14.w),
  33. Row(
  34. children: [
  35. SizedBox(width: 12.w),
  36. buildCustomAvatarOrDefaultAvatarView(
  37. size: 48.w,
  38. avatar: userInfo.avatar,
  39. isMine: userInfo.isMine == true),
  40. SizedBox(width: 8.w),
  41. Expanded(
  42. child: Column(
  43. crossAxisAlignment: CrossAxisAlignment.start,
  44. children: [
  45. Row(
  46. crossAxisAlignment: CrossAxisAlignment.center,
  47. children: [
  48. Text((userInfo.getUserNickName()),
  49. style: TextStyle(
  50. fontSize: 16.sp,
  51. color: '#202020'.color,
  52. fontWeight: FontWeight.bold)),
  53. SizedBox(width: 6.w),
  54. Visibility(
  55. visible: userInfo.virtual == true,
  56. child: Container(
  57. padding: EdgeInsets.symmetric(
  58. horizontal: 5.w, vertical: 2.w),
  59. decoration: BoxDecoration(
  60. gradient: LinearGradient(colors: [
  61. '#FF4A4F'.color,
  62. '#FF554A'.color
  63. ]),
  64. borderRadius: BorderRadius.only(
  65. topLeft: Radius.circular(8.w),
  66. bottomRight: Radius.circular(10.w),
  67. topRight: Radius.circular(10.w),
  68. bottomLeft: Radius.circular(2.w))),
  69. child: Text(StringName.traceFreeExperience,
  70. style: TextStyle(
  71. height: 1,
  72. fontSize: 12.sp,
  73. color: ColorName.white,
  74. )),
  75. ),
  76. ),
  77. Spacer(),
  78. Visibility(
  79. visible: userInfo.isMine != true &&
  80. userInfo.virtual != true,
  81. child: GestureDetector(
  82. onTap: () {
  83. onEditClick?.call();
  84. },
  85. child: Assets.images.iconFriendEdit
  86. .image(width: 22.w, height: 22.w),
  87. ),
  88. ),
  89. SizedBox(width: 16.w),
  90. ],
  91. ),
  92. Text(
  93. userInfo.lastLocation.value?.lastUpdateTime == null
  94. ? StringName.friendLocationTimeUnknown
  95. : DateUtil.fromMillisecondsSinceEpoch(
  96. "yyyy-MM-dd HH:mm",
  97. userInfo.lastLocation.value?.lastUpdateTime ??
  98. 0),
  99. style: TextStyle(
  100. fontSize: 13.sp, color: '#A7A7A7'.color)),
  101. ],
  102. ),
  103. )
  104. ],
  105. ),
  106. SizedBox(height: 12.w),
  107. Row(
  108. children: [
  109. SizedBox(width: 12.w),
  110. Expanded(
  111. child: Container(
  112. constraints: BoxConstraints(minHeight: 34.w),
  113. child: Align(
  114. alignment: Alignment.centerLeft,
  115. child: ImageFiltered(
  116. enabled: userInfo.blockedMe == true ||
  117. (isMemberExpired && !(userInfo.isMine == true)),
  118. imageFilter: ImageFilter.blur(
  119. sigmaX: Constants.blurredX,
  120. sigmaY: Constants.blurredY,
  121. ),
  122. child: Text(
  123. userInfo.lastLocation.value?.address ??
  124. StringName.unopenedPositioning,
  125. style: TextStyle(
  126. fontSize: 13.sp, color: '#404040'.color)),
  127. ),
  128. ),
  129. ),
  130. ),
  131. SizedBox(width: 20.w),
  132. GestureDetector(
  133. onTap: () {
  134. viewTraceClick?.call();
  135. },
  136. child: Container(
  137. margin: EdgeInsets.only(right: 12.w),
  138. decoration: BoxDecoration(
  139. color: ColorName.colorPrimary,
  140. borderRadius: BorderRadius.circular(36.w)),
  141. padding:
  142. EdgeInsets.symmetric(horizontal: 14.w, vertical: 8.w),
  143. child: Text(
  144. StringName.examineTrace,
  145. style: TextStyle(fontSize: 12.sp, color: ColorName.white),
  146. ),
  147. ),
  148. ),
  149. ],
  150. ),
  151. SizedBox(height: 16.w)
  152. ],
  153. )
  154. ],
  155. ),
  156. );
  157. }