select_friend_view.dart 5.16 KB
import 'package:doublefeel_flutter/core/theme/app_colors.dart';
import 'package:doublefeel_flutter/core/util/size_extensions.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';

import '../controllers/select_friend_controller.dart';
import '../widgets/friend_health_card.dart';

class SelectFriendView extends GetView<SelectFriendController> {
  const SelectFriendView({super.key});

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: const Color(0xFF000000).withValues(alpha: 0.70),
      body: Column(
        children: [
          SizedBox(height: MediaQuery.viewPaddingOf(context).top + 8.dp),
          Expanded(
            child: Container(
              width: double.infinity,
              decoration: BoxDecoration(
                color: const Color(0xFFF5F2FF),
                borderRadius: BorderRadius.vertical(
                  top: Radius.circular(12.dp),
                ),
              ),
              child: Stack(
                children: [
                  Column(
                    children: [
                      _SelectFriendHeader(onClose: () => Get.back<void>()),
                      Expanded(
                        child: Obx(
                          () => ListView.separated(
                            padding: EdgeInsets.fromLTRB(
                              16.dp,
                              0,
                              16.dp,
                              118.dp + MediaQuery.viewPaddingOf(context).bottom,
                            ),
                            itemBuilder: (context, index) {
                              final friend = controller.friends[index];
                              final isSelected =
                                  controller.selectedIndex.value == index;
                              return FriendHealthCard(
                                name: friend.name,
                                updatedAt: friend.updatedAt,
                                sleepQualityScore: friend.sleepQualityScore,
                                steps: friend.steps,
                                statusText: friend.statusText,
                                stressValue: friend.stressValue,
                                isOnWatchFace: friend.isOnWatchFace,
                                isSelected: isSelected,
                                showCheckbox: true,
                                onTap: () => controller.selectFriendAt(index),
                              );
                            },
                            separatorBuilder: (_, __) =>
                                SizedBox(height: 12.dp),
                            itemCount: controller.friends.length,
                          ),
                        ),
                      ),
                    ],
                  ),
                  Positioned(
                    left: 49.dp,
                    right: 49.dp,
                    bottom: 36.dp + MediaQuery.viewPaddingOf(context).bottom,
                    child: _SyncButton(
                      onTap: controller.syncSelectedFriendToWatchFace,
                    ),
                  ),
                ],
              ),
            ),
          ),
        ],
      ),
    );
  }
}

class _SelectFriendHeader extends StatelessWidget {
  const _SelectFriendHeader({required this.onClose});

  final VoidCallback onClose;

  @override
  Widget build(BuildContext context) {
    return SizedBox(
      height: 56.dp,
      child: Row(
        children: [
          Padding(
            padding: EdgeInsets.only(left: 22.dp),
            child: GestureDetector(
              onTap: onClose,
              behavior: HitTestBehavior.opaque,
              child: SizedBox(
                width: 40.dp,
                height: 40.dp,
                child: const Center(
                  child: Icon(
                    Icons.close,
                    color: AppColors.primary,
                    size: 20,
                  ),
                ),
              ),
            ),
          ),
          const Expanded(
            child: Center(
              child: Text(
                '选择好友',
                style: TextStyle(
                  color: AppColors.textPrimary,
                  fontSize: 16,
                  fontWeight: FontWeight.w600,
                  height: 1.4,
                ),
              ),
            ),
          ),
          SizedBox(width: 62.dp),
        ],
      ),
    );
  }
}

class _SyncButton extends StatelessWidget {
  const _SyncButton({required this.onTap});

  final VoidCallback onTap;

  @override
  Widget build(BuildContext context) {
    return GestureDetector(
      onTap: onTap,
      behavior: HitTestBehavior.opaque,
      child: Container(
        height: 48.dp,
        alignment: Alignment.center,
        decoration: BoxDecoration(
          color: AppColors.primary,
          borderRadius: BorderRadius.circular(24.dp),
        ),
        child: const Text(
          '选择并同步至表盘',
          style: TextStyle(
            color: Colors.white,
            fontSize: 16,
            fontWeight: FontWeight.w600,
            height: 1.4,
          ),
        ),
      ),
    );
  }
}