friend_page.dart 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  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,
  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(controller.virtualFriendInfo!,
  70. viewTraceClick: () =>
  71. controller.onViewTraceClick(
  72. controller.virtualFriendInfo!));
  73. }),
  74. ...controller.friendsList.map((e) => Obx(() {
  75. return buildFriendItem(e,
  76. onEditClick: () => controller.onEditClick(e),
  77. viewTraceClick: () =>
  78. controller.onViewTraceClick(e));
  79. }))
  80. ],
  81. );
  82. }),
  83. ),
  84. Container(
  85. width: double.infinity,
  86. color: "#FFFFFF".color,
  87. padding: EdgeInsets.symmetric(vertical: 12.w, horizontal: 15.w),
  88. child: TextButton(
  89. style: ButtonStyle(
  90. backgroundColor:
  91. WidgetStatePropertyAll("#7B7DFF".color),
  92. shape: WidgetStatePropertyAll(RoundedRectangleBorder(
  93. borderRadius: BorderRadius.all(Radius.circular(10.w)),
  94. ))),
  95. onPressed: () => AddFriendPage.show(),
  96. child: Text(
  97. "添加好友",
  98. style: TextStyle(fontSize: 14.sp, color: ColorName.white),
  99. )),
  100. )
  101. ],
  102. ),
  103. )
  104. ],
  105. );
  106. }
  107. Widget buildHeadView() {
  108. return Container(
  109. margin: EdgeInsets.symmetric(horizontal: 12.w, vertical: 14.w),
  110. child: Row(
  111. crossAxisAlignment: CrossAxisAlignment.center,
  112. mainAxisAlignment: MainAxisAlignment.spaceBetween,
  113. children: [
  114. GestureDetector(
  115. onTap: controller.back, child: CommonView.getBackBtnView()),
  116. Obx(() {
  117. return Opacity(
  118. opacity: controller.opacity,
  119. child: Text(StringName.friendTitle,
  120. style: TextStyle(
  121. fontSize: 16.sp,
  122. color: ColorName.black90,
  123. fontWeight: FontWeight.bold)),
  124. );
  125. }),
  126. GestureDetector(
  127. onTap: controller.newsClick,
  128. child:
  129. Assets.images.iconFriendNews.image(width: 24.w, height: 24.w))
  130. ],
  131. ),
  132. );
  133. }
  134. }