2023-03-22 11:38:18 +00:00
|
|
|
import 'package:auto_route/auto_route.dart';
|
2021-03-26 13:38:39 +00:00
|
|
|
import 'package:cubit_form/cubit_form.dart';
|
2022-05-18 10:39:11 +00:00
|
|
|
import 'package:easy_localization/easy_localization.dart';
|
2021-03-26 13:38:39 +00:00
|
|
|
import 'package:flutter/material.dart';
|
2021-04-10 03:04:23 +00:00
|
|
|
import 'package:selfprivacy/logic/common_enum/common_enum.dart';
|
2022-09-18 23:42:21 +00:00
|
|
|
import 'package:selfprivacy/logic/cubit/client_jobs/client_jobs_cubit.dart';
|
2022-11-12 17:29:06 +00:00
|
|
|
import 'package:selfprivacy/logic/cubit/metrics/metrics_cubit.dart';
|
2021-03-26 13:38:39 +00:00
|
|
|
import 'package:selfprivacy/logic/cubit/server_detailed_info/server_detailed_info_cubit.dart';
|
2022-05-18 10:39:11 +00:00
|
|
|
import 'package:selfprivacy/logic/cubit/server_installation/server_installation_cubit.dart';
|
2022-09-15 16:57:26 +00:00
|
|
|
import 'package:selfprivacy/logic/cubit/server_volumes/server_volume_cubit.dart';
|
2022-09-14 23:31:25 +00:00
|
|
|
import 'package:selfprivacy/logic/models/auto_upgrade_settings.dart';
|
2022-09-18 23:42:21 +00:00
|
|
|
import 'package:selfprivacy/logic/models/job.dart';
|
2021-03-26 13:38:39 +00:00
|
|
|
import 'package:selfprivacy/ui/components/brand_icons/brand_icons.dart';
|
2022-02-08 21:01:08 +00:00
|
|
|
import 'package:selfprivacy/ui/components/brand_loader/brand_loader.dart';
|
2024-01-31 05:14:23 +00:00
|
|
|
import 'package:selfprivacy/ui/components/buttons/segmented_buttons.dart';
|
|
|
|
import 'package:selfprivacy/ui/components/cards/filled_card.dart';
|
2022-09-18 13:24:17 +00:00
|
|
|
import 'package:selfprivacy/ui/components/list_tiles/list_tile_on_surface_variant.dart';
|
2024-01-31 05:14:23 +00:00
|
|
|
import 'package:selfprivacy/ui/layouts/brand_hero_screen.dart';
|
2022-10-20 19:23:55 +00:00
|
|
|
import 'package:selfprivacy/ui/pages/server_details/charts/cpu_chart.dart';
|
|
|
|
import 'package:selfprivacy/ui/pages/server_details/charts/network_charts.dart';
|
2022-09-15 21:08:14 +00:00
|
|
|
import 'package:selfprivacy/ui/pages/server_storage/storage_card.dart';
|
2023-03-27 17:02:44 +00:00
|
|
|
import 'package:selfprivacy/utils/breakpoints.dart';
|
2022-05-18 10:39:11 +00:00
|
|
|
import 'package:selfprivacy/utils/extensions/duration.dart';
|
2022-01-25 17:00:47 +00:00
|
|
|
import 'package:selfprivacy/utils/route_transitions/basic.dart';
|
|
|
|
import 'package:timezone/timezone.dart';
|
2022-05-18 10:39:11 +00:00
|
|
|
|
2022-09-15 15:40:02 +00:00
|
|
|
part 'charts/chart.dart';
|
2022-05-18 10:39:11 +00:00
|
|
|
part 'server_settings.dart';
|
|
|
|
part 'text_details.dart';
|
2022-02-07 07:53:13 +00:00
|
|
|
part 'time_zone/time_zone.dart';
|
2021-03-26 13:38:39 +00:00
|
|
|
|
|
|
|
var navigatorKey = GlobalKey<NavigatorState>();
|
|
|
|
|
2023-03-22 11:38:18 +00:00
|
|
|
@RoutePage()
|
2022-05-18 10:39:11 +00:00
|
|
|
class ServerDetailsScreen extends StatefulWidget {
|
2022-10-26 16:26:09 +00:00
|
|
|
const ServerDetailsScreen({super.key});
|
2021-03-26 13:38:39 +00:00
|
|
|
|
|
|
|
@override
|
2022-05-25 12:21:56 +00:00
|
|
|
State<ServerDetailsScreen> createState() => _ServerDetailsScreenState();
|
2021-03-26 13:38:39 +00:00
|
|
|
}
|
|
|
|
|
2022-05-18 10:39:11 +00:00
|
|
|
class _ServerDetailsScreenState extends State<ServerDetailsScreen>
|
2021-03-26 13:38:39 +00:00
|
|
|
with SingleTickerProviderStateMixin {
|
|
|
|
late TabController tabController;
|
|
|
|
|
|
|
|
@override
|
|
|
|
void dispose() {
|
|
|
|
tabController.dispose();
|
|
|
|
super.dispose();
|
|
|
|
}
|
|
|
|
|
|
|
|
@override
|
|
|
|
void initState() {
|
|
|
|
tabController = TabController(length: 2, vsync: this);
|
|
|
|
tabController.addListener(() {
|
|
|
|
setState(() {});
|
|
|
|
});
|
|
|
|
super.initState();
|
|
|
|
}
|
|
|
|
|
|
|
|
@override
|
2022-06-05 22:40:34 +00:00
|
|
|
Widget build(final BuildContext context) {
|
|
|
|
final bool isReady = context.watch<ServerInstallationCubit>().state
|
2022-05-17 13:31:34 +00:00
|
|
|
is ServerInstallationFinished;
|
2022-09-15 16:57:26 +00:00
|
|
|
|
|
|
|
if (!isReady) {
|
|
|
|
return BrandHeroScreen(
|
|
|
|
heroIcon: BrandIcons.server,
|
2022-10-03 23:32:35 +00:00
|
|
|
heroTitle: 'server.card_title'.tr(),
|
2022-09-15 16:57:26 +00:00
|
|
|
heroSubtitle: 'not_ready_card.in_menu'.tr(),
|
|
|
|
children: const [],
|
|
|
|
);
|
|
|
|
}
|
2021-03-26 13:38:39 +00:00
|
|
|
|
2022-02-08 21:01:08 +00:00
|
|
|
return BlocProvider(
|
2022-09-16 08:06:27 +00:00
|
|
|
create: (final context) => context.read<ServerDetailsCubit>()..check(),
|
2022-09-15 16:57:26 +00:00
|
|
|
child: BrandHeroScreen(
|
2023-03-22 12:13:47 +00:00
|
|
|
hasFlashButton: true,
|
2022-09-15 16:57:26 +00:00
|
|
|
heroIcon: BrandIcons.server,
|
2022-10-03 23:32:35 +00:00
|
|
|
heroTitle: 'server.card_title'.tr(),
|
|
|
|
heroSubtitle: 'server.description'.tr(),
|
2022-09-15 16:57:26 +00:00
|
|
|
children: [
|
|
|
|
StorageCard(
|
2022-09-16 11:28:17 +00:00
|
|
|
diskStatus: context.watch<ApiServerVolumeCubit>().state.diskStatus,
|
2022-09-15 16:57:26 +00:00
|
|
|
),
|
2022-09-18 14:17:13 +00:00
|
|
|
const SizedBox(height: 16),
|
|
|
|
const _ServerSettings(),
|
2022-09-16 10:36:26 +00:00
|
|
|
const Divider(height: 32),
|
|
|
|
Text(
|
2022-10-03 23:32:35 +00:00
|
|
|
'server.resource_usage'.tr(),
|
2022-09-16 10:36:26 +00:00
|
|
|
style: Theme.of(context).textTheme.titleLarge,
|
|
|
|
),
|
|
|
|
const SizedBox(height: 8),
|
2022-09-15 16:57:26 +00:00
|
|
|
BlocProvider(
|
2022-11-12 17:29:06 +00:00
|
|
|
create: (final context) => MetricsCubit()..restart(),
|
2022-09-15 16:57:26 +00:00
|
|
|
child: _Chart(),
|
|
|
|
),
|
2022-09-18 14:17:13 +00:00
|
|
|
const SizedBox(height: 8),
|
2022-09-15 16:57:26 +00:00
|
|
|
_TextDetails(),
|
|
|
|
],
|
2021-06-08 18:52:44 +00:00
|
|
|
),
|
2021-03-26 13:38:39 +00:00
|
|
|
);
|
|
|
|
}
|
|
|
|
}
|