news_controller.dart 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  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:url_launcher/url_launcher.dart';
  10. import '../../data/bean/message_info.dart';
  11. import '../../data/bean/request_friend_info.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. void requestMessageList() {
  44. messageRepository.getMessageList().then((response) {
  45. messageList.clear();
  46. if (response.list != null) {
  47. messageList.addAll(response.list!);
  48. }
  49. }).catchError((error) {
  50. ErrorHandler.toastError(error);
  51. });
  52. }
  53. @override
  54. void onClose() {
  55. super.onClose();
  56. scrollController.dispose();
  57. }
  58. ///2:你的好友请求已经被接受
  59. // 3:你的好友请求已经被拒绝
  60. // 4:好友发来的求救
  61. // 5:你的好友删除了你
  62. void onMessageFunClick(MessageInfo info) {
  63. if (info.type == 4) {
  64. debugPrint('好友发来的求救');
  65. //跳转到打电话界面
  66. _launchDialer(info.senderPhone);
  67. }
  68. }
  69. void _launchDialer(String phoneNumber) async {
  70. final Uri uri = Uri.parse('tel:$phoneNumber');
  71. if (await canLaunchUrl(uri)) {
  72. await launchUrl(uri);
  73. } else {
  74. throw '无法跳转拨号界面';
  75. }
  76. }
  77. }