fix(favoritos): stop the header padding from doubling up
Issue 3 (feedback-pruebas): ReorderableListView.padding wrapped header/rows/footer with a single horizontal value (16), which doubled up on top of PluriRootHeader's own internal inset -- landing the title at 36px instead of the 20px every other root uses -- while also applying card-tier padding to the flat FilaEmisoraPlana rows (row tier, matching the same widget's fix on Buscar) and leaving the populated-state top gap at an unwired 4 that didn't match this same screen's own empty state (0) or the footer CTA's prototype value (8). Zeroes the list-level padding and gives the header, chip strip, rows, and footer CTA their own correctly-tiered insets instead.
This commit is contained in:
@@ -7,7 +7,9 @@ import 'package:pluriwave/l10n/gen/app_localizations.dart';
|
||||
import 'package:pluriwave/pantallas/ajustes/pantalla_ajustes_grupos_favoritos.dart';
|
||||
import 'package:pluriwave/pantallas/pantalla_favoritos.dart';
|
||||
import 'package:pluriwave/widgets/fila_emisora_plana.dart';
|
||||
import 'package:pluriwave/widgets/pluri_layout.dart';
|
||||
import 'package:pluriwave/widgets/pluri_push_scaffold.dart';
|
||||
import 'package:pluriwave/widgets/pluri_root_header.dart';
|
||||
import 'package:pluriwave/widgets/tarjeta_emisora.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
import 'package:shared_preferences/shared_preferences.dart';
|
||||
@@ -546,6 +548,106 @@ void main() {
|
||||
expect(inactivo.backgroundColor, const Color(0xFF102532));
|
||||
});
|
||||
});
|
||||
|
||||
group('Issue 3 (feedback-pruebas): spacing tiers', () {
|
||||
testWidgets('the header title sits at title-tier inset (20px) -- '
|
||||
'ReorderableListView.padding used to double up on top of '
|
||||
"PluriRootHeader's own internal inset", (tester) async {
|
||||
setLargeSurface(tester);
|
||||
_suppressListTileInkAssertion();
|
||||
final estado = await crearEstadoConFavoritos();
|
||||
addTearDown(estado.dispose);
|
||||
final l10n = lookupAppLocalizations(const Locale('en'));
|
||||
|
||||
await tester.pumpWidget(buildScreen(estado));
|
||||
await pumpStable(tester);
|
||||
|
||||
final titulo = find.descendant(
|
||||
of: find.byType(PluriRootHeader),
|
||||
matching: find.text(l10n.favoritesTitle),
|
||||
);
|
||||
expect(
|
||||
tester.getTopLeft(titulo).dx,
|
||||
PluriLayout.titleHorizontal,
|
||||
reason:
|
||||
'PluriRootHeader already supplies its own 20px inset; the '
|
||||
'previous ReorderableListView.padding of 16 doubled up on top '
|
||||
'of it, landing the title at 36px instead of 20px -- the ONE '
|
||||
"root screen whose header didn't match Alarmas/Ajustes",
|
||||
);
|
||||
});
|
||||
|
||||
testWidgets(
|
||||
'the header sits at the SAME horizontal position whether the list is '
|
||||
'empty or populated -- two mutually-exclusive states of the same '
|
||||
'header must not read differently',
|
||||
(tester) async {
|
||||
setLargeSurface(tester);
|
||||
final l10n = lookupAppLocalizations(const Locale('en'));
|
||||
|
||||
final vacio = await crearEstadoVacio();
|
||||
addTearDown(vacio.dispose);
|
||||
await tester.pumpWidget(buildScreen(vacio));
|
||||
await pumpStable(tester);
|
||||
final dxVacio =
|
||||
tester
|
||||
.getTopLeft(
|
||||
find.descendant(
|
||||
of: find.byType(PluriRootHeader),
|
||||
matching: find.text(l10n.favoritesTitle),
|
||||
),
|
||||
)
|
||||
.dx;
|
||||
|
||||
_suppressListTileInkAssertion();
|
||||
final conFavoritos = await crearEstadoConFavoritos();
|
||||
addTearDown(conFavoritos.dispose);
|
||||
await tester.pumpWidget(buildScreen(conFavoritos));
|
||||
await pumpStable(tester);
|
||||
final dxConFavoritos =
|
||||
tester
|
||||
.getTopLeft(
|
||||
find.descendant(
|
||||
of: find.byType(PluriRootHeader),
|
||||
matching: find.text(l10n.favoritesTitle),
|
||||
),
|
||||
)
|
||||
.dx;
|
||||
|
||||
expect(
|
||||
dxConFavoritos,
|
||||
dxVacio,
|
||||
reason:
|
||||
'the empty and populated branches of this screen must render '
|
||||
'the SAME header inset -- they previously did not (0 vs 16 '
|
||||
'extra px of list-level padding)',
|
||||
);
|
||||
},
|
||||
);
|
||||
|
||||
testWidgets(
|
||||
'each favourite row uses row-tier horizontal inset (12), not the '
|
||||
'card-tier constant a background-less row was never meant to carry',
|
||||
(tester) async {
|
||||
setLargeSurface(tester);
|
||||
_suppressListTileInkAssertion();
|
||||
final estado = await crearEstadoConFavoritos();
|
||||
addTearDown(estado.dispose);
|
||||
|
||||
await tester.pumpWidget(buildScreen(estado));
|
||||
await pumpStable(tester);
|
||||
|
||||
expect(
|
||||
tester.getTopLeft(find.byType(FilaEmisoraPlana).first).dx,
|
||||
PluriLayout.rowHorizontal,
|
||||
reason:
|
||||
'audit 4.3: background-less rows are row tier (12), matching '
|
||||
'the same widget already fixed on Buscar -- not card tier '
|
||||
'(16)',
|
||||
);
|
||||
},
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
void setLargeSurface(WidgetTester tester) {
|
||||
|
||||
Reference in New Issue
Block a user