|
| 1 | +# Scuba Tank Icon Replacement |
| 2 | + |
| 3 | +**Issue:** [submersion-app/submersion#109](https://github.com/submersion-app/submersion/issues/109) |
| 4 | +**Date:** 2026-03-31 |
| 5 | + |
| 6 | +## Problem |
| 7 | + |
| 8 | +The current tank icon (`Icons.propane_tank`) resembles a BBQ propane tank rather |
| 9 | +than a scuba tank. This is a cosmetic issue that affects the app's domain |
| 10 | +authenticity for divers. |
| 11 | + |
| 12 | +## Solution |
| 13 | + |
| 14 | +Replace `Icons.propane_tank` with `MdiIcons.divingScubaTank` from the |
| 15 | +`material_design_icons_flutter` package. This icon is designed in Material Design |
| 16 | +style and depicts an actual scuba tank. |
| 17 | + |
| 18 | +## Approach: MDI Community Package |
| 19 | + |
| 20 | +The `material_design_icons_flutter` package is the community extension of |
| 21 | +Google's Material Design icon set. It provides 7000+ icons following the same |
| 22 | +design language. Flutter tree-shakes unused glyphs, so bundle size impact is |
| 23 | +minimal. |
| 24 | + |
| 25 | +## Changes |
| 26 | + |
| 27 | +### 1. Add Dependency |
| 28 | + |
| 29 | +Add `material_design_icons_flutter` to `pubspec.yaml` under `dependencies`. |
| 30 | + |
| 31 | +### 2. Replace Icon References (~21 locations) |
| 32 | + |
| 33 | +Replace all `Icons.propane_tank` references with `MdiIcons.divingScubaTank`. |
| 34 | + |
| 35 | +**Affected files:** |
| 36 | + |
| 37 | +| File | Context | |
| 38 | +|------|---------| |
| 39 | +| `lib/features/tank_presets/presentation/pages/tank_presets_page.dart` | Tank list icons (filled + outlined toggle) | |
| 40 | +| `lib/features/statistics/presentation/pages/statistics_gas_page.dart` | Gas statistics section icons | |
| 41 | +| `lib/features/dive_planner/presentation/widgets/plan_tank_list.dart` | Dive planner tank list | |
| 42 | +| `lib/features/dive_planner/presentation/widgets/gas_results_panel.dart` | Gas results display | |
| 43 | +| `lib/features/dive_log/presentation/widgets/cylinder_sac_card.dart` | Per-cylinder SAC metrics | |
| 44 | +| `lib/features/dive_log/presentation/pages/dive_search_page.dart` | Search filter icons | |
| 45 | +| `lib/features/dive_log/presentation/pages/dive_detail_page.dart` | Dive detail tank sections | |
| 46 | +| `lib/features/dive_log/presentation/pages/dive_edit_page.dart` | Dive edit tank sections | |
| 47 | +| `lib/features/equipment/presentation/widgets/equipment_list_content.dart` | Equipment type icon mapping | |
| 48 | +| `lib/features/equipment/presentation/pages/equipment_detail_page.dart` | Equipment detail icon mapping | |
| 49 | +| `lib/features/equipment/presentation/pages/equipment_set_detail_page.dart` | Equipment set detail icon mapping | |
| 50 | +| `lib/features/equipment/presentation/pages/equipment_set_edit_page.dart` | Equipment set edit icon mapping | |
| 51 | +| `lib/features/settings/presentation/pages/appearance_page.dart` | Settings icon | |
| 52 | +| `lib/features/settings/presentation/pages/settings_page.dart` | Settings icon | |
| 53 | + |
| 54 | +### 3. Outlined Variant Handling |
| 55 | + |
| 56 | +The tank presets page toggles between `Icons.propane_tank` and |
| 57 | +`Icons.propane_tank_outlined` based on edit state. If MDI does not provide a |
| 58 | +separate outlined variant of `divingScubaTank`, use the filled variant in both |
| 59 | +states -- the edit/view state is already conveyed by other UI cues. |
| 60 | + |
| 61 | +### 4. Event Icon String |
| 62 | + |
| 63 | +Update the `eventIconName` string for `ProfileEventType.lowGas` in |
| 64 | +`lib/core/constants/enums.dart` from `'propane_tank'` to `'diving_scuba_tank'` |
| 65 | +for consistency. This string is used as a label reference on profile chart event |
| 66 | +markers, not resolved to `IconData`. |
| 67 | + |
| 68 | +## Out of Scope |
| 69 | + |
| 70 | +- Replacing any other Material icons with MDI equivalents |
| 71 | +- Creating custom icon variants (outlined, rounded, sharp) |
| 72 | +- Adding additional dive-specific icons beyond the tank |
0 commit comments