Phase 2 scaffold: mitra online status & pairing logic

Add mitra online/offline status with heartbeat-based auto-offline,
customer-mitra pairing via Valkey pub/sub blast, session management,
and control center dashboard with real-time stats.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-04-05 23:17:49 +08:00
parent a7a2a32d27
commit d668112edd
44 changed files with 2800 additions and 80 deletions

View File

@@ -3,6 +3,7 @@ import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'core/api/api_client.dart';
import 'core/auth/auth_bloc.dart';
import 'core/pairing/pairing_bloc.dart';
import 'firebase_options.dart';
import 'router.dart';
@@ -17,8 +18,13 @@ class App extends StatelessWidget {
@override
Widget build(BuildContext context) {
return BlocProvider(
create: (_) => AuthBloc(apiClient: ApiClient())..add(AppStarted()),
final apiClient = ApiClient();
return MultiBlocProvider(
providers: [
BlocProvider(create: (_) => AuthBloc(apiClient: apiClient)..add(AppStarted())),
BlocProvider(create: (_) => PairingBloc(apiClient: apiClient)),
RepositoryProvider.value(value: apiClient),
],
child: BlocBuilder<AuthBloc, AuthState>(
builder: (context, state) {
return MaterialApp.router(