feat: 添加好友功能并集成 LiteLLM 代理服务

- 新增好友搜索、添加、好友列表功能
- 集成 LiteLLM 代理服务及多模型定价配置
- 更新 iOS CocoaPods 配置
- 更新 .gitignore 和环境变量配置
This commit is contained in:
zl-q
2026-03-11 09:14:51 +08:00
parent 487405aa5b
commit e55e445906
28 changed files with 1226 additions and 181 deletions
@@ -3,6 +3,7 @@ import 'package:go_router/go_router.dart';
import '../../../../core/di/injection.dart';
import '../../../../core/theme/design_tokens.dart';
import '../../../../shared/widgets/page_header.dart' as widgets;
import '../../../friends/data/friends_api.dart';
import '../../../users/data/models/user_response.dart';
import '../../../users/data/users_api.dart';
@@ -16,20 +17,35 @@ class SettingsScreen extends StatefulWidget {
class _SettingsScreenState extends State<SettingsScreen> {
UserResponse? _user;
bool _isLoading = true;
int _friendsCount = 0;
String? _firstFriendName;
@override
void initState() {
super.initState();
_loadUser();
_loadData();
}
Future<void> _loadUser() async {
Future<void> _loadData() async {
try {
final usersApi = sl<UsersApi>();
final user = await usersApi.getMe();
final friendsApi = sl<FriendsApi>();
final results = await Future.wait([
usersApi.getMe(),
friendsApi.getFriends(),
]);
final user = results[0] as UserResponse;
final friends = results[1] as List<FriendResponse>;
if (mounted) {
setState(() {
_user = user;
_friendsCount = friends.length;
_firstFriendName = friends.isNotEmpty
? friends.first.friend.username
: null;
_isLoading = false;
});
}
@@ -181,6 +197,16 @@ class _SettingsScreenState extends State<SettingsScreen> {
);
}
String _buildFriendsSubtitle() {
if (_friendsCount == 0) {
return '暂无联系人';
}
if (_friendsCount == 1) {
return '已添加 1 位:$_firstFriendName';
}
return '已添加 $_friendsCount 位联系人';
}
Widget _buildQuickActions(BuildContext context) {
return Container(
height: 120,
@@ -199,7 +225,7 @@ class _SettingsScreenState extends State<SettingsScreen> {
iconBg: AppColors.surfaceTertiary,
iconBorder: const Color(0xFFE6ECF7),
title: '联系人',
subtitle: '已添加 1 位:Toki',
subtitle: _buildFriendsSubtitle(),
onTap: () => context.push('/contacts'),
),
),