This MVP release provides a complete full-stack solution for managing action mappings in Geutebruck's GeViScope and GeViSoft video surveillance systems. ## Features ### Flutter Web Application (Port 8081) - Modern, responsive UI for managing action mappings - Action picker dialog with full parameter configuration - Support for both GSC (GeViScope) and G-Core server actions - Consistent UI for input and output actions with edit/delete capabilities - Real-time action mapping creation, editing, and deletion - Server categorization (GSC: prefix for GeViScope, G-Core: prefix for G-Core servers) ### FastAPI REST Backend (Port 8000) - RESTful API for action mapping CRUD operations - Action template service with comprehensive action catalog (247 actions) - Server management (G-Core and GeViScope servers) - Configuration tree reading and writing - JWT authentication with role-based access control - PostgreSQL database integration ### C# SDK Bridge (gRPC, Port 50051) - Native integration with GeViSoft SDK (GeViProcAPINET_4_0.dll) - Action mapping creation with correct binary format - Support for GSC and G-Core action types - Proper Camera parameter inclusion in action strings (fixes CrossSwitch bug) - Action ID lookup table with server-specific action IDs - Configuration reading/writing via SetupClient ## Bug Fixes - **CrossSwitch Bug**: GSC and G-Core actions now correctly display camera/PTZ head parameters in GeViSet - Action strings now include Camera parameter: `@ PanLeft (Comment: "", Camera: 101028)` - Proper filter flags and VideoInput=0 for action mappings - Correct action ID assignment (4198 for GSC, 9294 for G-Core PanLeft) ## Technical Stack - **Frontend**: Flutter Web, Dart, Dio HTTP client - **Backend**: Python FastAPI, PostgreSQL, Redis - **SDK Bridge**: C# .NET 8.0, gRPC, GeViSoft SDK - **Authentication**: JWT tokens - **Configuration**: GeViSoft .set files (binary format) ## Credentials - GeViSoft/GeViScope: username=sysadmin, password=masterkey - Default admin: username=admin, password=admin123 ## Deployment All services run on localhost: - Flutter Web: http://localhost:8081 - FastAPI: http://localhost:8000 - SDK Bridge gRPC: localhost:50051 - GeViServer: localhost (default port) Generated with Claude Code (https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
8.0 KiB
Geutebruck Flutter App - Development Status
Last Updated: 2025-12-23 Version: 0.1.0-alpha Development Phase: Phase 2 Complete (Server Management)
🎯 Project Overview
Flutter mobile application for managing Geutebruck surveillance systems, including G-Core and GeViScope servers, with offline-first architecture and bidirectional sync capabilities.
✅ Completed Features
Phase 1: Authentication & Foundation
-
✅ User Authentication
- Login screen with username/password
- JWT token-based authentication
- Secure token storage with flutter_secure_storage
- Automatic auth state management with BLoC
- Auth guards on protected routes
-
✅ Architecture & Foundation
- Clean Architecture (Domain/Data/Presentation layers)
- BLoC state management
- Dependency injection with GetIt
- Go Router for navigation
- Error handling with Either<Failure, T> pattern
- Dio HTTP client with interceptors
Phase 2: Server Management (COMPLETE)
-
✅ View Servers (US-2.1)
- List all servers (G-Core and GeViScope)
- Filter by server type (All/G-Core/GeViScope)
- Display server status (enabled/disabled)
- Show dirty count badge for unsaved changes
- Pull-to-refresh functionality
-
✅ Create Servers (US-2.5, US-2.6)
- Create G-Core servers with all parameters
- Create GeViScope servers with all parameters
- Form validation
- Dynamic server type selection
- Offline creation with sync capability
-
✅ Update Servers (US-2.7)
- Edit existing server configuration
- Pre-populated form with current values
- Proper state handling during updates
- Success feedback with snackbar
-
✅ Delete Servers (US-2.8)
- Delete confirmation dialog
- Remove from local and remote
- Dirty state tracking
-
✅ Offline-First Architecture
- Hive local database for offline storage
- Automatic dirty change tracking
- Sync unsaved changes to server
- Download latest configuration from server
- Conflict resolution (server-wins strategy)
-
✅ Sync & Download
- Upload dirty (modified) servers to API
- Download all servers from API
- Sync status indicators
- Error handling for network failures
🐛 Recent Bug Fixes
2025-12-23: Fixed "No Data" Display Issue
Issue: After updating a server and clicking "Update Server", the servers list briefly showed "No data" instead of the updated server list.
Root Cause: The BlocBuilder in servers_management_screen.dart had a fallback case that displayed "No data" for any state that didn't match the explicit cases (ServerLoading, ServerLoaded, ServerError, etc.). During state transitions, the state could briefly be ServerInitial, causing "No data" to flash.
Solution: Changed the fallback case from displaying "No data" to showing a loading indicator (CircularProgressIndicator), providing better UX during state transitions.
Files Modified:
lib/presentation/screens/servers/servers_management_screen.dart:268
Impact: Users now see a smooth loading experience instead of confusing "No data" messages when navigating between screens.
📊 Architecture Details
State Management Flow
User Action → BLoC Event → Use Case → Repository → Data Source
↓
BLoC State ← Result ← Either<Failure, T>
↓
UI Update
Offline-First Strategy
User Action
↓
Local Storage (Hive) ← Immediate Write
↓
Mark as Dirty
↓
User Triggers Sync → API Call → Update Local → Clear Dirty Flag
Shared State with ShellRoute
ShellRoute(
builder: (context, state, child) => BlocProvider(
create: (_) => ServerBloc()..add(LoadServers()),
child: child,
),
routes: [/servers, /servers/create, /servers/edit/:id]
)
This ensures a single ServerBloc instance is shared across all server-related screens.
🏗️ Technical Stack
Core Dependencies
- Flutter: ^3.5.0
- Dart: ^3.5.0
- flutter_bloc: ^8.1.3 - State management
- go_router: ^14.0.0 - Navigation
- hive/hive_flutter: ^2.3.7 - Local storage
- dio: ^5.4.0 - HTTP client
- get_it: ^7.6.4 - Dependency injection
- dartz: ^0.10.1 - Functional programming (Either, Option)
- equatable: ^2.0.5 - Value equality
- flutter_secure_storage: ^9.0.0 - Secure token storage
Dev Dependencies
- build_runner: ^2.4.6
- hive_generator: ^2.0.1
- very_good_analysis: ^5.1.0
📁 Project Structure
lib/
├── core/
│ ├── constants/ # API endpoints, app constants
│ ├── errors/ # Exceptions and failures
│ ├── network/ # Dio client, interceptors
│ └── utils/ # Helper functions
├── data/
│ ├── data_sources/
│ │ ├── local/ # Hive, secure storage
│ │ └── remote/ # API clients
│ ├── models/ # Data transfer objects
│ ├── repositories/ # Repository implementations
│ └── services/ # Sync service
├── domain/
│ ├── entities/ # Business objects
│ ├── repositories/ # Repository interfaces
│ └── use_cases/ # Business logic
└── presentation/
├── blocs/ # BLoC state management
├── screens/ # UI screens
└── widgets/ # Reusable widgets
🔧 Configuration
API Endpoint
// lib/core/constants/api_constants.dart
static const String baseUrl = 'http://100.81.138.77:8000';
Authentication
- Username:
admin - Password:
admin123 - Token storage: flutter_secure_storage (encrypted)
🚀 Running the Application
Development Server
cd geutebruck_app
flutter run -d web-server --web-port=8081 --web-hostname=0.0.0.0
Hot Reload
Press r in the Flutter terminal to hot reload changes
Build for Production
# Android
flutter build apk --release
# iOS
flutter build ipa --release
# Web
flutter build web --release
📋 Next Steps (Phase 3)
Action Mapping Management
- US-3.1: View all action mappings
- US-3.2: View action mapping details
- US-3.3: Create action mapping
- US-3.4: Update action mapping
- US-3.5: Delete action mapping
Camera Management (Phase 4)
- US-4.1: View all cameras
- US-4.2: View camera details
- US-4.3: PTZ camera control
Monitor & Cross-Switching (Phase 5)
- US-5.1: View monitors
- US-5.2: Monitor details
- US-6.1: Connect camera to monitor
- US-6.2: Clear monitor assignment
🧪 Testing
Current Test Coverage
- Unit tests: Pending
- Widget tests: Pending
- Integration tests: Pending
Testing Tools Available
- MCP Playwright server configured for browser automation
- Dart/Flutter MCP server configured for code analysis
📝 Known Issues
None at this time. The "No data" issue has been resolved.
🔗 Related Documentation
- API Spec:
../geutebruck-api/specs/001-surveillance-api/spec.md - App Spec:
../geutebruck-api/specs/001-flutter-app/spec.md - Tasks:
../geutebruck-api/specs/001-flutter-app/tasks.md - OpenAPI Contract:
../geutebruck-api/specs/001-surveillance-api/contracts/openapi.yaml
👥 Development Team
This is an AI-assisted development project using Claude Code CLI with MCP servers for enhanced debugging and testing capabilities.
📅 Timeline
- 2025-12-21: Project initialization, Phase 1 (Auth) complete
- 2025-12-22: Phase 2 (Server Management) implementation
- 2025-12-23: Bug fixes, offline-first architecture, Phase 2 complete
🎯 Success Metrics
Phase 2 Completion Criteria ✅
- All server CRUD operations working
- Offline-first storage implemented
- Sync functionality operational
- State management working correctly
- UI responsive and bug-free
- Navigation flow smooth
Next Phase Criteria
- Action mapping CRUD operations
- Camera list and details view
- PTZ control interface
- Monitor management
- Cross-switching functionality