From 53f8f4f8e6b9c17884a626365ab40da526fd7b38 Mon Sep 17 00:00:00 2001 From: Renzo Olivares Date: Thu, 25 Jun 2026 00:53:30 +0000 Subject: [PATCH 1/3] Migrate nav_bar_test.dart to SemanticsHandle --- .../nav_bar_test.dart | 41 ++++++------------- 1 file changed, 12 insertions(+), 29 deletions(-) rename packages/cupertino_ui/{temporarily_disabled_tests => test}/nav_bar_test.dart (99%) diff --git a/packages/cupertino_ui/temporarily_disabled_tests/nav_bar_test.dart b/packages/cupertino_ui/test/nav_bar_test.dart similarity index 99% rename from packages/cupertino_ui/temporarily_disabled_tests/nav_bar_test.dart rename to packages/cupertino_ui/test/nav_bar_test.dart index fc5cf5865f80..e25c6e2908fe 100644 --- a/packages/cupertino_ui/temporarily_disabled_tests/nav_bar_test.dart +++ b/packages/cupertino_ui/test/nav_bar_test.dart @@ -2,9 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -@Skip( - 'This file is skipped due to a cross-import that needs to be fixed. Tracked in https://github.com/flutter/flutter/issues/177028.', -) // This file is run as part of a reduced test set in CI on Mac and Windows // machines. @Tags(['reduced-test-set']) @@ -15,8 +12,6 @@ import 'package:flutter/rendering.dart'; import 'package:flutter/services.dart'; import 'package:flutter_test/flutter_test.dart'; -import '../widgets/semantics_tester.dart'; - int count = 0; void setWindowToPortrait(WidgetTester tester, {Size size = const Size(2400.0, 3000.0)}) { @@ -1078,7 +1073,7 @@ void main() { }); testWidgets('CupertinoSliverNavigationBar has semantics', (WidgetTester tester) async { - final semantics = SemanticsTester(tester); + final SemanticsHandle handle = tester.ensureSemantics(); await tester.pumpWidget( const CupertinoApp( @@ -1093,19 +1088,15 @@ void main() { ); expect( - semantics.nodesWith( - label: 'Large Title', - flags: [SemanticsFlag.isHeader], - textDirection: TextDirection.ltr, - ), - hasLength(1), + tester.getSemantics(find.text('Large Title')), + isSemantics(label: 'Large Title', isHeader: true, textDirection: TextDirection.ltr), ); - semantics.dispose(); + handle.dispose(); }); testWidgets('CupertinoNavigationBar has semantics', (WidgetTester tester) async { - final semantics = SemanticsTester(tester); + final SemanticsHandle handle = tester.ensureSemantics(); await tester.pumpWidget( CupertinoApp( @@ -1117,19 +1108,15 @@ void main() { ); expect( - semantics.nodesWith( - label: 'Fixed Title', - flags: [SemanticsFlag.isHeader], - textDirection: TextDirection.ltr, - ), - hasLength(1), + tester.getSemantics(find.text('Fixed Title')), + isSemantics(label: 'Fixed Title', isHeader: true, textDirection: TextDirection.ltr), ); - semantics.dispose(); + handle.dispose(); }); testWidgets('Large CupertinoNavigationBar has semantics', (WidgetTester tester) async { - final semantics = SemanticsTester(tester); + final SemanticsHandle handle = tester.ensureSemantics(); await tester.pumpWidget( CupertinoApp( @@ -1141,15 +1128,11 @@ void main() { ); expect( - semantics.nodesWith( - label: 'Fixed Title', - flags: [SemanticsFlag.isHeader], - textDirection: TextDirection.ltr, - ), - hasLength(1), + tester.getSemantics(find.text('Fixed Title')), + isSemantics(label: 'Fixed Title', isHeader: true, textDirection: TextDirection.ltr), ); - semantics.dispose(); + handle.dispose(); }); testWidgets('Border can be overridden in sliver nav bar', (WidgetTester tester) async { From 0f7ab844472138810168a9d07a7cbb241174aad1 Mon Sep 17 00:00:00 2001 From: Renzo Olivares Date: Thu, 25 Jun 2026 01:55:10 +0000 Subject: [PATCH 2/3] use unawaited --- packages/cupertino_ui/test/nav_bar_test.dart | 311 ++++++++++--------- 1 file changed, 170 insertions(+), 141 deletions(-) diff --git a/packages/cupertino_ui/test/nav_bar_test.dart b/packages/cupertino_ui/test/nav_bar_test.dart index e25c6e2908fe..6545c298ac71 100644 --- a/packages/cupertino_ui/test/nav_bar_test.dart +++ b/packages/cupertino_ui/test/nav_bar_test.dart @@ -7,6 +7,7 @@ @Tags(['reduced-test-set']) library; +import 'dart:async'; import 'package:cupertino_ui/cupertino_ui.dart'; import 'package:flutter/rendering.dart'; import 'package:flutter/services.dart'; @@ -53,15 +54,17 @@ void main() { const CupertinoApp(home: CupertinoNavigationBar(middle: Text('Title'))), ); - tester - .state(find.byType(Navigator)) - .push( - CupertinoPageRoute( - builder: (BuildContext context) { - return const CupertinoNavigationBar(middle: Text('Page 2')); - }, + unawaited( + tester + .state(find.byType(Navigator)) + .push( + CupertinoPageRoute( + builder: (BuildContext context) { + return const CupertinoNavigationBar(middle: Text('Page 2')); + }, + ), ), - ); + ); await tester.pump(); await tester.pump(const Duration(milliseconds: 600)); @@ -75,15 +78,17 @@ void main() { const CupertinoApp(home: CupertinoNavigationBar.large(largeTitle: Text('Title'))), ); - tester - .state(find.byType(Navigator)) - .push( - CupertinoPageRoute( - builder: (BuildContext context) { - return const CupertinoNavigationBar.large(largeTitle: Text('Page 2')); - }, + unawaited( + tester + .state(find.byType(Navigator)) + .push( + CupertinoPageRoute( + builder: (BuildContext context) { + return const CupertinoNavigationBar.large(largeTitle: Text('Page 2')); + }, + ), ), - ); + ); await tester.pump(); await tester.pump(const Duration(milliseconds: 600)); @@ -227,11 +232,13 @@ void main() { home: const CupertinoNavigationBar(middle: Text('Page 1')), ), ); - navigator.currentState!.push( - CupertinoPageRoute( - builder: (BuildContext context) { - return const CupertinoNavigationBar(middle: Text('Page 2')); - }, + unawaited( + navigator.currentState!.push( + CupertinoPageRoute( + builder: (BuildContext context) { + return const CupertinoNavigationBar(middle: Text('Page 2')); + }, + ), ), ); await tester.pumpAndSettle(); @@ -799,15 +806,17 @@ void main() { expect(find.byType(CupertinoButton), findsNothing); - tester - .state(find.byType(Navigator)) - .push( - CupertinoPageRoute( - builder: (BuildContext context) { - return const CupertinoNavigationBar(middle: Text('Page 2')); - }, + unawaited( + tester + .state(find.byType(Navigator)) + .push( + CupertinoPageRoute( + builder: (BuildContext context) { + return const CupertinoNavigationBar(middle: Text('Page 2')); + }, + ), ), - ); + ); await tester.pump(); await tester.pump(const Duration(milliseconds: 600)); @@ -815,16 +824,18 @@ void main() { expect(find.byType(CupertinoButton), findsOneWidget); expect(find.text(String.fromCharCode(CupertinoIcons.back.codePoint)), findsOneWidget); - tester - .state(find.byType(Navigator)) - .push( - CupertinoPageRoute( - fullscreenDialog: true, - builder: (BuildContext context) { - return const CupertinoNavigationBar(middle: Text('Dialog page')); - }, + unawaited( + tester + .state(find.byType(Navigator)) + .push( + CupertinoPageRoute( + fullscreenDialog: true, + builder: (BuildContext context) { + return const CupertinoNavigationBar(middle: Text('Dialog page')); + }, + ), ), - ); + ); await tester.pump(); await tester.pump(const Duration(milliseconds: 600)); @@ -856,18 +867,20 @@ void main() { expect(find.byType(CupertinoButton), findsNothing); - tester - .state(find.byType(Navigator)) - .push( - CupertinoSheetRoute( - builder: (BuildContext context) { - return const CupertinoPageScaffold( - navigationBar: CupertinoNavigationBar(middle: Text('Page 2')), - child: Placeholder(), - ); - }, + unawaited( + tester + .state(find.byType(Navigator)) + .push( + CupertinoSheetRoute( + builder: (BuildContext context) { + return const CupertinoPageScaffold( + navigationBar: CupertinoNavigationBar(middle: Text('Page 2')), + child: Placeholder(), + ); + }, + ), ), - ); + ); await tester.pump(); await tester.pump(const Duration(milliseconds: 600)); @@ -876,19 +889,21 @@ void main() { expect(find.byType(CupertinoButton), findsNothing); expect(find.text(String.fromCharCode(CupertinoIcons.back.codePoint)), findsNothing); - tester - .state(find.byType(Navigator)) - .push( - CupertinoSheetRoute( - builder: (BuildContext context) { - return const CupertinoPageScaffold( - child: CustomScrollView( - slivers: [CupertinoSliverNavigationBar(largeTitle: Text('Page 3'))], - ), - ); - }, + unawaited( + tester + .state(find.byType(Navigator)) + .push( + CupertinoSheetRoute( + builder: (BuildContext context) { + return const CupertinoPageScaffold( + child: CustomScrollView( + slivers: [CupertinoSliverNavigationBar(largeTitle: Text('Page 3'))], + ), + ); + }, + ), ), - ); + ); await tester.pump(); await tester.pump(const Duration(milliseconds: 600)); @@ -901,36 +916,40 @@ void main() { testWidgets('Long back label turns into "back"', (WidgetTester tester) async { await tester.pumpWidget(const CupertinoApp(home: Placeholder())); - tester - .state(find.byType(Navigator)) - .push( - CupertinoPageRoute( - builder: (BuildContext context) { - return const CupertinoPageScaffold( - navigationBar: CupertinoNavigationBar(previousPageTitle: '012345678901'), - child: Placeholder(), - ); - }, + unawaited( + tester + .state(find.byType(Navigator)) + .push( + CupertinoPageRoute( + builder: (BuildContext context) { + return const CupertinoPageScaffold( + navigationBar: CupertinoNavigationBar(previousPageTitle: '012345678901'), + child: Placeholder(), + ); + }, + ), ), - ); + ); await tester.pump(); await tester.pump(const Duration(milliseconds: 500)); expect(find.widgetWithText(CupertinoButton, '012345678901'), findsOneWidget); - tester - .state(find.byType(Navigator)) - .push( - CupertinoPageRoute( - builder: (BuildContext context) { - return const CupertinoPageScaffold( - navigationBar: CupertinoNavigationBar(previousPageTitle: '0123456789012'), - child: Placeholder(), - ); - }, + unawaited( + tester + .state(find.byType(Navigator)) + .push( + CupertinoPageRoute( + builder: (BuildContext context) { + return const CupertinoPageScaffold( + navigationBar: CupertinoNavigationBar(previousPageTitle: '0123456789012'), + child: Placeholder(), + ); + }, + ), ), - ); + ); await tester.pump(); await tester.pump(const Duration(milliseconds: 500)); @@ -1601,33 +1620,37 @@ void main() { 'show previous page title when possible', (WidgetTester tester) async { await tester.pumpWidget(const CupertinoApp(home: Placeholder())); - tester - .state(find.byType(Navigator)) - .push( - CupertinoPageRoute( - title: 'An iPod', - builder: (BuildContext context) { - return const CupertinoPageScaffold( - navigationBar: CupertinoNavigationBar(), - child: Placeholder(), - ); - }, + unawaited( + tester + .state(find.byType(Navigator)) + .push( + CupertinoPageRoute( + title: 'An iPod', + builder: (BuildContext context) { + return const CupertinoPageScaffold( + navigationBar: CupertinoNavigationBar(), + child: Placeholder(), + ); + }, + ), ), - ); + ); await tester.pump(); await tester.pump(const Duration(milliseconds: 500)); - tester - .state(find.byType(Navigator)) - .push( - CupertinoPageRoute( - title: 'A Phone', - builder: (BuildContext context) { - return const CupertinoNavigationBarBackButton(); - }, + unawaited( + tester + .state(find.byType(Navigator)) + .push( + CupertinoPageRoute( + title: 'A Phone', + builder: (BuildContext context) { + return const CupertinoNavigationBarBackButton(); + }, + ), ), - ); + ); await tester.pump(); await tester.pump(const Duration(milliseconds: 500)); @@ -1641,38 +1664,42 @@ void main() { var backPressed = false; await tester.pumpWidget(const CupertinoApp(home: Placeholder())); - tester - .state(find.byType(Navigator)) - .push( - CupertinoPageRoute( - title: 'An iPod', - builder: (BuildContext context) { - return const CupertinoPageScaffold( - navigationBar: CupertinoNavigationBar(), - child: Placeholder(), - ); - }, + unawaited( + tester + .state(find.byType(Navigator)) + .push( + CupertinoPageRoute( + title: 'An iPod', + builder: (BuildContext context) { + return const CupertinoPageScaffold( + navigationBar: CupertinoNavigationBar(), + child: Placeholder(), + ); + }, + ), ), - ); + ); await tester.pump(); await tester.pump(const Duration(milliseconds: 600)); - tester - .state(find.byType(Navigator)) - .push( - CupertinoPageRoute( - title: 'A Phone', - builder: (BuildContext context) { - return CupertinoPageScaffold( - navigationBar: CupertinoNavigationBar( - leading: CupertinoNavigationBarBackButton(onPressed: () => backPressed = true), - ), - child: const Placeholder(), - ); - }, + unawaited( + tester + .state(find.byType(Navigator)) + .push( + CupertinoPageRoute( + title: 'A Phone', + builder: (BuildContext context) { + return CupertinoPageScaffold( + navigationBar: CupertinoNavigationBar( + leading: CupertinoNavigationBarBackButton(onPressed: () => backPressed = true), + ), + child: const Placeholder(), + ); + }, + ), ), - ); + ); await tester.pump(); await tester.pump(const Duration(milliseconds: 600)); @@ -2078,18 +2105,20 @@ void main() { ), ); - tester - .state(find.byType(Navigator)) - .push( - CupertinoPageRoute( - builder: (BuildContext context) { - return const CupertinoPageScaffold( - navigationBar: CupertinoNavigationBar(middle: Text('Page 2'), border: null), - child: Placeholder(), - ); - }, + unawaited( + tester + .state(find.byType(Navigator)) + .push( + CupertinoPageRoute( + builder: (BuildContext context) { + return const CupertinoPageScaffold( + navigationBar: CupertinoNavigationBar(middle: Text('Page 2'), border: null), + child: Placeholder(), + ); + }, + ), ), - ); + ); await tester.pump(); await tester.pump(const Duration(milliseconds: 600)); From ff9afa0e50466180852c874de81f9597416c7a67 Mon Sep 17 00:00:00 2001 From: Renzo Olivares Date: Tue, 30 Jun 2026 23:01:05 +0000 Subject: [PATCH 3/3] remove ensureSemantics --- packages/cupertino_ui/test/nav_bar_test.dart | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/packages/cupertino_ui/test/nav_bar_test.dart b/packages/cupertino_ui/test/nav_bar_test.dart index 6545c298ac71..d463d1ba3c5a 100644 --- a/packages/cupertino_ui/test/nav_bar_test.dart +++ b/packages/cupertino_ui/test/nav_bar_test.dart @@ -1092,8 +1092,6 @@ void main() { }); testWidgets('CupertinoSliverNavigationBar has semantics', (WidgetTester tester) async { - final SemanticsHandle handle = tester.ensureSemantics(); - await tester.pumpWidget( const CupertinoApp( home: CupertinoPageScaffold( @@ -1110,13 +1108,9 @@ void main() { tester.getSemantics(find.text('Large Title')), isSemantics(label: 'Large Title', isHeader: true, textDirection: TextDirection.ltr), ); - - handle.dispose(); }); testWidgets('CupertinoNavigationBar has semantics', (WidgetTester tester) async { - final SemanticsHandle handle = tester.ensureSemantics(); - await tester.pumpWidget( CupertinoApp( home: CupertinoPageScaffold( @@ -1130,13 +1124,9 @@ void main() { tester.getSemantics(find.text('Fixed Title')), isSemantics(label: 'Fixed Title', isHeader: true, textDirection: TextDirection.ltr), ); - - handle.dispose(); }); testWidgets('Large CupertinoNavigationBar has semantics', (WidgetTester tester) async { - final SemanticsHandle handle = tester.ensureSemantics(); - await tester.pumpWidget( CupertinoApp( home: CupertinoPageScaffold( @@ -1150,8 +1140,6 @@ void main() { tester.getSemantics(find.text('Fixed Title')), isSemantics(label: 'Fixed Title', isHeader: true, textDirection: TextDirection.ltr), ); - - handle.dispose(); }); testWidgets('Border can be overridden in sliver nav bar', (WidgetTester tester) async {