main_controller.dart 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. import 'package:get/get.dart';
  2. import 'package:get/get_rx/src/rx_types/rx_types.dart';
  3. import 'package:injectable/injectable.dart';
  4. import 'package:location/base/base_controller.dart';
  5. import 'package:location/data/bean/location_info.dart';
  6. import 'package:location/data/bean/user_info.dart';
  7. import 'package:location/data/repositories/account_repository.dart';
  8. import 'package:location/data/repositories/friends_repository.dart';
  9. import 'package:location/utils/atmob_log.dart';
  10. import 'package:map/flutter_map.dart';
  11. import 'package:map_platform_interface/map_interface.dart';
  12. import '../add_friend/add_friend_view.dart';
  13. import '../mine/mine_page.dart';
  14. @injectable
  15. class MainController extends BaseController {
  16. final FriendsRepository friendsRepository;
  17. final AccountRepository accountRepository;
  18. RxList<UserInfo> get friendsList => friendsRepository.friendsList;
  19. UserInfo get mineLocation => accountRepository.locationUserInfo.value;
  20. MainController(this.friendsRepository, this.accountRepository);
  21. final Rxn<UserInfo> _selectedFriend = Rxn<UserInfo>();
  22. UserInfo? get selectedFriend => _selectedFriend.value;
  23. final MapController mapController = MapController();
  24. @override
  25. void onReady() {
  26. super.onReady();
  27. friendsList.listen((list) {
  28. mapController.addMarkers(_convertToMarker(list));
  29. });
  30. }
  31. void onAddFriendClick() {
  32. AddFriendView.show();
  33. }
  34. void onMineClick() {
  35. MinePage.start();
  36. }
  37. void onSelectClick(UserInfo mineLocation) {
  38. UserInfo? oldInfo = _selectedFriend.value;
  39. _selectedFriend.value = mineLocation;
  40. //修改地图选中
  41. _updateMapSelected(oldInfo, mineLocation);
  42. //移动到选中的位置
  43. animateCamera(mineLocation);
  44. }
  45. void _updateMapSelected(UserInfo? oldInfo, UserInfo newInfo) {
  46. List<UserInfo> markers = [];
  47. if (oldInfo != null) {
  48. markers.add(oldInfo);
  49. }
  50. markers.add(newInfo);
  51. mapController.updateMarkers(_convertToMarker(markers));
  52. }
  53. void animateCamera(UserInfo userInfo) {
  54. LocationInfo? locationInfo = userInfo.lastLocation;
  55. if (locationInfo == null ||
  56. locationInfo.longitude == 0 ||
  57. locationInfo.latitude == 0) {
  58. return;
  59. }
  60. mapController.animateCamera(CameraPosition(
  61. longitude: locationInfo.longitude,
  62. latitude: locationInfo.latitude,
  63. zoom: 18));
  64. }
  65. List<Marker> _convertToMarker(List<UserInfo> list) {
  66. return list
  67. .map((e) => Marker(
  68. id: e.id,
  69. markerName: e.remark ?? e.phoneNumber,
  70. longitude: e.lastLocation?.longitude,
  71. latitude: e.lastLocation?.latitude,
  72. markerType: MarkerType.friend,
  73. isSelected: e == _selectedFriend.value,
  74. ))
  75. .toList();
  76. }
  77. void onMarkerTap(Marker marker) {
  78. String id = marker.id;
  79. UserInfo? userInfo =
  80. friendsList.firstWhereOrNull((element) => element.id == id);
  81. if (userInfo == null) {
  82. return;
  83. }
  84. onSelectClick(userInfo);
  85. }
  86. }