Widget build()

in ui/lib/modules/my_services/widgets/workstation_widget.dart [38:213]


  Widget build(BuildContext context) {
    final user = ref.read(authRepositoryProvider).currentUser()!;
    final ldap = user.email.toString().split('@')[0];
    final email = user.email;

    List<Widget> children = [];

    final workstationsList = ref.watch(workstationsProvider(
      projectId: widget.service.projectId,
      clusterName: widget.service.workstationCluster,
      configName: widget.service.workstationConfig,
      region: widget.service.region,
    ));

    workstationsList.when(
      loading: () => Text('Loading...'),
      error: (err, stack) => Text('Error: $err'),
      data: (wrkList) {
        wrkList.forEach((wkstn) {
          if (wkstn.name.contains(ldap)) {
            children.add(Row(
              mainAxisAlignment: MainAxisAlignment.start,
              children: [
                _getStatusIcon(workstation: wkstn),
                SizedBox(width: 15),
                Text(wkstn.displayName),
                SizedBox(width: 15),
                _getActionButton(
                    workstation: wkstn, context: context, ref: ref),
                SizedBox(width: 15),
                wkstn.state.contains("RUNNING")
                    ? ElevatedButton(
                        style: ElevatedButton.styleFrom(
                          padding: EdgeInsets.all(0),
                        ),
                        onPressed: () async {
                          launchUrl(Uri.parse("https://80-${wkstn.host}"));
                        },
                        child: Text(
                          "Launch",
                          style: TextStyle(fontSize: 12),
                        ),
                      )
                    : Container(),
                SizedBox(width: 15),
                wkstn.state.isNotEmpty
                    ? ElevatedButton(
                        style: ElevatedButton.styleFrom(
                          padding: EdgeInsets.all(0),
                        ),
                        onPressed: () async {
                          await ref
                              .watch(cloudWorkstationsRepositoryProvider)
                              .deleteInstance(
                                  widget.service.projectId,
                                  wkstn.clusterName,
                                  wkstn.configName,
                                  wkstn.displayName,
                                  widget.service.region);

                          await ref
                              .watch(cloudWorkstationsRepositoryProvider)
                              .checkInstanceStatus(widget.service.projectId,
                              wkstn.clusterName,
                              wkstn.configName,
                              wkstn.displayName,
                              widget.service.region);


                          ref.invalidate(workstationsProvider);
                        },
                        child: Text(
                          "Delete",
                          style: TextStyle(fontSize: 12),
                        ),
                      )
                    : Container(),
              ],
            ));
          }
        });
        if (children.length == 0) {
          children.add(SizedBox(
            height: 5,
          ));
          children.add(
              Text("No workstations found for this user config combination"));
          children.add(SizedBox(
            height: 5,
          ));
          children.add(
            InkWell(
              onTap: () async {

                Response response = await ref
                    .watch(cloudWorkstationsRepositoryProvider)
                    .checkInstanceStatus(widget.service.projectId,

                    widget.service.workstationCluster,
                    widget.service.workstationConfig,
                    "${ldap}-${widget.service.workstationConfig}",
                    widget.service.region);


                if (response.statusCode == 404) {
                  await ref
                      .watch(cloudWorkstationsRepositoryProvider)
                      .createInstance(
                      widget.service.projectId,
                      widget.service.workstationCluster,
                      widget.service.workstationConfig,
                      "${ldap}-${widget.service.workstationConfig}",
                      widget.service.region,
                      email!);

                  ref.invalidate(workstationsProvider);
                } else {
                  ScaffoldMessenger.of(context).showSnackBar(
                    SnackBar(
                      content: Text("Workstation is in reconciling state."),
                      backgroundColor: Theme.of(context).primaryColor,
                    ),
                  );
                }
              },
              child: Row(
                children: [
                  Icon(
                    Icons.add_box,
                    color: Theme.of(context).primaryColor,
                  ),
                  Text(
                    "Create Workstation",
                    style: Theme.of(context).textTheme.bodyMedium?.merge(
                          TextStyle(
                            color: Theme.of(context).primaryColor,
                          ),
                        ),
                  ),
                  SizedBox(
                    width: 20,
                  ),
                ],
              ),
            ),
          );
        }
        ;
      },
    );

    children.insert(
        0,
        Row(
          children: [
            Text(
              "Related Workstations",
              style: Theme.of(context).textTheme.titleMedium,
            ),
            IconButton(
              tooltip: 'Refresh',
              onPressed: () async {
                ref.invalidate(workstationsProvider);
              },
              icon: Icon(
                Icons.refresh,
                color: Colors.blue,
              ),
            ),
          ],
        ));
    return Column(
      crossAxisAlignment: CrossAxisAlignment.start,
      children: children,
    );
  }