await apiClient.getNodeNetwork(targetNode, type: bridgeType);
yield PveBridgeSelectorState(
bridges: bridges,
- selectedBridge: bridges?.first,
+ selectedBridge: bridges.first,
error: bridges.isEmpty ? "No bridges available" : null);
}
}
class GuestIdSelectorState extends PveFormFieldState<String?> {
- GuestIdSelectorState({String? value, String? errorText})
- : super(value: value, errorText: errorText);
+ GuestIdSelectorState({super.value, super.errorText});
}
}
class PveGuestOsSelectorState extends PveFormFieldState<OSType?> {
- PveGuestOsSelectorState({OSType? value, String? errorText})
- : super(value: value, errorText: errorText);
+ PveGuestOsSelectorState({super.value, super.errorText});
PveGuestOsSelectorState copyWith(
{String? os, OSType? value, String? errorText}) {
qPreconditions.localDisks!.forEach((d) {
var disk = d.asMap;
if (disk['cdrom'] == 1) {
- if (disk['volid'].contains('vm-' + guestID + '-cloudinit')) {
+ if (disk['volid'].contains('vm-$guestID-cloudinit')) {
if (qPreconditions.running!) {
preconditions.add(PveMigrateCondition((b) => b
..severity = PveMigrateSeverity.error
} else {
preconditions.add(PveMigrateCondition((b) => b
..severity = PveMigrateSeverity.warning
- ..message = "Migration with local disk might take long: " +
- Renderers.formatSize(disk['size'])));
+ ..message =
+ "Migration with local disk might take long: ${Renderers.formatSize(disk['size'])}"));
}
});
Future<List<PveNodesModel>> getNodes(bool onlyOnline) async {
var nodes = await apiClient.getNodes();
- if (onlyOnline)
+ if (onlyOnline) {
nodes = nodes.where((node) => node.status == "online").toList();
+ }
nodes.sort((a, b) => a.nodeName.compareTo(b.nodeName));
return nodes;
}
}
class PveVmNameState extends PveFormFieldState<String?> {
- PveVmNameState({String? value, String? errorText})
- : super(value: value, errorText: errorText);
+ PveVmNameState({super.value, super.errorText});
}
final SharedPreferences sharedPreferences;
final GlobalKey<NavigatorState> navigatorKey = GlobalKey<NavigatorState>();
- MyApp({Key? key, this.authbloc, required this.sharedPreferences})
- : assert(sharedPreferences != null),
- super(key: key);
+ MyApp({super.key, this.authbloc, required this.sharedPreferences})
+ : assert(sharedPreferences != null);
@override
Widget build(BuildContext context) {
import 'package:flutter/material.dart';
class NotFoundPage extends StatelessWidget {
+ const NotFoundPage({super.key});
+
@override
Widget build(BuildContext context) {
return Container(
import 'package:rxdart/rxdart.dart';
class MainLayoutSlim extends StatefulWidget {
+ const MainLayoutSlim({super.key});
+
@override
_MainLayoutSlimState createState() => _MainLayoutSlimState();
}
}
class PveMobileBottomNavigationbar extends StatelessWidget {
+ const PveMobileBottomNavigationbar({super.key});
+
@override
Widget build(BuildContext context) {
final pageSelector = Provider.of<BehaviorSubject<int>>(context);
}
class MobileDashboard extends StatelessWidget {
+ const MobileDashboard({super.key});
+
@override
Widget build(BuildContext context) {
final cBloc = Provider.of<PveClusterStatusBloc>(context);
baseUrl: (Provider.of<PveResourceBloc>(context)
.apiClient
?.credentials
- ?.apiBaseUrl) ??
+ .apiBaseUrl) ??
Uri.parse('https://pve.proxmox.com'),
docPath: 'index.html'),
],
final String? level;
final String? ip;
const PveNodeListTile(
- {Key? key,
+ {super.key,
required this.name,
required this.online,
required this.type,
this.level,
- this.ip = ''})
- : super(key: key);
+ this.ip = ''});
@override
Widget build(BuildContext context) {
return ListTile(
String getNodeTileSubtitle(bool online, String? level, String? ip) {
if (online) {
- return '$ip - ' + Renderers.renderSupportLevel(level);
+ return '$ip - ${Renderers.renderSupportLevel(level)}';
}
return 'offline';
}
}
class MobileResourceOverview extends StatelessWidget {
+ const MobileResourceOverview({super.key});
+
@override
Widget build(BuildContext context) {
final rBloc = Provider.of<PveResourceBloc>(context);
class PveGuestListTile extends StatelessWidget {
const PveGuestListTile({
- Key? key,
+ super.key,
required this.resource,
- }) : super(key: key);
+ });
final PveClusterResourcesModel resource;
class PveStorageListeTile extends StatelessWidget {
const PveStorageListeTile({
- Key? key,
+ super.key,
required this.resource,
- }) : super(key: key);
+ });
final PveClusterResourcesModel resource;
class AppbarSearchTextField extends StatefulWidget {
final ValueChanged<String>? onChanged;
- const AppbarSearchTextField({Key? key, this.onChanged}) : super(key: key);
+ const AppbarSearchTextField({super.key, this.onChanged});
@override
_AppbarSearchTextFieldState createState() => _AppbarSearchTextFieldState();
}
}
class AppBarFilterIconButton extends StatelessWidget {
+ const AppBarFilterIconButton({super.key});
+
@override
Widget build(BuildContext context) {
final rBloc = Provider.of<PveResourceBloc>(context);
}
class MobileAccessManagement extends StatelessWidget {
+ const MobileAccessManagement({super.key});
+
@override
Widget build(BuildContext context) {
final aBloc = Provider.of<PveAccessManagementBloc>(context);
static const PveMigrationMode offline = _$offline;
static const PveMigrationMode restart = _$restart;
- const PveMigrationMode._(String name) : super(name);
+ const PveMigrationMode._(super.name);
static BuiltSet<PveMigrationMode> get values => _$values;
static PveMigrationMode valueOf(String name) => _$valueOf(name);
static const PveMigrateSeverity warning = _$warning;
static const PveMigrateSeverity error = _$error;
- const PveMigrateSeverity._(String name) : super(name);
+ const PveMigrateSeverity._(super.name);
static BuiltSet<PveMigrateSeverity> get values => _$sValues;
static PveMigrateSeverity valueOf(String name) => _$sValueOf(name);
final void Function(int? index)? onTap;
const Dot({
- Key? key,
+ super.key,
this.dotSpacing,
this.dotSize,
this.zoom,
this.color,
this.index,
this.onTap,
- }) : super(key: key);
+ });
@override
Widget build(BuildContext context) {
child: Container(
width: dotSize! * zoom!,
height: dotSize! * zoom!,
- child: GestureDetector(
- onTap: () => onTap!(index),
- ),
decoration: BoxDecoration(
color: color,
shape: BoxShape.circle,
offset: const Offset(0.0, 0.0))
],
),
+ child: GestureDetector(
+ onTap: () => onTap!(index),
+ ),
),
),
);
}
class DotIndicator extends AnimatedWidget {
- DotIndicator({
+ const DotIndicator({
+ super.key,
required this.controller,
this.itemCount,
this.onPageSelected,
double zoom = 1.0 + (_maxZoom - 1.0) * selectedness;
double shadowBlurRadius = 4.0 * selectedness;
double shadowSpreadRadius = 1.0 * selectedness;
- return new Dot(
+ return Dot(
color: color,
shadowBlurRadius: shadowBlurRadius,
shadowSpreadRadius: shadowSpreadRadius,
class ProxmoxLayoutBuilder extends StatelessWidget {
const ProxmoxLayoutBuilder({
required this.builder,
- Key? key,
- }) : assert(builder != null),
- super(key: key);
+ super.key,
+ }) : assert(builder != null);
/// Builds the widgets below this widget given this widget's layout width.
final ProxmoxLayoutLayoutWidgetBuilder builder;
converted = converted / 1024;
}
- return converted.toStringAsFixed((num > 0) ? 2 : 0) +
- " " +
- units[num] +
- "B";
+ return "${converted.toStringAsFixed((num > 0) ? 2 : 0)} ${units[num]}B";
}
static String renderStorageContent(PveNodesStorageContentModel content) {
class ClusterStatus extends StatelessWidget {
const ClusterStatus(
- {Key? key,
+ {super.key,
required this.isHealthy,
this.healthyColor = Colors.greenAccent,
this.warningColor = Colors.orangeAccent,
this.backgroundColor = Colors.transparent,
- this.version})
- : super(key: key);
+ this.version});
final bool isHealthy;
final String? version;
return AnimatedContainer(
width: 150.0,
height: 150.0,
- decoration: new BoxDecoration(
+ decoration: BoxDecoration(
color: backgroundColor,
shape: BoxShape.circle,
border: Border.all(
final String? text;
const PveQuestion({
- Key? key,
+ super.key,
this.text,
- }) : super(key: key);
+ });
@override
Widget build(BuildContext context) {
final List<TextSpan>? spans;
const PveAnswer({
- Key? key,
+ super.key,
required this.text,
this.spans,
- }) : super(key: key);
+ });
@override
Widget build(BuildContext context) {
class PveWelcomePageContent extends StatelessWidget {
final Widget? child;
const PveWelcomePageContent({
- Key? key,
+ super.key,
this.child,
- }) : super(key: key);
+ });
@override
Widget build(BuildContext context) {
// FAQ
class PveWelcomePageFAQ extends StatelessWidget {
const PveWelcomePageFAQ({
- Key? key,
- }) : super(key: key);
+ super.key,
+ });
@override
Widget build(BuildContext context) {
launch(
'https://play.google.com/store/apps/details?id=com.undatech.opaque')
},
- child: const Text('Opaque'),
style: OutlinedButton.styleFrom(
side: BorderSide(color: ProxmoxColors.supportGrey),
foregroundColor: Colors.white,
),
+ child: const Text('Opaque'),
),
),
],
// goodbye
class PveWelcomePageLast extends StatelessWidget {
- const PveWelcomePageLast({Key? key, this.onDone}) : super(key: key);
+ const PveWelcomePageLast({super.key, this.onDone});
final VoidCallback? onDone;
OutlinedButton(
onPressed: () =>
{launch('https://forum.proxmox.com')},
- child: const Text('Forum'),
style: OutlinedButton.styleFrom(
side: BorderSide(
color: ProxmoxColors.supportGrey),
foregroundColor: Colors.white,
),
+ child: const Text('Forum'),
),
OutlinedButton(
onPressed: () => {
launch(
'https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-user')
},
- child: const Text('User Mailing List'),
style: OutlinedButton.styleFrom(
side: BorderSide(
color: ProxmoxColors.supportGrey),
foregroundColor: Colors.white,
),
+ child: const Text('User Mailing List'),
),
],
),
// Big Logo
class PveWelcomePageLogo extends StatelessWidget {
const PveWelcomePageLogo({
- Key? key,
- }) : super(key: key);
+ super.key,
+ });
@override
Widget build(BuildContext context) {
// disable ssl validation hint
class PveWelcomePageSSLValidation extends StatelessWidget {
const PveWelcomePageSSLValidation({
- Key? key,
- }) : super(key: key);
+ super.key,
+ });
@override
Widget build(BuildContext context) {
final bool selected;
const ProxmoxCapacityIndicator(
- {Key? key,
+ {super.key,
this.icon,
required this.totalValue,
required this.usedValue,
this.selected = false,
this.indicatorBackgroundColor,
this.textColor,
- this.valueColor})
- : super(key: key);
+ this.valueColor});
@override
Widget build(BuildContext context) {
final Color backgroundGroundColor;
const ProxmoxGaugeChart({
- Key? key,
+ super.key,
this.value,
this.maxValue,
this.padding = const EdgeInsets.all(6.0),
this.strokeWidth = 6,
this.foreGroundColor = Colors.blue,
this.backgroundGroundColor = Colors.black12,
- }) : super(key: key);
+ });
@override
_ProxmoxGaugeChartState createState() => _ProxmoxGaugeChartState();
}
final num? maxValue;
const ProxmoxGaugeChartListTile({
- Key? key,
+ super.key,
this.title,
this.subtitle,
this.legend,
this.value,
this.maxValue,
- }) : super(key: key);
+ });
@override
Widget build(BuildContext context) {
return Padding(
final Color? warningColor;
const ProxmoxHeartbeatIndicator({
- Key? key,
+ super.key,
required this.isHealthy,
this.healthyColor,
this.warningColor,
- }) : super(key: key);
+ });
@override
Widget build(BuildContext context) {
return CustomPaint(
S extends PveBaseState?> extends StatefulWidget {
final B? bloc;
final bool? errorHandler;
- const ProxmoxBaseStreamBuilder({Key? key, this.bloc, this.errorHandler})
- : super(key: key);
+ const ProxmoxBaseStreamBuilder({super.key, this.bloc, this.errorHandler});
Widget build(BuildContext context, S state);
return StreamListener<S>(
stream: widget.bloc!.state,
onStateChange: (newState) {
- if (newState.isFailure && widget.errorHandler!)
+ if (newState.isFailure && widget.errorHandler!) {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: Text(
backgroundColor: ThemeData.dark().colorScheme.error,
),
);
+ }
},
child: StreamBuilder<S>(
stream: widget.bloc!.state,
final AsyncWidgetBuilder<S> builder;
const ProxmoxStreamBuilder({
- Key? key,
+ super.key,
required this.builder,
- B? bloc,
- bool errorHandler = true,
- }) : assert(builder != null),
- super(key: key, bloc: bloc, errorHandler: errorHandler);
+ super.bloc,
+ bool super.errorHandler = true,
+ }) : assert(builder != null);
@override
Widget build(BuildContext context, S state) => builder(context, state);
final Stream<T> stream;
const StreamListener({
- Key? key,
+ super.key,
required this.stream,
required this.child,
required this.onStateChange,
class ProxmoxTreeWidget extends StatefulWidget {
final List<ProxmoxTreeItem>? data;
const ProxmoxTreeWidget({
- Key? key,
+ super.key,
this.data,
- }) : super(key: key);
+ });
@override
_ProxmoxTreeWidgetState createState() => _ProxmoxTreeWidgetState();
Widget _buildTiles(ProxmoxTreeItem root) {
assert(root != null);
- if (root.children.isEmpty)
+ if (root.children.isEmpty) {
return Padding(
padding: const EdgeInsets.only(left: 8),
child: ListTile(
onTap:
root.callback != null ? () => root.callback!(root.id) : null),
);
+ }
return Padding(
padding: const EdgeInsets.only(left: 8),
child: ExpansionTile(
key: PageStorageKey<String?>(root.id),
title: Text(root.headerValue!),
leading: root.icon,
- children: root.children.map<Widget>(_buildTiles).toList(),
onExpansionChanged: root.callback != null
? (isExpaned) => root.callback!(root.id)
: null,
+ children: root.children.map<Widget>(_buildTiles).toList(),
),
);
}
final Color? color;
const ActionCard({
- Key? key,
+ super.key,
this.onTap,
this.title,
this.icon,
this.color,
- }) : super(key: key);
+ });
@override
Widget build(BuildContext context) {
class PveBridgeSelector extends StatelessWidget {
final String? labelText;
- const PveBridgeSelector({Key? key, this.labelText}) : super(key: key);
+ const PveBridgeSelector({super.key, this.labelText});
@override
Widget build(BuildContext context) {
helperText: ' ',
),
items: <DropdownMenuItem<PveNodeNetworkModel>>[
- for (var bridge in state?.bridges!)
+ for (var bridge in state.bridges!)
DropdownMenuItem(
+ value: bridge,
child: Row(
children: <Widget>[
Text(bridge.iface ?? ''),
Text(bridge.comment ?? '')
],
),
- value: bridge,
)
],
onChanged: (PveNodeNetworkModel? selection) =>
value: state.value,
autovalidateMode: AutovalidateMode.onUserInteraction,
validator: (dynamic _) {
- return state?.errorText;
+ return state.errorText;
},
);
}
import 'package:proxmox_dart_api_client/proxmox_dart_api_client.dart';
class PveCdSelector extends StatelessWidget {
+ const PveCdSelector({super.key});
+
@override
Widget build(BuildContext context) {
final client = Provider.of<ProxmoxApiClient>(context);
final VoidCallback? onDeleted;
const PveConfigSwitchListTile({
- Key? key,
+ super.key,
this.value,
this.pending,
this.defaultValue,
this.title,
this.onChanged,
this.onDeleted,
- }) : super(key: key);
+ });
@override
Widget build(BuildContext context) {
var pBool;
final String type;
const PveConsoleMenu({
- Key? key,
+ super.key,
required this.apiClient,
this.guestID,
required this.node,
required this.type,
this.allowSpice = true,
- }) : super(key: key);
+ });
@override
Widget build(BuildContext context) {
final String? type;
const PVEWebConsole({
- Key? key,
+ super.key,
required this.apiClient,
required this.node,
this.guestID,
this.type,
- }) : super(key: key);
+ });
@override
PVEWebConsoleState createState() => PVEWebConsoleState();
static const routeName = '/console';
final String? vmid;
final String nodeid;
- const PveConsoleWidget({Key? key, this.vmid, required this.nodeid})
- : super(key: key);
+ const PveConsoleWidget({super.key, this.vmid, required this.nodeid});
@override
Widget build(BuildContext context) {
final bool isSelector;
const PveFileSelector({
- Key? key,
+ super.key,
this.fBloc,
this.sBloc,
this.isSelector = false,
- }) : super(key: key);
+ });
@override
_PveFileSelectorState createState() => _PveFileSelectorState();
}
final bool isSelector;
const PveFileSelectorWidget({
- Key? key,
+ super.key,
required this.fBloc,
required this.sBloc,
this.isSelector = false,
- }) : super(key: key);
+ });
@override
Widget build(BuildContext context) {
final bool selected;
final IconData? icon;
- const PveStorageCardIcon({Key? key, this.selected = false, this.icon})
- : super(key: key);
+ const PveStorageCardIcon({super.key, this.selected = false, this.icon});
@override
Widget build(BuildContext context) {
class PveStorageCard extends StatelessWidget {
const PveStorageCard({
- Key? key,
+ super.key,
required this.isSelected,
required this.sBloc,
required this.storage,
required this.storageIcon,
this.width = 300,
- }) : super(key: key);
+ });
final bool isSelected;
final PveStorageSelectorBloc? sBloc;
final bool storageSelected;
const FileSelectorContentView({
- Key? key,
+ super.key,
this.gridView,
this.content,
this.isSelector = false,
this.storageSelected = false,
- }) : super(key: key);
+ });
@override
Widget build(BuildContext context) {
if (content == null) {
import 'package:pve_flutter_frontend/widgets/firstWelcomeScreen/pve_welcome_last.dart';
class PveWelcome extends StatefulWidget {
+ const PveWelcome({super.key});
+
@override
_PveWelcomeState createState() => _PveWelcomeState();
}
);
} else {
return TextButton(
- child: const Text("Next"),
style: TextButton.styleFrom(
foregroundColor: _buttonTextColor,
disabledForegroundColor: _buttonDisabledTextColor,
_controller!
.nextPage(duration: _pageChangeDuration, curve: _pageChangeCurve);
},
+ child: const Text("Next"),
);
}
}
class PveGuestBackupWidget extends StatelessWidget {
final String guestID;
- const PveGuestBackupWidget({Key? key, required this.guestID})
- : super(key: key);
+ const PveGuestBackupWidget({super.key, required this.guestID});
@override
Widget build(BuildContext context) {
final bool? storageSelected;
const PveGuestBackupContent({
- Key? key,
+ super.key,
this.content,
this.storageSelected,
- }) : super(key: key);
+ });
@override
Widget build(BuildContext context) {
final fBloc = Provider.of<PveFileSelectorBloc>(context);
final String? volume;
const PveConfigurationDialog({
- Key? key,
+ super.key,
required this.apiClient,
required this.targetNode,
required this.volume,
- }) : super(key: key);
+ });
@override
_PveConfigurationDialogState createState() => _PveConfigurationDialogState();
}
final PveStorageSelectorBloc sBloc;
final String guestID;
- const PveBackupForm({Key? key, required this.sBloc, required this.guestID})
- : super(key: key);
+ const PveBackupForm({super.key, required this.sBloc, required this.guestID});
@override
_PveBackupFormState createState() => _PveBackupFormState();
items: <DropdownMenuItem<PveVZDumpModeType>>[
for (var mode in PveVZDumpModeType.values)
DropdownMenuItem(
- child: Text(mode.name.toUpperCase()),
value: mode,
+ child: Text(mode.name.toUpperCase()),
)
],
onChanged: (PveVZDumpModeType? selection) => setState(() {
items: <DropdownMenuItem<PveVZDumpCompressionType>>[
for (var comp in compTypes)
DropdownMenuItem(
- child: Text(comp['name'] as String),
value: comp['type'] as PveVZDumpCompressionType?,
+ child: Text(comp['name'] as String),
)
],
onChanged: (PveVZDumpCompressionType? selection) => setState(() {
final Color templateColor;
const PveGuestIcon({
- Key? key,
+ super.key,
required this.type,
this.template = false,
required this.status,
this.color = Colors.grey,
this.templateColor = Colors.black,
- }) : super(key: key);
+ });
@override
Widget build(BuildContext context) {
class PveGuestIdSelector extends StatelessWidget {
final String? labelText;
- PveGuestIdSelector({
- Key? key,
+ const PveGuestIdSelector({
+ super.key,
this.labelText,
- }) : super(key: key);
+ });
@override
Widget build(BuildContext context) {
// first build has no data
key: state.value != null ? null : const ValueKey(1),
decoration: InputDecoration(labelText: labelText, helperText: ' '),
- initialValue: state?.value,
+ initialValue: state.value,
keyboardType: TextInputType.number,
inputFormatters: [FilteringTextInputFormatter.digitsOnly],
autovalidateMode: AutovalidateMode.onUserInteraction,
_pveGuestIdSelectorBloc.events.add(OnChanged(text));
},
validator: (_) {
- return state?.errorText;
+ return state.errorText;
},
);
});
import 'package:pve_flutter_frontend/widgets/pve_help_icon_button_widget.dart';
class PveGuestMigrate extends StatelessWidget {
- PveGuestMigrate({Key? key}) : super(key: key);
+ const PveGuestMigrate({super.key});
@override
Widget build(BuildContext context) {
final migrateBloc = Provider.of<PveMigrateBloc>(context);
class _MigrateTargetSelector extends StatelessWidget {
const _MigrateTargetSelector({
- Key? key,
+ super.key,
required this.nodeSelectorbloc,
required this.migrateBloc,
required this.disabled,
required this.titleColor,
required this.iconEnabledColor,
- }) : super(key: key);
+ });
final PveNodeSelectorBloc nodeSelectorbloc;
final PveMigrateBloc migrateBloc;
iconEnabledColor: iconEnabledColor,
items: state.availableNodes
.map((item) => DropdownMenuItem(
+ value: item.nodeName,
child: ListTile(
leading: const Icon(
Icons.storage,
subtitle: Text(
'CPU: ${item.renderCpuUsage()}\nMemory: ${item.renderMemoryUsagePercent()}'),
),
- value: item.nodeName,
))
.toList(),
selectedItemBuilder: (context) =>
// you ask why? if not, the height of the dropdown isn't constant
List<Widget> getSelectedItem(List<PveNodesModel> nodes) {
- if (nodes.isNotEmpty)
+ if (nodes.isNotEmpty) {
return nodes
.map((item) => Row(children: [
Text(
)
]))
.toList();
+ }
return [const Text('')];
}
}
class PveMigrateStreamConnector extends StatelessWidget {
final Widget? child;
- const PveMigrateStreamConnector({Key? key, this.child}) : super(key: key);
+ const PveMigrateStreamConnector({super.key, this.child});
@override
Widget build(BuildContext context) {
final mBloc = Provider.of<PveMigrateBloc>(context);
import 'package:proxmox_dart_api_client/proxmox_dart_api_client.dart';
class PveGuestOsSelector extends StatelessWidget {
+ const PveGuestOsSelector({super.key});
+
@override
Widget build(BuildContext context) {
final gBloc = Provider.of<PveGuestOsSelectorBloc>(context);
class PveGuestOverviewHeader extends StatelessWidget {
const PveGuestOverviewHeader({
- Key? key,
+ super.key,
required this.width,
required this.guestID,
required this.guestStatus,
required this.template,
required this.ha,
this.background,
- }) : assert(guestName != null),
- super(key: key);
+ }) : assert(guestName != null);
final double width;
final String guestID;
class PveGuestHeaderRRDPageView extends StatefulWidget {
final BuiltList<PveGuestRRDdataModel>? rrdData;
- PveGuestHeaderRRDPageView({Key? key, this.rrdData}) : super(key: key);
+ const PveGuestHeaderRRDPageView({super.key, this.rrdData});
@override
_PveGuestHeaderRRDPageViewState createState() =>
titleWidth: 150,
titleAlginment: CrossAxisAlignment.end,
title: 'CPU (${rrdData.last.maxcpu ?? '-'})',
- subtitle: (rrdData.last.cpu ?? 0).toStringAsFixed(2) + "%",
+ subtitle: "${(rrdData.last.cpu ?? 0).toStringAsFixed(2)}%",
data: rrdData.where((e) => e.cpu != null).map(
(e) => Point(e.time!.millisecondsSinceEpoch, e.cpu!)),
icon: Icon(Icons.memory, color: fgColor),
final Uri baseUrl;
const PveHelpIconButton({
- Key? key,
+ super.key,
required this.baseUrl,
this.docPath,
- }) : super(key: key);
+ });
@override
Widget build(BuildContext context) {
class PveLxcOptions extends StatelessWidget {
final PveLxcOverviewBloc? lxcBloc;
- const PveLxcOptions({Key? key, this.lxcBloc}) : super(key: key);
+ const PveLxcOptions({super.key, this.lxcBloc});
@override
Widget build(BuildContext context) {
return ProxmoxStreamBuilder<PveLxcOverviewBloc, PveLxcOverviewState>(
);
}
- const PveLxcOverview({Key? key, required this.guestID}) : super(key: key);
+ const PveLxcOverview({super.key, required this.guestID});
@override
Widget build(BuildContext context) {
final lxcBloc = Provider.of<PveLxcOverviewBloc>(context);
leading:
const Icon(FontAwesomeIcons.ethernet),
dense: true,
- title: Text('$net'),
+ title: Text(net),
),
]),
PveResourceDataCardWidget(
class PveLxcPowerSettings extends StatelessWidget {
final PveLxcOverviewBloc? lxcBloc;
- const PveLxcPowerSettings({Key? key, this.lxcBloc}) : super(key: key);
+ const PveLxcPowerSettings({super.key, this.lxcBloc});
@override
Widget build(BuildContext context) {
return ProxmoxStreamBuilder<PveLxcOverviewBloc, PveLxcOverviewState>(
class PveMainNavigationDrawer extends StatelessWidget {
const PveMainNavigationDrawer({
- Key? key,
- }) : super(key: key);
+ super.key,
+ });
@override
Widget build(BuildContext context) {
),
// TODO General new button or distinct ones??
const OutlinedButton(
- child: Text("new CT"),
onPressed: null,
+ child: Text("new CT"),
)
],
),
final String? initialSelection;
const PveNetworkInterfaceModelSelector(
- {Key? key, this.labelText, this.onChange, this.initialSelection})
- : super(key: key);
+ {super.key, this.labelText, this.onChange, this.initialSelection});
@override
_PveNetworkInterfaceModelSelectorState createState() =>
_PveNetworkInterfaceModelSelectorState();
),
items: models.keys
.map((f) => DropdownMenuItem(
- child: Text(models[f]!),
value: f,
+ child: Text(models[f]!),
))
.toList(),
selectedItemBuilder: (context) => models.keys
.map((f) => DropdownMenuItem(
- child: Text(models[f]!),
value: f,
+ child: Text(models[f]!),
))
.toList(),
onChanged: (String? selection) {
final String nodeID;
Icon getServiceStateIcon(BuildContext context, PveNodeServicesModel s) {
- if (s.state == 'running')
+ if (s.state == 'running') {
return Icon(Icons.play_arrow, color: Colors.green[400]);
- else if (s.unitState == 'masked' || s.unitState == 'not-found')
+ } else if (s.unitState == 'masked' || s.unitState == 'not-found')
return Icon(
Icons.play_disabled,
color: IconTheme.of(context).color!.withOpacity(0.75),
return Icon(Icons.stop, color: Theme.of(context).colorScheme.error);
}
- const PveNodeOverview({Key? key, required this.nodeID}) : super(key: key);
+ const PveNodeOverview({super.key, required this.nodeID});
@override
Widget build(BuildContext context) {
final nBloc = Provider.of<PveNodeOverviewBloc>(context);
//backgroundColor: Colors.transparent,
elevation: 0,
title: Text(
- "Node ${nodeID}",
+ "Node $nodeID",
style:
const TextStyle(fontWeight: FontWeight.bold, fontSize: 25),
maxLines: 2,
.map(
(s) => ListTile(
dense: true,
- title: Text('${s.name}'),
- subtitle: Text('${s.desc}'),
+ title: Text(s.name),
+ subtitle: Text(s.desc),
trailing: getServiceStateIcon(context, s),
),
)
.map(
(s) => ListTile(
dense: true,
- title: Text('${s.title}'),
+ title: Text(s.title),
subtitle: Text(
'${s.package}: ${s.oldVersion ?? ''} -> ${s.version}'),
trailing: IconButton(
class PveNodeSelector extends StatelessWidget {
final String? labelText;
- const PveNodeSelector({Key? key, this.labelText}) : super(key: key);
+ const PveNodeSelector({super.key, this.labelText});
@override
Widget build(BuildContext context) {
return DropdownButton(
items: state.availableNodes
.map((item) => DropdownMenuItem(
+ value: item.nodeName,
child: Row(
children: <Widget>[
Text(item.nodeName),
Text(item.renderCpuUsage())
],
),
- value: item.nodeName,
))
.toList(),
selectedItemBuilder: (context) => state.availableNodes
class PveQemuOptions extends StatelessWidget {
final String guestID;
final _formKey = GlobalKey<FormState>();
- PveQemuOptions({Key? key, required this.guestID}) : super(key: key);
+ PveQemuOptions({super.key, required this.guestID});
@override
Widget build(BuildContext context) {
static final routeName = RegExp(r"\/nodes\/(\S+)\/qemu\/(\d+)");
final String guestID;
- const PveQemuOverview({Key? key, required this.guestID}) : super(key: key);
+ const PveQemuOverview({super.key, required this.guestID});
ActionCard createActionCard(String title, IconData icon, Function onTap) {
return ActionCard(
class PveQemuPowerSettings extends StatelessWidget {
const PveQemuPowerSettings({
- Key? key,
- }) : super(key: key);
+ super.key,
+ });
@override
Widget build(BuildContext context) {
final bloc = Provider.of<PveQemuOverviewBloc>(context);
final List<Widget> children;
const PveResourceDataCardWidget({
- Key? key,
+ super.key,
this.showTitleTrailing = false,
required this.title,
this.titleTrailing,
required this.children,
this.padding = const EdgeInsets.all(8.0),
this.expandable = false,
- }) : super(key: key);
+ });
@override
Widget build(BuildContext context) {
final ThemeData theme = Theme.of(context);
import 'package:pve_flutter_frontend/utils/renderers.dart';
class PveResourceOverview extends StatelessWidget {
+ const PveResourceOverview({super.key});
+
@override
Widget build(BuildContext context) {
final rbloc = Provider.of<PveResourceBloc>(context);
final Color onlineColor;
const StatusChip({
- Key? key,
+ super.key,
this.status,
this.fontzsize = 12,
this.fontWeight = FontWeight.normal,
this.offlineColor = Colors.grey,
this.onlineColor = const Color(0xFF21bf4b),
this.intermediateColor = Colors.orange,
- }) : super(key: key);
+ });
@override
Widget build(BuildContext context) {
final DataRenderer? dataRenderer;
const PveRRDChart({
- Key? key,
+ super.key,
this.title,
this.subtitle,
this.data,
this.showDuration = true,
this.bottomRight,
this.dataRenderer,
- }) : super(key: key);
+ });
@override
_PveRRDChartState createState() => _PveRRDChartState();
children: [
Text(
widget.dataRenderer != null
- ? 'max ' + widget.dataRenderer!(globalMaxima)
+ ? 'max ${widget.dataRenderer!(globalMaxima)}'
: 'max $globalMaximaLabel',
style: TextStyle(color: fgColor, fontSize: 11),
),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
- Text('past ' + Renderers.renderDuration(timeWindow),
+ Text('past ${Renderers.renderDuration(timeWindow)}',
style: TextStyle(color: fgColor, fontSize: 11)),
if (widget.bottomRight != null) widget.bottomRight!,
],
import 'package:flutter/material.dart';
class PveSplashScreen extends StatelessWidget {
+ const PveSplashScreen({super.key});
+
@override
Widget build(BuildContext context) {
return Container(
final PveStorageSelectorBloc? sBloc;
final bool allowBlank;
const PveStorageSelectorDropdown({
- Key? key,
+ super.key,
this.labelText,
this.sBloc,
this.allowBlank = true,
- }) : super(key: key);
+ });
@override
Widget build(BuildContext context) {
items: <DropdownMenuItem<PveNodesStorageModel>>[
for (var storage in state.storages)
DropdownMenuItem(
+ value: storage,
child: ListTile(
title: Text(storage.id),
leading: Container(
selected: false,
),
),
- value: storage,
)
],
onChanged: (PveNodesStorageModel? selectedStorage) =>
import 'package:url_launcher/url_launcher.dart';
class PveSubscriptionAlertDialog extends StatelessWidget {
+ const PveSubscriptionAlertDialog({super.key});
+
@override
Widget build(BuildContext context) {
return AlertDialog(
final Color? headerColorExpanded;
final Widget? showMorePage;
const PveTaskExpansionTile({
- Key? key,
+ super.key,
required this.task,
this.showMorePage,
this.errorColor,
this.headerColor,
this.headerColorExpanded,
- }) : super(key: key);
+ });
final PveClusterTasksModel task;
),
ListTile(
leading: const Icon(Icons.description),
- title: Text("${widget.task.status}"),
+ title: Text(widget.task.status),
dense: true,
subtitle: const Text('Shortlog'),
),
import 'package:pve_flutter_frontend/widgets/pve_task_log_expansiontile_widget.dart';
class PveTaskLog extends StatefulWidget {
- PveTaskLog({Key? key}) : super(key: key);
+ const PveTaskLog({super.key});
@override
_PveTaskLogState createState() => _PveTaskLogState();
final Widget jobTitle;
const PveTaskLogScrollView({
- Key? key,
+ super.key,
required this.icon,
required this.jobTitle,
- }) : super(key: key);
+ });
@override
_PveTaskLogScrollViewState createState() => _PveTaskLogScrollViewState();
}
class _PveTaskLogScrollViewState extends State<PveTaskLogScrollView> {
- ScrollController _scrollController = new ScrollController();
+ ScrollController _scrollController = ScrollController();
@override
void initState() {
super.initState();
class PveVmNameWidget extends StatelessWidget {
final String labelText;
- const PveVmNameWidget({Key? key, this.labelText = 'Name'}) : super(key: key);
+ const PveVmNameWidget({super.key, this.labelText = 'Name'});
@override
Widget build(BuildContext context) {
final vBloc = Provider.of<PveVmNameBloc>(context);