🔧

FincaApp — Resolución de Errores de Build Flutter

fincaapp · Flutter 3.22 · Dart 3.4 · rama: feature/parcelas-null-safety

BUILD SUCCESS
7
Errores detectados
7
Errores resueltos
6
Archivos modificados
✓ SUCCESS
Estado final build
Flujo de resolución
1
flutter analyze
2
Leer archivos
3
Aplicar fixes
4
Verificar
5
flutter test
Correcciones aplicadas (7/7)
lib/features/parcelas/domain/parcela.dart línea 18
assign_local_variable
La variable superficie no nullable no se inicializaba antes de ser usada en el constructor factory. Se añade valor por defecto 0.0.
parcela.dart
factory Parcela.fromJson(Map<String, dynamic> json) {
- double superficie;
+ double superficie = 0.0;
if (json['superficie'] != null) {
superficie = (json['superficie'] as num).toDouble();
}
lib/features/parcelas/data/parcela_repository.dart línea 34
invalid_assignment — null safety
response.data['municipio'] retorna String? pero Parcela.municipio es String. Se añade fallback con ?? en lugar de bang operator.
parcela_repository.dart
final parcela = Parcela(
- municipio: response.data['municipio'],
+ municipio: response.data['municipio'] ?? 'Sin municipio',
superficie: response.data['superficie'],
);
lib/features/parcelas/data/parcela_repository.dart línea 51
undefined_function — build_runner stale
ParcelaModelFromJson no existe: el archivo parcela_model.g.dart estaba desactualizado. Se borra el .g.dart obsoleto y se regenera con build_runner.
terminal — regeneración
$ rm lib/features/parcelas/data/parcela_model.g.dart
+ $ dart run build_runner build --delete-conflicting-outputs
+ # Generado: parcela_model.g.dart (parcelaModelFromJson, ParcelaModel)
# import corregido en parcela_repository.dart:
- import 'package:fincaapp/features/parcelas/data/parcela_model.g.dart';
+ import 'parcela_model.g.dart'; // relative import, siempre coherente
lib/features/dashboard/ui/dashboard_screen.dart línea 88
argument_type_not_assignable — List<dynamic> → List<Parcela>
El result de la query Supabase se infería como List<dynamic>. Se añade cast explícito con .map().toList() respetando el tipo estático.
dashboard_screen.dart
final result = await supabase.from('parcelas').select();
- _renderMap(parcelas: result);
+ final parcelas = (result as List)
+ .map((e) => Parcela.fromJson(e as Map<String, dynamic>))
+ .toList();
+ _renderMap(parcelas: parcelas);
!
pubspec.yaml conflicto de versiones
pubspec_dependency_conflict
freezed ≥2.5.2 requerido por el proyecto pero supabase_flutter 2.3.0 requiere freezed <2.5.0. Solución: actualizar supabase_flutter a ^2.5.1 que permite freezed ^2.5.x.
pubspec.yaml — dependencies
freezed_annotation: ^2.5.2
- supabase_flutter: ^2.3.0
+ supabase_flutter: ^2.5.1
go_router: ^14.2.7
# dev_dependencies
- freezed: ^2.5.2
+ freezed: ^2.5.7
lib/features/auth/data/auth_service.dart línea 72
await_only_futures
AuthResponse de Supabase ya no es Future en la versión actualizada — es síncrono. Se elimina el await innecesario.
auth_service.dart
Future<void> signIn(String email, String password) async {
- final response = await supabase.auth.currentSession;
+ final response = supabase.auth.currentSession;
if (response == null) throw AuthException('No session');
}
lib/features/parcelas/ui/mapa_parcelas_widget.dart línea 115
not_initialized_non_nullable_instance_field
El campo markersLayer de tipo MarkersLayer no se inicializaba en la declaración ni en el constructor. Se marca como late — se garantiza inicialización en initState() antes de cualquier uso.
mapa_parcelas_widget.dart
class _MapaParcelasWidgetState extends State<MapaParcelasWidget> {
- MarkersLayer markersLayer;
+ late MarkersLayer markersLayer;
@override
void initState() {
super.initState();
+ markersLayer = MarkersLayer(markers: []);
}
Verificación post-fix
$ flutter pub get
Running "flutter pub get" in fincaapp...
Resolving dependencies... (2.3s)
Got dependencies!

$ dart run build_runner build --delete-conflicting-outputs
[INFO] Generating build script...
[INFO] Running build...
[INFO] 3 actions completed successfully.

$ flutter analyze
Analyzing fincaapp...
No issues found! (ran in 3.1s)

$ flutter test
00:02 +0: loading lib/features/parcelas/domain/parcela_test.dart
00:08 +24: All tests passed!

$ flutter build ipa --no-codesign
Running pod install...
Running Xcode build...
Built build/ios/archive/Runner.xcarchive (41.2s)

Build Status: SUCCESS

Todos los errores resueltos con cambios mínimos y quirúrgicos.
IPA listo para subir a TestFlight. Sin tests rotos. Sin suppressions.

7
Errores fixed
6
Archivos
24
Tests OK