import 'package:flutter/material.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart'; enum ServerTabMenuType { terminal, sftp, docker, process, pkg, snippet, ; IconData get icon { switch (this) { case ServerTabMenuType.sftp: return Icons.insert_drive_file; case ServerTabMenuType.snippet: return Icons.code; case ServerTabMenuType.pkg: return Icons.system_security_update; case ServerTabMenuType.docker: return Icons.view_agenda; case ServerTabMenuType.process: return Icons.list_alt_outlined; case ServerTabMenuType.terminal: return Icons.terminal; } } } enum DockerMenuType { start, stop, restart, rm, logs, terminal, //stats, ; static List items(bool running) { if (running) { return [ stop, restart, rm, logs, terminal, //stats, ]; } else { return [start, rm, logs]; } } IconData get icon { switch (this) { case DockerMenuType.start: return Icons.play_arrow; case DockerMenuType.stop: return Icons.stop; case DockerMenuType.restart: return Icons.restart_alt; case DockerMenuType.rm: return Icons.delete; case DockerMenuType.logs: return Icons.logo_dev; case DockerMenuType.terminal: return Icons.terminal; // case DockerMenuType.stats: // return Icons.bar_chart; } } String text(S s) { switch (this) { case DockerMenuType.start: return s.start; case DockerMenuType.stop: return s.stop; case DockerMenuType.restart: return s.restart; case DockerMenuType.rm: return s.delete; case DockerMenuType.logs: return s.log; case DockerMenuType.terminal: return s.terminal; // case DockerMenuType.stats: // return s.stats; } } PopupMenuItem build(S s) => _build(this, icon, text(s)); } PopupMenuItem _build(T t, IconData icon, String text) { return PopupMenuItem( value: t, child: Row( children: [ Icon(icon), const SizedBox( width: 10, ), Text(text), ], ), ); }