import 'package:get/get.dart'; import 'package:injectable/injectable.dart'; import 'package:location/data/api/atmob_api.dart'; import 'package:location/data/api/request/friends_list_request.dart'; import 'package:location/data/bean/location_info.dart'; import 'package:location/di/get_it.dart'; import 'package:location/utils/http_handler.dart'; import '../../socket/atmob_location_client.dart'; import '../../utils/atmob_log.dart'; import '../api/response/friends_list_response.dart'; import '../bean/user_info.dart'; @lazySingleton class FriendsRepository { final String tag = 'FriendsRepository'; final AtmobApi atmobApi; bool refreshFriendsFlag = false; final RxList friendsList = RxList(); FriendsRepository(this.atmobApi) { AtmobLog.d(tag, '$tag....init'); refreshFriends(); AtmobLocationClient.addLocationListener((location) { updateFriendsLocation(location); }); } void updateFriendsLocation(List location) { if (friendsList.isEmpty || location.isEmpty) { return; } AtmobLog.d('zk', 'updateFriendsLocation'); final idUserMap = { for (final user in friendsList) user.id: user }; for (var datum in location) { final user = idUserMap[datum.userId]; if (user != null) { user.lastLocation.value = datum; } } } void clearFriends() { friendsList.clear(); } Future refreshFriends() async { if (refreshFriendsFlag) { return; } refreshFriendsFlag = true; return friendList(0, 300).then((value) { friendsList.value = value.friends; }).whenComplete(() { refreshFriendsFlag = false; }); } Future friendList(int offset, int limit) { return atmobApi .friendList(FriendsListRequest(offset: offset, limit: limit)) .then(HttpHandler.handle(true)); } static FriendsRepository getInstance() { return getIt.get(); } void refreshFriendRequestList() {} }