select_friend_controller.dart 1.3 KB
import 'dart:async';

import 'package:get/get.dart';

import 'friends_controller.dart';

class SelectFriendController extends GetxController {
  SelectFriendController(this._friendsController);

  final FriendsController _friendsController;
  final selectedFriend = Rxn<FriendHealthData>();

  List<FriendHealthData> get friends => _friendsController.friends;

  @override
  void onInit() {
    super.onInit();
    unawaited(_prepareFriends());
  }

  Future<void> _prepareFriends() async {
    if (friends.isEmpty) {
      await _friendsController.loadFriends();
    }
    final items = friends;
    if (items.isEmpty) return;
    selectedFriend.value = items.firstWhere(
      (friend) => friend.isOnWatchFace,
      orElse: () => items.first,
    );
  }

  void selectFriend(FriendHealthData friend) {
    selectedFriend.value = friend;
  }

  Future<void> syncSelectedFriendToWatchFace() async {
    final selected = selectedFriend.value;
    if (selected == null) return;

    final updated = friends
        .map(
          (friend) => friend.copyWith(
            isOnWatchFace: identical(friend, selected),
          ),
        )
        .toList(growable: false);
    _friendsController.friends.assignAll(updated);

    // TODO: Submit selected watch-face friend to the friend API when available.
    Get.back<void>();
  }
}