friend_page.dart 5.4 KB

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