Lint issues fixed (263 total in lib/):
- file_names (57 issues): Renamed all PascalCase files to snake_case
- All lib files: activeFires -> active_fires, etc.
- All models: appState -> app_state, fireMapState -> fire_map_state, etc.
- All redux files: appActions -> app_actions, appReducer -> app_reducer, etc.
- Updated all import statements and exports across the codebase
- Fixed unused imports, exports, and references in rebuilt modules
Style fixes (16 issues):
- prefer_generic_function_type_aliases (2): Updated typedef syntax from old to new
- unnecessary_nullable_for_final_variable_declarations (2): Removed ? from non-nullable types
- unnecessary_import: Removed duplicate meta/meta import
- unnecessary_parenthesis: Removed unnecessary parentheses in expressions
- avoid_renaming_method_parameters: Renamed parameter 'o' to 'other'
- prefer_const_declarations: Changed final to const for constant values
- use_key_in_widget_constructors (3): Added key parameters to widget constructors
- sort_child_properties_last (1): Reordered children property to end
Verification:
- APK builds successfully (146 MB)
- Reduced from 106 lint issues to 49 high-priority issues
- Total file_names issues: 0 (down from 57)
- All imports and exports updated correctly
- Type dynamic map accesses properly (avoid_dynamic_calls in genericMap, globalFiresBottomStats)
- Capture context before async gaps (use_build_context_synchronously in genericMap, genericMapBottom, globalFiresBottomStats)
- Replace print() with debugPrint() (avoid_print in firesApi.dart)
- Rename fireMarker function and _LayerSelectorButton to camelCase
- Rename variable FireNotifications to fireNotifications
- Fix no_default_cases in switch statements (add missing subscriptionConfirm case)
- Make FireNotification fields final, remove @immutable from YourLocation (mutable)
- Make monitoredAreas field final in _ViewModel
- Update subscribeViaApi to use copyWith instead of direct field assignment
- Add new CompassMapPluginWidget for map north alignment control
- Position compass button at top-right of maps
- Reset rotation to 0° while maintaining center and zoom level
- Improve UX by allowing users to easily return to north orientation
- Integrate compass into both genericMap and monitoredAreas pages
CartoDB Positron (light_all) is a modern, reliable replacement for the
deprecated Stamen Toner and tiles.wmflabs.org. It provides a clean
grayscale/minimalist map style with excellent availability.
- Updated FireMapLayer.osmcGrey to use CartoDB Positron
- Updated monitoredAreas TileLayer to use CartoDB Positron
- Keeps subdomains configuration for load distribution
- Fixes: Unreliable tile server DNS issues
tiles.wmflabs.org was causing DNS resolution failures on the device/emulator
(No address associated with hostname, errno = 7). Replaced with the official
OpenStreetMap tile server (tile.openstreetmap.org) which is more stable and reliable.
Removed subdomains configuration as it's not needed for the official OSM server.
- Updated FireMapLayer.osmcGrey in genericMap.dart
- Updated TileLayer in monitoredAreas.dart
- Fixes: Map tiles not loading due to network/DNS issues
Maps were not rendering in flutter_map v6.2.1 because TileLayer was missing the
required userAgentPackageName property. This property is needed for proper
HTTP requests to tile servers with correct User-Agent headers.
- Updated TileLayer in genericMap.dart with userAgentPackageName
- Updated TileLayer in monitoredAreas.dart with userAgentPackageName
- Fixes: Maps not displaying tiles after flutter_map v6 migration