friend_list_item.dart 6.3 KB

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