- Move fleet polling logic to control orchestrator - Split client state management into separate controller/repository - Add client bootstrap and home page components - Update HTTP fleet handlers and views - Add unit tests for client bootstrap and status controller - Archive completed subtask documents
82 lines
2.4 KiB
Dart
82 lines
2.4 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:flutter/services.dart';
|
|
import 'package:iop_console/iop_console.dart';
|
|
|
|
import 'client_bootstrap.dart';
|
|
import 'client_home_page.dart';
|
|
import 'control_plane_status_client.dart';
|
|
import 'iop_wire/client_wire_client.dart';
|
|
import 'src/integrations/mattermost/mattermost_push_host_integration.dart';
|
|
|
|
const iopDefaultCapabilityPack = IopCapabilityPack(
|
|
capabilities: [
|
|
IopCapability(
|
|
name: 'Edge Control',
|
|
description: 'Monitor and configure Edge routing groups.',
|
|
),
|
|
IopCapability(
|
|
name: 'Node Management',
|
|
description: 'Track node registration and execution lanes.',
|
|
),
|
|
IopCapability(
|
|
name: 'Runtime Dispatch',
|
|
description: 'Trigger manual adapter execution sessions.',
|
|
),
|
|
IopCapability(
|
|
name: 'Execution Tracing',
|
|
description: 'View live logs and execution metrics stream.',
|
|
),
|
|
IopCapability(
|
|
name: 'Maintenance Mode',
|
|
description: 'Trigger node bootstrap or cluster repairs.',
|
|
),
|
|
],
|
|
);
|
|
|
|
Future<void> main() => runIopClient();
|
|
|
|
Future<void> applyFullscreenMode() async {
|
|
await SystemChrome.setEnabledSystemUIMode(SystemUiMode.immersiveSticky);
|
|
SystemChrome.setSystemUIOverlayStyle(
|
|
const SystemUiOverlayStyle(
|
|
statusBarColor: Colors.transparent,
|
|
systemNavigationBarColor: Colors.transparent,
|
|
systemNavigationBarDividerColor: Colors.transparent,
|
|
),
|
|
);
|
|
}
|
|
|
|
class IopClientApp extends StatelessWidget {
|
|
final ClientWireClient? testClient;
|
|
final MattermostPushHostIntegration? mattermostHost;
|
|
final ControlPlaneStatusRepository? statusRepository;
|
|
|
|
const IopClientApp({
|
|
super.key,
|
|
this.testClient,
|
|
this.mattermostHost,
|
|
this.statusRepository,
|
|
});
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return MaterialApp(
|
|
title: 'IOP Client',
|
|
debugShowCheckedModeBanner: false,
|
|
theme: ThemeData.dark(useMaterial3: true).copyWith(
|
|
colorScheme: ColorScheme.fromSeed(
|
|
seedColor: const Color(0xFF6366F1),
|
|
brightness: Brightness.dark,
|
|
primary: const Color(0xFF6366F1),
|
|
secondary: const Color(0xFF10B981),
|
|
),
|
|
scaffoldBackgroundColor: const Color(0xFF0F172A),
|
|
),
|
|
home: ClientHomePage(
|
|
testClient: testClient,
|
|
mattermostHost: mattermostHost,
|
|
statusRepository: statusRepository,
|
|
),
|
|
);
|
|
}
|
|
}
|