diff --git a/sojorn_app/lib/screens/clusters/clusters_screen.dart b/sojorn_app/lib/screens/clusters/clusters_screen.dart index 11aa328..ab94f12 100644 --- a/sojorn_app/lib/screens/clusters/clusters_screen.dart +++ b/sojorn_app/lib/screens/clusters/clusters_screen.dart @@ -2,7 +2,7 @@ import 'package:flutter/material.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import '../../models/cluster.dart'; -import '../../models/group.dart'; +import '../../models/group.dart' as group_models; import '../../providers/api_provider.dart'; import '../../services/api_service.dart'; import '../../services/capsule_security_service.dart'; @@ -34,8 +34,8 @@ class _ClustersScreenState extends ConsumerState String _selectedCategory = 'all'; // Groups system state - List _myUserGroups = []; - List _suggestedGroups = []; + List _myUserGroups = []; + List _suggestedGroups = []; bool _isGroupsLoading = false; bool _isSuggestedLoading = false; @@ -159,7 +159,7 @@ class _ClustersScreenState extends ConsumerState if (mounted) setState(() => _isSuggestedLoading = false); } - void _navigateToGroup(Group group) { + void _navigateToGroup(group_models.Group group) { // TODO: Navigate to group detail screen if (kDebugMode) print('Navigate to group: ${group.name}'); } diff --git a/sojorn_app/lib/services/api_service.dart b/sojorn_app/lib/services/api_service.dart index 033b3ea..3423600 100644 --- a/sojorn_app/lib/services/api_service.dart +++ b/sojorn_app/lib/services/api_service.dart @@ -929,24 +929,7 @@ class ApiService { return (data['groups'] as List?)?.cast>() ?? []; } - Future joinGroup(String groupId) async { - await _callGoApi('/capsules/$groupId/join', method: 'POST'); - } - - Future> createGroup({ - required String name, - String description = '', - String privacy = 'public', - String category = 'general', - }) async { - return await _callGoApi('/capsules/group', body: { - 'name': name, - 'description': description, - 'privacy': privacy, - 'category': category, - }); - } - + Future> createCapsule({ required String name, String description = '', @@ -1033,10 +1016,7 @@ class ApiService { await _callGoApi('/capsules/$groupId/members/$memberId', method: 'PATCH', body: {'role': role}); } - Future leaveGroup(String groupId) async { - await _callGoApi('/capsules/$groupId/leave', method: 'POST'); - } - + Future updateGroup(String groupId, {String? name, String? description, String? settings}) async { await _callGoApi('/capsules/$groupId', method: 'PATCH', body: { if (name != null) 'name': name, diff --git a/sojorn_app/lib/widgets/group_card.dart b/sojorn_app/lib/widgets/group_card.dart index c315c12..9440d13 100644 --- a/sojorn_app/lib/widgets/group_card.dart +++ b/sojorn_app/lib/widgets/group_card.dart @@ -1,7 +1,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import '../models/group.dart'; -import '../services/api_service.dart'; +import '../providers/api_provider.dart'; import '../theme/app_theme.dart'; import '../theme/tokens.dart'; import '../utils/error_handler.dart'; @@ -247,7 +247,7 @@ class _GroupCardState extends ConsumerState { widget.group.description, style: TextStyle( fontSize: 13, - color: SojornColors.textSecondary, + color: Colors.grey[600], height: 1.3, ), maxLines: 2, @@ -264,23 +264,23 @@ class _GroupCardState extends ConsumerState { widget.group.memberCountText, style: TextStyle( fontSize: 12, - color: SojornColors.textTertiary, + color: Colors.grey[500], fontWeight: FontWeight.w500, ), ), - const Text(' • ', style: TextStyle(fontSize: 12, color: SojornColors.textTertiary)), + const Text(' • ', style: TextStyle(fontSize: 12, color: Colors.grey[500])), Text( widget.group.postCountText, style: TextStyle( fontSize: 12, - color: SojornColors.textTertiary, + color: Colors.grey[500], fontWeight: FontWeight.w500, ), ), ], ), - if (showReason && reason != null) ...[ + if (widget.showReason && widget.reason != null) ...[ const SizedBox(height: 8), Container( padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 4), @@ -289,7 +289,7 @@ class _GroupCardState extends ConsumerState { borderRadius: BorderRadius.circular(8), ), child: Text( - reason!, + widget.reason!, style: TextStyle( fontSize: 11, color: Colors.blue[700], @@ -390,12 +390,12 @@ class CompactGroupCard extends StatelessWidget { group.memberCountText, style: TextStyle( fontSize: 11, - color: SojornColors.textTertiary, + color: Colors.grey[500], ), ), ], ), - if (showReason && reason != null) ...[ + if (widget.showReason && widget.reason != null) ...[ const SizedBox(height: 6), Container( padding: const EdgeInsets.symmetric(horizontal: 6, vertical: 2), @@ -404,7 +404,7 @@ class CompactGroupCard extends StatelessWidget { borderRadius: BorderRadius.circular(6), ), child: Text( - reason!, + widget.reason!, style: TextStyle( fontSize: 9, color: Colors.blue[700], diff --git a/sojorn_app/lib/widgets/group_creation_modal.dart b/sojorn_app/lib/widgets/group_creation_modal.dart index 3b3910d..4c6cea9 100644 --- a/sojorn_app/lib/widgets/group_creation_modal.dart +++ b/sojorn_app/lib/widgets/group_creation_modal.dart @@ -47,7 +47,7 @@ class _GroupCreationModalState extends ConsumerState { name: _nameController.text.trim(), description: _descriptionController.text.trim(), category: _selectedCategory, - isPrivate: _isPrivate, + is_private: _isPrivate, avatarUrl: _avatarUrl, bannerUrl: _bannerUrl, ); diff --git a/sojorn_app/pubspec.lock b/sojorn_app/pubspec.lock index 3b07f1c..a121d7f 100644 --- a/sojorn_app/pubspec.lock +++ b/sojorn_app/pubspec.lock @@ -361,6 +361,14 @@ packages: url: "https://pub.dev" source: hosted version: "0.4.1" + equatable: + dependency: "direct main" + description: + name: equatable + sha256: "3e0141505477fd8ad55d6eb4e7776d3fe8430be8e497ccb1521370c3f21a3e2b" + url: "https://pub.dev" + source: hosted + version: "2.0.8" fake_async: dependency: transitive description: diff --git a/sojorn_app/pubspec.yaml b/sojorn_app/pubspec.yaml index 2a2933f..6984dfe 100644 --- a/sojorn_app/pubspec.yaml +++ b/sojorn_app/pubspec.yaml @@ -82,6 +82,7 @@ dependencies: intl: 0.19.0 web_socket_channel: ^3.0.3 device_info_plus: ^12.3.0 + equatable: ^2.0.8 dev_dependencies: flutter_test: