friend_list_item.dart 5.7 KB

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