friend_page.dart 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. import 'package:flutter/material.dart';
  2. import 'package:flutter_screenutil/flutter_screenutil.dart';
  3. import 'package:get/get.dart';
  4. import 'package:location/base/base_page.dart';
  5. import 'package:location/resource/assets.gen.dart';
  6. import 'package:location/resource/colors.gen.dart';
  7. import 'package:location/resource/string.gen.dart';
  8. import 'package:location/utils/common_expand.dart';
  9. import '../../router/app_pages.dart';
  10. import '../../widget/common_view.dart';
  11. import '../add_friend/add_friend_page.dart';
  12. import 'friend_controller.dart';
  13. import 'friend_list_item.dart';
  14. class FriendPage extends BasePage<FriendController> {
  15. const FriendPage({super.key});
  16. static void start() {
  17. Get.toNamed(RoutePath.friend);
  18. }
  19. @override
  20. bool immersive() {
  21. return true;
  22. }
  23. @override
  24. Color backgroundColor() {
  25. return '#F7F7F7'.color;
  26. }
  27. @override
  28. Widget buildBody(BuildContext context) {
  29. return Stack(
  30. children: [
  31. Assets.images.bgPageBackground.image(width: double.infinity),
  32. Positioned(
  33. top: 24.w,
  34. right: 19.w,
  35. child: SafeArea(child: Obx(() {
  36. return Opacity(
  37. opacity: 1 - controller.opacity,
  38. child: Assets.images.iconGuard.image(width: 118.w));
  39. }))),
  40. SafeArea(
  41. child: Column(
  42. children: [
  43. buildHeadView(),
  44. Expanded(
  45. child: Obx(() {
  46. return ListView(
  47. controller: controller.scrollController,
  48. children: [
  49. SizedBox(height: 18.w),
  50. Padding(
  51. padding: EdgeInsets.only(left: 12.w),
  52. child: Text(StringName.friendTitle,
  53. style: TextStyle(
  54. fontSize: 16.sp,
  55. color: ColorName.black90,
  56. fontWeight: FontWeight.bold)),
  57. ),
  58. SizedBox(height: 10.w),
  59. Obx(() {
  60. return buildFriendItem(controller.mineUserInfo, false,
  61. onEditClick: () =>
  62. controller.onEditClick(controller.mineUserInfo),
  63. viewTraceClick: () => controller
  64. .onViewTraceClick(controller.mineUserInfo));
  65. }),
  66. Obx(() {
  67. return controller.virtualFriendInfo == null
  68. ? SizedBox.shrink()
  69. : buildFriendItem(
  70. controller.virtualFriendInfo!, false,
  71. viewTraceClick: () =>
  72. controller.onViewTraceClick(
  73. controller.virtualFriendInfo!));
  74. }),
  75. ...controller.friendsList.map((e) => Obx(() {
  76. return buildFriendItem(
  77. e,
  78. (controller.memberStatusInfo.value == null ||
  79. controller
  80. .memberStatusInfo.value?.expired ==
  81. true),
  82. onEditClick: () => controller.onEditClick(e),
  83. viewTraceClick: () =>
  84. controller.onViewTraceClick(e));
  85. }))
  86. ],
  87. );
  88. }),
  89. ),
  90. Container(
  91. width: double.infinity,
  92. color: "#FFFFFF".color,
  93. padding: EdgeInsets.symmetric(vertical: 12.w, horizontal: 15.w),
  94. child: TextButton(
  95. style: ButtonStyle(
  96. backgroundColor:
  97. WidgetStatePropertyAll("#7B7DFF".color),
  98. shape: WidgetStatePropertyAll(RoundedRectangleBorder(
  99. borderRadius: BorderRadius.all(Radius.circular(10.w)),
  100. ))),
  101. onPressed: () => AddFriendPage.show(),
  102. child: Text(
  103. "添加好友",
  104. style: TextStyle(fontSize: 14.sp, color: ColorName.white),
  105. )),
  106. )
  107. ],
  108. ),
  109. )
  110. ],
  111. );
  112. }
  113. Widget buildHeadView() {
  114. return Container(
  115. margin: EdgeInsets.symmetric(horizontal: 12.w, vertical: 14.w),
  116. child: Row(
  117. crossAxisAlignment: CrossAxisAlignment.center,
  118. mainAxisAlignment: MainAxisAlignment.spaceBetween,
  119. children: [
  120. GestureDetector(
  121. onTap: controller.back, child: CommonView.getBackBtnView()),
  122. Obx(() {
  123. return Opacity(
  124. opacity: controller.opacity,
  125. child: Text(StringName.friendTitle,
  126. style: TextStyle(
  127. fontSize: 16.sp,
  128. color: ColorName.black90,
  129. fontWeight: FontWeight.bold)),
  130. );
  131. }),
  132. GestureDetector(
  133. onTap: controller.newsClick,
  134. child:
  135. Assets.images.iconFriendNews.image(width: 24.w, height: 24.w))
  136. ],
  137. ),
  138. );
  139. }
  140. }