friend_list_item.dart 6.1 KB

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