in ui/lib/modules/my_services/service_detail.dart [154:239]
Widget _buildDetailsSection(Service service, BuildContext context) {
return Column(
children: [
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
// << SERVICE SUMMARY >>
ServiceSummary(service: service),
],
),
Row(
crossAxisAlignment: CrossAxisAlignment.center,
children: [
// << REPO LINK >>
SummaryItem(
label: "Repository",
child: Text.rich(
TextSpan(
style: TextStyle(
color: Theme.of(context).primaryColor,
decoration: TextDecoration.underline),
text: service.instanceRepo,
recognizer: TapGestureRecognizer()
..onTap = () async {
launchUrl(Uri.parse(service.instanceRepo));
},
),
),
),
],
),
Divider(),
// << CLOUD SHELL || WORKSTATION BUTTON >>
service.workstationConfig.isNotEmpty
? WorkStationWidget(service)
: LaunchInCloudShellButton(service: service),
Divider(),
// << VULNERABILITIES >>
VulnerabilityWidget(service: service),
Divider(),
// << RECOMMENDATIONS >>
if (_serviceUses(service, ["cloudrun"]))
RecommendationsWidget(service: service),
Divider(),
// << BUILD HISTORY >>
BuildHistoryWidget(service: service),
// << RESOURCES >>
ServiceResourcesWidget(service: service),
// << TEMPLATE DETAILS >>
TemplateDetailsWidget(service: service),
Divider(),
// << DELETE BUTTON >>
IconButton(
tooltip: 'Delete',
onPressed: () async {
String result = await ref
.read(buildRepositoryProvider)
.deleteService(service);
if (result != "") {
await ref
.read(servicesRepositoryProvider)
.deleteService(service);
ref.invalidate(servicesProvider);
}
context.go("/services");
},
icon: Icon(
Icons.delete,
color: Colors.red,
),
),
],
);
}