news_controller.dart 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. import 'package:flutter/cupertino.dart';
  2. import 'package:get/get.dart';
  3. import 'package:injectable/injectable.dart';
  4. import 'package:location/base/base_controller.dart';
  5. import 'package:location/data/repositories/message_repository.dart';
  6. import 'package:location/handler/error_handler.dart';
  7. import 'package:location/module/news/pending_list/news_pending_list_page.dart';
  8. import 'package:url_launcher/url_launcher.dart';
  9. import '../../data/bean/message_info.dart';
  10. import '../../data/bean/request_friend_info.dart';
  11. import '../add_friend/add_friend_page.dart';
  12. @injectable
  13. class NewsController extends BaseController {
  14. final RxDouble _opacity = 0.0.obs;
  15. double get opacity => _opacity.value;
  16. final ScrollController scrollController = ScrollController();
  17. final double _scrollThreshold = 80;
  18. final MessageRepository messageRepository;
  19. RequestFriendInfo? get latestFriendRequest =>
  20. messageRepository.latestFriendRequest.value;
  21. int get waitingNewsCount => messageRepository.waitingCount.value;
  22. RxList<MessageInfo> messageList = RxList();
  23. NewsController(this.messageRepository);
  24. @override
  25. void onReady() {
  26. super.onReady();
  27. scrollController.addListener(_handleScroll);
  28. requestMessageList();
  29. }
  30. void _handleScroll() {
  31. final double offset = scrollController.offset;
  32. if (offset <= _scrollThreshold) {
  33. _opacity.value = 0.0;
  34. } else {
  35. double opacity = ((offset - _scrollThreshold) / 200).clamp(0.0, 1.0);
  36. _opacity.value = opacity;
  37. }
  38. }
  39. void back() {
  40. Get.back();
  41. }
  42. void newsClick() {
  43. NewsPendingListPage.start();
  44. }
  45. void requestMessageList() {
  46. messageRepository.getMessageList().then((response) {
  47. messageList.clear();
  48. if (response.list != null) {
  49. messageList.addAll(response.list!);
  50. }
  51. WidgetsBinding.instance.addPostFrameCallback((_) {
  52. messageRepository.updateLastReadMessageId(
  53. messageList.isNotEmpty ? messageList.first.id : 0);
  54. });
  55. }).catchError((error) {
  56. ErrorHandler.toastError(error);
  57. });
  58. }
  59. @override
  60. void onClose() {
  61. super.onClose();
  62. scrollController.dispose();
  63. }
  64. ///2:你的好友请求已经被接受
  65. // 3:你的好友请求已经被拒绝
  66. // 4:好友发来的求救
  67. // 5:你的好友删除了你
  68. void onMessageFunClick(MessageInfo info) {
  69. if (info.type == 4) {
  70. debugPrint('好友发来的求救');
  71. //跳转到打电话界面
  72. _launchDialer(info.senderPhone);
  73. }
  74. }
  75. void _launchDialer(String phoneNumber) async {
  76. final Uri uri = Uri.parse('tel:$phoneNumber');
  77. if (await canLaunchUrl(uri)) {
  78. await launchUrl(uri);
  79. } else {
  80. throw '无法跳转拨号界面';
  81. }
  82. }
  83. void onMessageWaitingClick() {
  84. NewsPendingListPage.start();
  85. }
  86. ///添加跳转到加新的朋友
  87. void onAddJumpToAddNewFriend() {
  88. AddFriendPage.show();
  89. }
  90. }