friend_list_item.dart 6.6 KB

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