news_controller.dart 2.6 KB

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