friend_list_item.dart 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  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) {
  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: Assets.images.iconFriendEdit
  75. .image(width: 22.w, height: 22.w),
  76. ),
  77. SizedBox(width: 16.w),
  78. ],
  79. ),
  80. Text(
  81. userInfo.lastLocation.value?.lastUpdateTime == null
  82. ? StringName.friendLocationTimeUnknown
  83. : DateUtil.fromMillisecondsSinceEpoch(
  84. "yyyy-MM-dd HH:mm",
  85. userInfo.lastLocation.value?.lastUpdateTime ??
  86. 0),
  87. style: TextStyle(
  88. fontSize: 13.sp, color: '#A7A7A7'.color)),
  89. ],
  90. ),
  91. )
  92. ],
  93. ),
  94. SizedBox(height: 12.w),
  95. Row(
  96. children: [
  97. SizedBox(width: 12.w),
  98. Expanded(
  99. child: Container(
  100. constraints: BoxConstraints(minHeight: 34.w),
  101. child: Align(
  102. alignment: Alignment.centerLeft,
  103. child: Text(
  104. userInfo.lastLocation.value?.address ??
  105. StringName.unopenedPositioning,
  106. style: TextStyle(
  107. fontSize: 13.sp, color: '#404040'.color)),
  108. ),
  109. ),
  110. ),
  111. SizedBox(width: 20.w),
  112. Container(
  113. margin: EdgeInsets.only(right: 12.w),
  114. decoration: BoxDecoration(
  115. color: ColorName.colorPrimary,
  116. borderRadius: BorderRadius.circular(36.w)),
  117. padding:
  118. EdgeInsets.symmetric(horizontal: 14.w, vertical: 8.w),
  119. child: Text(
  120. StringName.examineTrace,
  121. style: TextStyle(fontSize: 12.sp, color: ColorName.white),
  122. ),
  123. ),
  124. ],
  125. ),
  126. SizedBox(height: 16.w)
  127. ],
  128. )
  129. ],
  130. ),
  131. );
  132. }