| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- import 'package:get/get.dart';
- import 'package:injectable/injectable.dart';
- import 'package:location/base/app_base_request.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/async_util.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<UserInfo> friendsList = RxList();
- final Rxn<UserInfo> virtualFriendInfo = Rxn<UserInfo>();
- CancelableFuture? refreshVirtualFuture;
- FriendsRepository(this.atmobApi) {
- AtmobLog.d(tag, '$tag....init');
- refreshFriends();
- AtmobLocationClient.addLocationListener((location) {
- updateFriendsLocation(location);
- });
- }
- void updateFriendsLocation(List<LocationInfo> location) {
- if (friendsList.isEmpty || location.isEmpty) {
- return;
- }
- AtmobLog.d('zk', 'updateFriendsLocation');
- final idUserMap = <String, UserInfo>{
- 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;
- });
- }
- static FriendsRepository getInstance() {
- return getIt.get<FriendsRepository>();
- }
- void refreshFriendRequestList() {}
- void refreshVirtualFriend() {
- refreshVirtualFuture?.cancel();
- refreshVirtualFuture = AsyncUtil.retry(
- () => _requestVirtualFriend(), Duration(seconds: 3),
- maxRetry: 50);
- }
- Future<UserInfo> _requestVirtualFriend() {
- return atmobApi
- .getFriendVirtual(AppBaseRequest())
- .then(HttpHandler.handle(true))
- .then((value) {
- virtualFriendInfo.value = value;
- return value;
- });
- }
- Future<FriendsListResponse> _friendList(int offset, int limit) {
- return atmobApi
- .friendList(FriendsListRequest(offset: offset, limit: limit))
- .then(HttpHandler.handle(true));
- }
- }
|