news_controller.dart 2.7 KB

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