Implemented systematic type safety improvements across the codebase to eliminate all 78 strict analysis errors: ## Phase 1: Quick Wins (Redux & Model Fixes) - Added explicit type annotations to Redux reducer parameters - Fixed copyWith() methods in FireNotification and YourLocation models with proper nullable types - Fixed BasicLocation field initializers with type casts (num to double) - Fixed context parameter inference in IntroPage and PrivacyPage - Regenerated .g.dart files with build_runner ## Phase 2: JSON Deserialization - Fixed homePage.dart Firebase message parameter casting (9 errors) - Fixed firesApi.dart JSON parsing: - Added explicit casts for num to double/int conversions - Fixed array iteration with proper List<dynamic> casting - Added return type annotation to objectIdFromJson() - Fixed nested JSON access in getMonitoredAreas() - Fixed globalFiresBottomStats.dart dynamic to int/String casting - Fixed locationUtils.dart string assignments ## Phase 3: Config & Redux Middleware - Fixed mainCommon.dart config map access with explicit String casts - Fixed mainProd.dart Sentry DSN casting - Fixed fetchDataMiddleware.dart: - Added Store<AppState>, String type annotations to createUser() - Added Function(YourLocation) type to subscribeViaApi callback - Added Exception type to catchError handler - Fixed fireMapReducer.dart restoreStatusAfterSave parameter type - Fixed persist files with Map<String, dynamic> type annotations ## Phase 4: Edge Cases - Fixed slider.dart method return types (Widget sizeText, Widget warningText) - Fixed mainDrawer.dart Key? parameter type annotation Result: 78 errors → 0 errors
86 lines
2.4 KiB
Dart
86 lines
2.4 KiB
Dart
import 'package:fires_flutter/objectIdUtils.dart';
|
|
import 'package:json_annotation/json_annotation.dart';
|
|
import 'package:objectid/objectid.dart';
|
|
|
|
part 'yourLocation.g.dart';
|
|
|
|
@JsonSerializable(nullable: false)
|
|
class YourLocation {
|
|
@JsonKey(toJson: objectIdToJson, fromJson: objectIdFromJson)
|
|
ObjectId id;
|
|
final double lat;
|
|
final double lon;
|
|
String description;
|
|
bool subscribed;
|
|
int distance;
|
|
late int currentNumFires;
|
|
|
|
factory YourLocation.fromJson(Map<String, dynamic> json) =>
|
|
_$YourLocationFromJson(json);
|
|
|
|
static late final YourLocation noLocation;
|
|
static const int? withoutStats = null;
|
|
|
|
static void _initNoLocation() {
|
|
noLocation = new YourLocation(
|
|
id: ObjectId(), lat: 0.0, lon: 0.0, description: '', subscribed: false);
|
|
}
|
|
|
|
YourLocation(
|
|
{required this.id,
|
|
required this.lat,
|
|
required this.lon,
|
|
this.description = '',
|
|
this.distance = 10,
|
|
int? currentNumFires,
|
|
this.subscribed = false}) {
|
|
this.currentNumFires = currentNumFires ?? 0;
|
|
}
|
|
Map<String, dynamic> toJson() => _$YourLocationToJson(this);
|
|
|
|
YourLocation copyWith(
|
|
{ObjectId? id,
|
|
double? lat,
|
|
double? lon,
|
|
String? description,
|
|
int? distance,
|
|
int? currentNumFires,
|
|
bool? subscribed}) {
|
|
return new YourLocation(
|
|
id: id ?? this.id,
|
|
lat: lat ?? this.lat,
|
|
lon: lon ?? this.lon,
|
|
description: description ?? this.description,
|
|
distance: distance ?? this.distance,
|
|
currentNumFires: currentNumFires ?? this.currentNumFires,
|
|
subscribed: subscribed ?? this.subscribed);
|
|
}
|
|
|
|
@override
|
|
bool operator ==(Object other) =>
|
|
identical(this, other) ||
|
|
other is YourLocation &&
|
|
runtimeType == other.runtimeType &&
|
|
id == other.id &&
|
|
lat == other.lat &&
|
|
lon == other.lon &&
|
|
description == other.description &&
|
|
subscribed == other.subscribed &&
|
|
currentNumFires == other.currentNumFires &&
|
|
distance == other.distance;
|
|
|
|
@override
|
|
int get hashCode =>
|
|
id.hashCode ^
|
|
lat.hashCode ^
|
|
lon.hashCode ^
|
|
description.hashCode ^
|
|
subscribed.hashCode ^
|
|
currentNumFires.hashCode ^
|
|
distance.hashCode;
|
|
|
|
@override
|
|
String toString() {
|
|
return 'YourLocation {id: $id, lat: $lat, lon: $lon, description: $description, subscribed: $subscribed, distance: $distance, currentNumFires: $currentNumFires}';
|
|
}
|
|
}
|