[NNBD] Migrate some Cupertino tests (#67086)
diff --git a/packages/flutter/lib/src/cupertino/nav_bar.dart b/packages/flutter/lib/src/cupertino/nav_bar.dart
index 40fa0bc..e8cf3b9 100644
--- a/packages/flutter/lib/src/cupertino/nav_bar.dart
+++ b/packages/flutter/lib/src/cupertino/nav_bar.dart
@@ -344,7 +344,7 @@
///
/// If a border is null, the navigation bar will not display a border.
/// {@endtemplate}
- final Border border;
+ final Border? border;
/// {@template flutter.cupertino.navBar.actionsForegroundColor}
/// Default color used for text and icons of the [leading] and [trailing]
@@ -652,7 +652,7 @@
final EdgeInsetsDirectional? padding;
/// {@macro flutter.cupertino.navBar.border}
- final Border border;
+ final Border? border;
/// {@macro flutter.cupertino.navBar.actionsForegroundColor}
///
diff --git a/packages/flutter/test/cupertino/action_sheet_test.dart b/packages/flutter/test/cupertino/action_sheet_test.dart
index b086881..0f37a62 100644
--- a/packages/flutter/test/cupertino/action_sheet_test.dart
+++ b/packages/flutter/test/cupertino/action_sheet_test.dart
@@ -2,8 +2,6 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-// @dart = 2.8
-
import 'package:flutter/cupertino.dart';
import 'package:flutter/widgets.dart';
@@ -63,7 +61,7 @@
final DefaultTextStyle widget = tester.widget(find.widgetWithText(DefaultTextStyle, 'Ok'));
- expect(widget.style.color, const CupertinoDynamicColor.withBrightnessAndContrast(
+ expect(widget.style!.color, const CupertinoDynamicColor.withBrightnessAndContrast(
color: Color.fromARGB(255, 255, 59, 48),
darkColor: Color.fromARGB(255, 255, 69, 58),
highContrastColor: Color.fromARGB(255, 215, 0, 21),
@@ -78,7 +76,7 @@
);
Brightness brightness = Brightness.light;
- StateSetter stateSetter;
+ late StateSetter stateSetter;
TextStyle actionTextStyle(String text) {
return tester.widget<DefaultTextStyle>(
@@ -86,7 +84,7 @@
of: find.widgetWithText(CupertinoActionSheetAction, text),
matching: find.byType(DefaultTextStyle),
),
- ).style;
+ ).style!;
}
await tester.pumpWidget(
@@ -115,7 +113,7 @@
await tester.pump();
expect(
- actionTextStyle('action').color.value,
+ actionTextStyle('action').color!.value,
const Color.fromARGB(255, 0, 122, 255).value,
);
@@ -123,7 +121,7 @@
await tester.pump();
expect(
- actionTextStyle('action').color.value,
+ actionTextStyle('action').color!.value,
const Color.fromARGB(255, 10, 132, 255).value,
);
});
@@ -141,7 +139,7 @@
final DefaultTextStyle widget = tester.widget(find.widgetWithText(DefaultTextStyle, 'Ok'));
- expect(widget.style.fontWeight, equals(FontWeight.w600));
+ expect(widget.style!.fontWeight, equals(FontWeight.w600));
});
testWidgets('Action sheet text styles are correct when both title and message are included', (WidgetTester tester) async {
@@ -162,8 +160,8 @@
final DefaultTextStyle messageStyle = tester.firstWidget(find.widgetWithText(DefaultTextStyle,
'An action sheet'));
- expect(titleStyle.style.fontWeight, FontWeight.w600);
- expect(messageStyle.style.fontWeight, FontWeight.w400);
+ expect(titleStyle.style!.fontWeight, FontWeight.w600);
+ expect(messageStyle.style!.fontWeight, FontWeight.w400);
});
testWidgets('Action sheet text styles are correct when title but no message is included', (WidgetTester tester) async {
@@ -181,7 +179,7 @@
final DefaultTextStyle titleStyle = tester.firstWidget(find.widgetWithText(DefaultTextStyle,
'Action Sheet'));
- expect(titleStyle.style.fontWeight, FontWeight.w400);
+ expect(titleStyle.style!.fontWeight, FontWeight.w400);
});
testWidgets('Action sheet text styles are correct when message but no title is included', (WidgetTester tester) async {
@@ -199,7 +197,7 @@
final DefaultTextStyle messageStyle = tester.firstWidget(find.widgetWithText(DefaultTextStyle,
'An action sheet'));
- expect(messageStyle.style.fontWeight, FontWeight.w600);
+ expect(messageStyle.style!.fontWeight, FontWeight.w600);
});
testWidgets('Content section but no actions', (WidgetTester tester) async {
@@ -285,7 +283,7 @@
createAppWithButtonThatLaunchesActionSheet(
Builder(builder: (BuildContext context) {
return MediaQuery(
- data: MediaQuery.of(context).copyWith(textScaleFactor: 3.0),
+ data: MediaQuery.of(context)!.copyWith(textScaleFactor: 3.0),
child: CupertinoActionSheet(
title: const Text('The title'),
message: const Text('The message.'),
@@ -346,13 +344,13 @@
testWidgets('Content section is scrollable', (WidgetTester tester) async {
final ScrollController messageScrollController = ScrollController();
- double screenHeight;
+ late double screenHeight;
await tester.pumpWidget(
createAppWithButtonThatLaunchesActionSheet(
Builder(builder: (BuildContext context) {
- screenHeight = MediaQuery.of(context).size.height;
+ screenHeight = MediaQuery.of(context)!.size.height;
return MediaQuery(
- data: MediaQuery.of(context).copyWith(textScaleFactor: 3.0),
+ data: MediaQuery.of(context)!.copyWith(textScaleFactor: 3.0),
child: CupertinoActionSheet(
title: const Text('The title'),
message: Text('Very long content' * 200),
diff --git a/packages/flutter/test/cupertino/activity_indicator_test.dart b/packages/flutter/test/cupertino/activity_indicator_test.dart
index db0e3fc..7b64dd4 100644
--- a/packages/flutter/test/cupertino/activity_indicator_test.dart
+++ b/packages/flutter/test/cupertino/activity_indicator_test.dart
@@ -2,8 +2,6 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-// @dart = 2.8
-
import 'package:flutter/cupertino.dart';
import 'package:flutter/scheduler.dart';
import 'package:flutter_test/flutter_test.dart';
@@ -14,18 +12,18 @@
testWidgets('Activity indicator animate property works',
(WidgetTester tester) async {
await tester.pumpWidget(buildCupertinoActivityIndicator());
- expect(SchedulerBinding.instance.transientCallbackCount, equals(1));
+ expect(SchedulerBinding.instance!.transientCallbackCount, equals(1));
await tester.pumpWidget(buildCupertinoActivityIndicator(false));
- expect(SchedulerBinding.instance.transientCallbackCount, equals(0));
+ expect(SchedulerBinding.instance!.transientCallbackCount, equals(0));
await tester.pumpWidget(Container());
await tester.pumpWidget(buildCupertinoActivityIndicator(false));
- expect(SchedulerBinding.instance.transientCallbackCount, equals(0));
+ expect(SchedulerBinding.instance!.transientCallbackCount, equals(0));
await tester.pumpWidget(buildCupertinoActivityIndicator());
- expect(SchedulerBinding.instance.transientCallbackCount, equals(1));
+ expect(SchedulerBinding.instance!.transientCallbackCount, equals(1));
});
testWidgets('Activity indicator dark mode', (WidgetTester tester) async {
@@ -161,7 +159,7 @@
});
}
-Widget buildCupertinoActivityIndicator([bool animating]) {
+Widget buildCupertinoActivityIndicator([bool? animating]) {
return MediaQuery(
data: const MediaQueryData(platformBrightness: Brightness.light),
child: CupertinoActivityIndicator(
diff --git a/packages/flutter/test/cupertino/app_test.dart b/packages/flutter/test/cupertino/app_test.dart
index 9a1a03d..24c6860 100644
--- a/packages/flutter/test/cupertino/app_test.dart
+++ b/packages/flutter/test/cupertino/app_test.dart
@@ -2,8 +2,6 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-// @dart = 2.8
-
import 'package:flutter_test/flutter_test.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/foundation.dart';
@@ -52,8 +50,8 @@
builder: (BuildContext context) {
return Column(
children: <Widget>[
- Text(CupertinoLocalizations.of(context).selectAllButtonLabel),
- Text(CupertinoLocalizations.of(context).datePickerMediumDate(
+ Text(CupertinoLocalizations.of(context)!.selectAllButtonLabel),
+ Text(CupertinoLocalizations.of(context)!.datePickerMediumDate(
DateTime(2018, 10, 4),
)),
],
@@ -126,7 +124,7 @@
expect(find.text('non-regular page one'), findsNothing);
expect(find.text('regular page one'), findsNothing);
expect(find.text('regular page two'), findsNothing);
- navigatorKey.currentState.pop();
+ navigatorKey.currentState!.pop();
await tester.pumpAndSettle();
expect(find.text('non-regular page two'), findsNothing);
expect(find.text('non-regular page one'), findsOneWidget);
@@ -158,7 +156,7 @@
);
final SimpleNavigatorRouterDelegate delegate = SimpleNavigatorRouterDelegate(
builder: (BuildContext context, RouteInformation information) {
- return Text(information.location);
+ return Text(information.location!);
},
onPopPage: (Route<void> route, void result, SimpleNavigatorRouterDelegate delegate) {
delegate.routeInformation = const RouteInformation(
@@ -176,7 +174,7 @@
// Simulate android back button intent.
final ByteData message = const JSONMethodCodec().encodeMethodCall(const MethodCall('popRoute'));
- await ServicesBinding.instance.defaultBinaryMessenger.handlePlatformMessage('flutter/navigation', message, (_) { });
+ await ServicesBinding.instance!.defaultBinaryMessenger.handlePlatformMessage('flutter/navigation', message, (_) { });
await tester.pumpAndSettle();
expect(find.text('popped'), findsOneWidget);
});
@@ -201,7 +199,7 @@
class SimpleNavigatorRouterDelegate extends RouterDelegate<RouteInformation> with PopNavigatorRouterDelegateMixin<RouteInformation>, ChangeNotifier {
SimpleNavigatorRouterDelegate({
- @required this.builder,
+ required this.builder,
this.onPopPage,
});
@@ -209,14 +207,14 @@
GlobalKey<NavigatorState> navigatorKey = GlobalKey<NavigatorState>();
RouteInformation get routeInformation => _routeInformation;
- RouteInformation _routeInformation;
+ late RouteInformation _routeInformation;
set routeInformation(RouteInformation newValue) {
_routeInformation = newValue;
notifyListeners();
}
SimpleRouterDelegateBuilder builder;
- SimpleNavigatorRouterDelegatePopPage<void> onPopPage;
+ SimpleNavigatorRouterDelegatePopPage<void>? onPopPage;
@override
Future<void> setNewRoutePath(RouteInformation configuration) {
@@ -225,7 +223,7 @@
}
bool _handlePopPage(Route<void> route, void data) {
- return onPopPage(route, data, this);
+ return onPopPage!(route, data, this);
}
@override
@@ -240,7 +238,7 @@
child: Text('base'),
),
CupertinoPage<void>(
- key: ValueKey<String>(routeInformation?.location),
+ key: ValueKey<String?>(routeInformation.location),
child: builder(context, routeInformation),
)
],
diff --git a/packages/flutter/test/cupertino/bottom_tab_bar_test.dart b/packages/flutter/test/cupertino/bottom_tab_bar_test.dart
index 9f17634..454f917 100644
--- a/packages/flutter/test/cupertino/bottom_tab_bar_test.dart
+++ b/packages/flutter/test/cupertino/bottom_tab_bar_test.dart
@@ -2,8 +2,6 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-// @dart = 2.8
-
import 'dart:typed_data';
import 'package:flutter/cupertino.dart';
@@ -72,13 +70,13 @@
of: find.text('Tab 1'),
matching: find.byType(RichText),
));
- expect(actualInactive.text.style.color, const Color(0xFF654321));
+ expect(actualInactive.text.style!.color, const Color(0xFF654321));
final RichText actualActive = tester.widget(find.descendant(
of: find.text('Tab 2'),
matching: find.byType(RichText),
));
- expect(actualActive.text.style.color, const Color(0xFF123456));
+ expect(actualActive.text.style!.color, const Color(0xFF123456));
});
@@ -138,13 +136,13 @@
of: find.text('Tab 1'),
matching: find.byType(RichText),
));
- expect(actualInactive.text.style.color.value, 0xFF000002);
+ expect(actualInactive.text.style!.color!.value, 0xFF000002);
RichText actualActive = tester.widget(find.descendant(
of: find.text('Tab 2'),
matching: find.byType(RichText),
));
- expect(actualActive.text.style.color.value, 0xFF000000);
+ expect(actualActive.text.style!.color!.value, 0xFF000000);
final RenderDecoratedBox renderDecoratedBox = tester.renderObject(find.descendant(
of: find.byType(BackdropFilter),
@@ -153,7 +151,7 @@
// Border color is resolved correctly.
final BoxDecoration decoration1 = renderDecoratedBox.decoration as BoxDecoration;
- expect(decoration1.border.top.color.value, 0x4C000000);
+ expect(decoration1.border!.top.color.value, 0x4C000000);
// Switch to dark mode.
await pumpWidgetWithBoilerplate(tester, MediaQuery(
@@ -179,17 +177,17 @@
of: find.text('Tab 1'),
matching: find.byType(RichText),
));
- expect(actualInactive.text.style.color.value, 0xFF000003);
+ expect(actualInactive.text.style!.color!.value, 0xFF000003);
actualActive = tester.widget(find.descendant(
of: find.text('Tab 2'),
matching: find.byType(RichText),
));
- expect(actualActive.text.style.color.value, 0xFF000001);
+ expect(actualActive.text.style!.color!.value, 0xFF000001);
// Border color is resolved correctly.
final BoxDecoration decoration2 = renderDecoratedBox.decoration as BoxDecoration;
- expect(decoration2.border.top.color.value, 0x29000000);
+ expect(decoration2.border!.top.color.value, 0x29000000);
});
testWidgets('Tabs respects themes', (WidgetTester tester) async {
@@ -215,13 +213,13 @@
of: find.text('Tab 1'),
matching: find.byType(RichText),
));
- expect(actualInactive.text.style.color.value, 0xFF999999);
+ expect(actualInactive.text.style!.color!.value, 0xFF999999);
RichText actualActive = tester.widget(find.descendant(
of: find.text('Tab 2'),
matching: find.byType(RichText),
));
- expect(actualActive.text.style.color, CupertinoColors.activeBlue);
+ expect(actualActive.text.style!.color, CupertinoColors.activeBlue);
await tester.pumpWidget(
CupertinoApp(
@@ -246,14 +244,14 @@
of: find.text('Tab 1'),
matching: find.byType(RichText),
));
- expect(actualInactive.text.style.color.value, 0xFF757575);
+ expect(actualInactive.text.style!.color!.value, 0xFF757575);
actualActive = tester.widget(find.descendant(
of: find.text('Tab 2'),
matching: find.byType(RichText),
));
- expect(actualActive.text.style.color, isSameColorAs(CupertinoColors.activeBlue.darkColor));
+ expect(actualActive.text.style!.color, isSameColorAs(CupertinoColors.activeBlue.darkColor));
});
testWidgets('Use active icon', (WidgetTester tester) async {
@@ -368,7 +366,7 @@
});
testWidgets('Tap callback', (WidgetTester tester) async {
- int callbackTab;
+ late int callbackTab;
await pumpWidgetWithBoilerplate(tester, MediaQuery(
data: const MediaQueryData(),
diff --git a/packages/flutter/test/cupertino/button_test.dart b/packages/flutter/test/cupertino/button_test.dart
index 6ba875f..3d221b4 100644
--- a/packages/flutter/test/cupertino/button_test.dart
+++ b/packages/flutter/test/cupertino/button_test.dart
@@ -2,8 +2,6 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-// @dart = 2.8
-
import 'package:flutter/rendering.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/scheduler.dart';
@@ -151,11 +149,11 @@
expect(value, isFalse);
// No animating by default.
- expect(SchedulerBinding.instance.transientCallbackCount, equals(0));
+ expect(SchedulerBinding.instance!.transientCallbackCount, equals(0));
await tester.tap(find.byType(CupertinoButton));
expect(value, isTrue);
// Animates.
- expect(SchedulerBinding.instance.transientCallbackCount, equals(1));
+ expect(SchedulerBinding.instance!.transientCallbackCount, equals(1));
});
testWidgets("Disabled button doesn't animate", (WidgetTester tester) async {
@@ -163,10 +161,10 @@
child: Text('Tap me'),
onPressed: null,
)));
- expect(SchedulerBinding.instance.transientCallbackCount, equals(0));
+ expect(SchedulerBinding.instance!.transientCallbackCount, equals(0));
await tester.tap(find.byType(CupertinoButton));
// Still doesn't animate.
- expect(SchedulerBinding.instance.transientCallbackCount, equals(0));
+ expect(SchedulerBinding.instance!.transientCallbackCount, equals(0));
});
testWidgets('pressedOpacity defaults to 0.1', (WidgetTester tester) async {
@@ -295,7 +293,7 @@
find.widgetWithText(DecoratedBox, 'Skeuomorph me')
).decoration as BoxDecoration;
- expect(boxDecoration.color.value, 0xFF654321);
+ expect(boxDecoration.color!.value, 0xFF654321);
await tester.pumpWidget(
MediaQuery(
@@ -314,18 +312,18 @@
).decoration as BoxDecoration;
// Disabled color.
- expect(boxDecoration.color.value, 0xFF111111);
+ expect(boxDecoration.color!.value, 0xFF111111);
});
testWidgets('Button respects themes', (WidgetTester tester) async {
- TextStyle textStyle;
+ late TextStyle textStyle;
await tester.pumpWidget(
CupertinoApp(
home: CupertinoButton(
onPressed: () { },
child: Builder(builder: (BuildContext context) {
- textStyle = DefaultTextStyle.of(context).style;
+ textStyle = DefaultTextStyle.of(context).style!;
return const Placeholder();
}),
),
@@ -339,7 +337,7 @@
home: CupertinoButton.filled(
onPressed: () { },
child: Builder(builder: (BuildContext context) {
- textStyle = DefaultTextStyle.of(context).style;
+ textStyle = DefaultTextStyle.of(context).style!;
return const Placeholder();
}),
),
@@ -361,7 +359,7 @@
home: CupertinoButton(
onPressed: () { },
child: Builder(builder: (BuildContext context) {
- textStyle = DefaultTextStyle.of(context).style;
+ textStyle = DefaultTextStyle.of(context).style!;
return const Placeholder();
}),
),
@@ -375,7 +373,7 @@
home: CupertinoButton.filled(
onPressed: () { },
child: Builder(builder: (BuildContext context) {
- textStyle = DefaultTextStyle.of(context).style;
+ textStyle = DefaultTextStyle.of(context).style!;
return const Placeholder();
}),
),
@@ -392,7 +390,7 @@
});
}
-Widget boilerplate({ Widget child }) {
+Widget boilerplate({ required Widget child }) {
return Directionality(
textDirection: TextDirection.ltr,
child: Center(child: child),
diff --git a/packages/flutter/test/cupertino/colors_test.dart b/packages/flutter/test/cupertino/colors_test.dart
index 5135736..d8cc947 100644
--- a/packages/flutter/test/cupertino/colors_test.dart
+++ b/packages/flutter/test/cupertino/colors_test.dart
@@ -2,8 +2,6 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-// @dart = 2.8
-
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
@@ -13,15 +11,15 @@
class DependentWidget extends StatelessWidget {
const DependentWidget({
- Key key,
- this.color,
+ Key? key,
+ required this.color,
}) : super(key: key);
final Color color;
@override
Widget build(BuildContext context) {
- final Color resolved = CupertinoDynamicColor.resolve(color, context, nullOk: false);
+ final Color resolved = CupertinoDynamicColor.resolve(color, context, nullOk: false)!;
return DecoratedBox(
decoration: BoxDecoration(color: resolved),
child: const SizedBox.expand(),
@@ -422,7 +420,7 @@
});
testWidgets('CupertinoDynamicColor used in a CupertinoTheme', (WidgetTester tester) async {
- CupertinoDynamicColor color;
+ late CupertinoDynamicColor color;
await tester.pumpWidget(
CupertinoApp(
theme: const CupertinoThemeData(
@@ -503,7 +501,7 @@
});
group('MaterialApp:', () {
- Color color;
+ Color? color;
setUp(() { color = null; });
testWidgets('dynamic color works in cupertino override theme', (WidgetTester tester) async {
diff --git a/packages/flutter/test/cupertino/context_menu_action_test.dart b/packages/flutter/test/cupertino/context_menu_action_test.dart
index 2f09144..278810b 100644
--- a/packages/flutter/test/cupertino/context_menu_action_test.dart
+++ b/packages/flutter/test/cupertino/context_menu_action_test.dart
@@ -2,8 +2,6 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-// @dart = 2.8
-
import 'package:flutter_test/flutter_test.dart';
import 'package:flutter/cupertino.dart';
@@ -15,7 +13,7 @@
const Color _kDestructiveActionColor = CupertinoColors.destructiveRed;
const FontWeight _kDefaultActionWeight = FontWeight.w600;
- Widget _getApp({VoidCallback onPressed, bool isDestructiveAction = false, bool isDefaultAction = false}) {
+ Widget _getApp({VoidCallback? onPressed, bool isDestructiveAction = false, bool isDefaultAction = false}) {
final UniqueKey actionKey = UniqueKey();
final CupertinoContextMenuAction action = CupertinoContextMenuAction(
key: actionKey,
@@ -52,7 +50,7 @@
);
expect(finder, findsOneWidget);
final DefaultTextStyle defaultStyle = tester.widget(finder);
- return defaultStyle.style;
+ return defaultStyle.style!;
}
Icon _getIcon(WidgetTester tester) {
diff --git a/packages/flutter/test/cupertino/context_menu_test.dart b/packages/flutter/test/cupertino/context_menu_test.dart
index 1203b29..be2a059 100644
--- a/packages/flutter/test/cupertino/context_menu_test.dart
+++ b/packages/flutter/test/cupertino/context_menu_test.dart
@@ -2,8 +2,6 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-// @dart = 2.8
-
import 'package:flutter_test/flutter_test.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/foundation.dart' show kIsWeb;
@@ -24,7 +22,7 @@
Widget _getContextMenu({
Alignment alignment = Alignment.center,
Size screenSize = const Size(800.0, 600.0),
- Widget child,
+ Widget? child,
}) {
return CupertinoApp(
home: CupertinoPageScaffold(
diff --git a/packages/flutter/test/cupertino/date_picker_test.dart b/packages/flutter/test/cupertino/date_picker_test.dart
index c603c21..c8f9e41 100644
--- a/packages/flutter/test/cupertino/date_picker_test.dart
+++ b/packages/flutter/test/cupertino/date_picker_test.dart
@@ -2,8 +2,6 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-// @dart = 2.8
-
import 'dart:ui';
import 'package:flutter/cupertino.dart';
@@ -16,15 +14,6 @@
void main() {
group('Countdown timer picker', () {
- testWidgets('onTimerDurationChanged is not null', (WidgetTester tester) async {
- expect(
- () {
- CupertinoTimerPicker(onTimerDurationChanged: null);
- },
- throwsAssertionError,
- );
- });
-
testWidgets('initialTimerDuration falls within limit', (WidgetTester tester) async {
expect(
() {
@@ -245,7 +234,7 @@
});
testWidgets('picker honors minuteInterval and secondInterval', (WidgetTester tester) async {
- Duration duration;
+ late Duration duration;
await tester.pumpWidget(
CupertinoApp(
home: SizedBox(
@@ -277,31 +266,6 @@
});
group('Date picker', () {
- testWidgets('mode is not null', (WidgetTester tester) async {
- expect(
- () {
- CupertinoDatePicker(
- mode: null,
- onDateTimeChanged: (_) { },
- initialDateTime: DateTime.now(),
- );
- },
- throwsAssertionError,
- );
- });
-
- testWidgets('onDateTimeChanged is not null', (WidgetTester tester) async {
- expect(
- () {
- CupertinoDatePicker(
- onDateTimeChanged: null,
- initialDateTime: DateTime.now(),
- );
- },
- throwsAssertionError,
- );
- });
-
testWidgets('initial date is set to default value', (WidgetTester tester) async {
final CupertinoDatePicker picker = CupertinoDatePicker(
onDateTimeChanged: (_) { },
@@ -350,7 +314,7 @@
});
testWidgets('initial date honors minuteInterval', (WidgetTester tester) async {
- DateTime newDateTime;
+ late DateTime newDateTime;
await tester.pumpWidget(
CupertinoApp(
home: Center(
@@ -399,7 +363,7 @@
});
testWidgets('changing initialDateTime after first build does not do anything', (WidgetTester tester) async {
- DateTime selectedDateTime;
+ late DateTime selectedDateTime;
await tester.pumpWidget(
CupertinoApp(
home: Center(
@@ -622,7 +586,7 @@
});
testWidgets('picker automatically scrolls away from invalid date on month change', (WidgetTester tester) async {
- DateTime date;
+ late DateTime date;
await tester.pumpWidget(
CupertinoApp(
home: Center(
@@ -666,7 +630,7 @@
'date picker automatically scrolls away from invalid date, '
"and onDateTimeChanged doesn't report these dates",
(WidgetTester tester) async {
- DateTime date;
+ late DateTime date;
// 2016 is a leap year.
final DateTime minimum = DateTime(2016, 2, 29);
final DateTime maximum = DateTime(2018, 12, 31);
@@ -695,7 +659,7 @@
// 2017 has 28 days in Feb so 29 is greyed out.
expect(
- tester.widget<Text>(find.text('29')).style.color,
+ tester.widget<Text>(find.text('29')).style!.color,
isSameColorAs(CupertinoColors.inactiveGray.color),
);
@@ -710,7 +674,7 @@
// 2016 has 29 days in Feb so 29 is not greyed out.
expect(
- tester.widget<Text>(find.text('29')).style.color,
+ tester.widget<Text>(find.text('29')).style!.color,
isNot(isSameColorAs(CupertinoColors.inactiveGray.color)),
);
@@ -724,7 +688,7 @@
);
expect(
- tester.widget<Text>(find.text('29')).style.color,
+ tester.widget<Text>(find.text('29')).style!.color,
isSameColorAs(CupertinoColors.inactiveGray.color),
);
});
@@ -733,7 +697,7 @@
'dateTime picker automatically scrolls away from invalid date, '
"and onDateTimeChanged doesn't report these dates",
(WidgetTester tester) async {
- DateTime date;
+ late DateTime date;
final DateTime minimum = DateTime(2019, 11, 11, 3, 30);
final DateTime maximum = DateTime(2019, 11, 11, 14, 59, 59);
await tester.pumpWidget(
@@ -761,18 +725,18 @@
// 3:00 is valid but 2:00 should be invalid.
expect(
- tester.widget<Text>(find.text('3')).style.color,
+ tester.widget<Text>(find.text('3')).style!.color,
isNot(isSameColorAs(CupertinoColors.inactiveGray.color)),
);
expect(
- tester.widget<Text>(find.text('2')).style.color,
+ tester.widget<Text>(find.text('2')).style!.color,
isSameColorAs(CupertinoColors.inactiveGray.color),
);
// 'PM' is greyed out.
expect(
- tester.widget<Text>(find.text('PM')).style.color,
+ tester.widget<Text>(find.text('PM')).style!.color,
isSameColorAs(CupertinoColors.inactiveGray.color),
);
@@ -787,11 +751,11 @@
// 3'o clock and 'AM' are now greyed out.
expect(
- tester.widget<Text>(find.text('AM')).style.color,
+ tester.widget<Text>(find.text('AM')).style!.color,
isSameColorAs(CupertinoColors.inactiveGray.color),
);
expect(
- tester.widget<Text>(find.text('3')).style.color,
+ tester.widget<Text>(find.text('3')).style!.color,
isSameColorAs(CupertinoColors.inactiveGray.color),
);
@@ -810,7 +774,7 @@
'time picker automatically scrolls away from invalid date, '
"and onDateTimeChanged doesn't report these dates",
(WidgetTester tester) async {
- DateTime date;
+ late DateTime date;
final DateTime minimum = DateTime(2019, 11, 11, 3, 30);
final DateTime maximum = DateTime(2019, 11, 11, 14, 59, 59);
await tester.pumpWidget(
@@ -838,18 +802,18 @@
// 3:00 is valid but 2:00 should be invalid.
expect(
- tester.widget<Text>(find.text('3')).style.color,
+ tester.widget<Text>(find.text('3')).style!.color,
isNot(isSameColorAs(CupertinoColors.inactiveGray.color)),
);
expect(
- tester.widget<Text>(find.text('2')).style.color,
+ tester.widget<Text>(find.text('2')).style!.color,
isSameColorAs(CupertinoColors.inactiveGray.color),
);
// 'PM' is greyed out.
expect(
- tester.widget<Text>(find.text('PM')).style.color,
+ tester.widget<Text>(find.text('PM')).style!.color,
isSameColorAs(CupertinoColors.inactiveGray.color),
);
@@ -864,11 +828,11 @@
// 3'o clock and 'AM' are now greyed out.
expect(
- tester.widget<Text>(find.text('AM')).style.color,
+ tester.widget<Text>(find.text('AM')).style!.color,
isSameColorAs(CupertinoColors.inactiveGray.color),
);
expect(
- tester.widget<Text>(find.text('3')).style.color,
+ tester.widget<Text>(find.text('3')).style!.color,
isSameColorAs(CupertinoColors.inactiveGray.color),
);
@@ -884,7 +848,7 @@
});
testWidgets('picker automatically scrolls away from invalid date on day change', (WidgetTester tester) async {
- DateTime date;
+ late DateTime date;
await tester.pumpWidget(
CupertinoApp(
home: Center(
@@ -941,7 +905,7 @@
'date picker should only take into account the date part of minimumDate and maximumDate',
(WidgetTester tester) async {
// Regression test for https://github.com/flutter/flutter/issues/49606.
- DateTime date;
+ late DateTime date;
final DateTime minDate = DateTime(2020, 1, 1, 12);
await tester.pumpWidget(
CupertinoApp(
@@ -972,7 +936,7 @@
group('Picker handles initial noon/midnight times', () {
testWidgets('midnight', (WidgetTester tester) async {
- DateTime date;
+ late DateTime date;
await tester.pumpWidget(
CupertinoApp(
home: Center(
@@ -1000,7 +964,7 @@
});
testWidgets('noon', (WidgetTester tester) async {
- DateTime date;
+ late DateTime date;
await tester.pumpWidget(
CupertinoApp(
home: Center(
@@ -1028,7 +992,7 @@
});
testWidgets('noon in 24 hour time', (WidgetTester tester) async {
- DateTime date;
+ late DateTime date;
await tester.pumpWidget(
CupertinoApp(
home: Center(
@@ -1058,7 +1022,7 @@
});
testWidgets('picker persists am/pm value when scrolling hours', (WidgetTester tester) async {
- DateTime date;
+ late DateTime date;
await tester.pumpWidget(
CupertinoApp(
home: Center(
@@ -1107,7 +1071,7 @@
});
testWidgets('picker automatically scrolls the am/pm column when the hour column changes enough', (WidgetTester tester) async {
- DateTime date;
+ late DateTime date;
await tester.pumpWidget(
CupertinoApp(
home: Center(
@@ -1285,7 +1249,7 @@
});
testWidgets('TimerPicker only changes hour label after scrolling stops', (WidgetTester tester) async {
- Duration duration;
+ Duration? duration;
await tester.pumpWidget(
CupertinoApp(
home: Center(
@@ -1308,13 +1272,13 @@
await tester.drag(find.text('2'), Offset(0, -_kRowOffset.dy));
// Duration should change but not the label.
- expect(duration?.inHours, 1);
+ expect(duration!.inHours, 1);
expect(find.text('hour'), findsNothing);
expect(find.text('hours'), findsOneWidget);
await tester.pumpAndSettle();
// Now the label should change.
- expect(duration?.inHours, 1);
+ expect(duration!.inHours, 1);
expect(find.text('hours'), findsNothing);
expect(find.text('hour'), findsOneWidget);
});
@@ -1368,7 +1332,7 @@
testWidgets('scrollController can be removed or added', (WidgetTester tester) async {
final SemanticsHandle handle = tester.ensureSemantics();
- int lastSelectedItem;
+ late int lastSelectedItem;
void onSelectedItemChanged(int index) {
lastSelectedItem = index;
}
@@ -1377,7 +1341,7 @@
onSelectedItemChanged: onSelectedItemChanged,
));
- tester.binding.pipelineOwner.semanticsOwner.performAction(1, SemanticsAction.increase);
+ tester.binding.pipelineOwner.semanticsOwner!.performAction(1, SemanticsAction.increase);
await tester.pumpAndSettle();
expect(lastSelectedItem, 1);
@@ -1385,7 +1349,7 @@
onSelectedItemChanged: onSelectedItemChanged,
));
- tester.binding.pipelineOwner.semanticsOwner.performAction(1, SemanticsAction.increase);
+ tester.binding.pipelineOwner.semanticsOwner!.performAction(1, SemanticsAction.increase);
await tester.pumpAndSettle();
expect(lastSelectedItem, 2);
@@ -1394,7 +1358,7 @@
onSelectedItemChanged: onSelectedItemChanged,
));
- tester.binding.pipelineOwner.semanticsOwner.performAction(1, SemanticsAction.increase);
+ tester.binding.pipelineOwner.semanticsOwner!.performAction(1, SemanticsAction.increase);
await tester.pumpAndSettle();
expect(lastSelectedItem, 3);
@@ -1404,7 +1368,7 @@
testWidgets('CupertinoDataPicker does not provide invalid MediaQuery', (WidgetTester tester) async {
// Regression test for https://github.com/flutter/flutter/issues/47989.
Brightness brightness = Brightness.light;
- StateSetter setState;
+ late StateSetter setState;
await tester.pumpWidget(
CupertinoApp(
@@ -1421,7 +1385,7 @@
home: StatefulBuilder(builder: (BuildContext context, StateSetter stateSetter) {
setState = stateSetter;
return MediaQuery(
- data: MediaQuery.of(context).copyWith(platformBrightness: brightness),
+ data: MediaQuery.of(context)!.copyWith(platformBrightness: brightness),
child: CupertinoDatePicker(
initialDateTime: DateTime(2019),
mode: CupertinoDatePickerMode.date,
@@ -1433,7 +1397,7 @@
);
expect(
- tester.widget<Text>(find.text('2019')).style.color,
+ tester.widget<Text>(find.text('2019')).style!.color,
isSameColorAs(const Color(0xFFFFFFFF)),
);
@@ -1441,7 +1405,7 @@
await tester.pump();
expect(
- tester.widget<Text>(find.text('2019')).style.color,
+ tester.widget<Text>(find.text('2019')).style!.color,
isSameColorAs(const Color(0xFF000000)),
);
});
@@ -1449,7 +1413,7 @@
testWidgets('picker exports semantics', (WidgetTester tester) async {
final SemanticsHandle handle = tester.ensureSemantics();
debugResetSemanticsIdCounter();
- int lastSelectedItem;
+ int? lastSelectedItem;
await tester.pumpWidget(_buildPicker(onSelectedItemChanged: (int index) {
lastSelectedItem = index;
}));
@@ -1466,7 +1430,7 @@
],
));
- tester.binding.pipelineOwner.semanticsOwner.performAction(1, SemanticsAction.increase);
+ tester.binding.pipelineOwner.semanticsOwner!.performAction(1, SemanticsAction.increase);
await tester.pumpAndSettle();
expect(tester.getSemantics(find.byType(CupertinoPicker)), matchesSemantics(
@@ -1486,7 +1450,10 @@
});
}
-Widget _buildPicker({ FixedExtentScrollController controller, ValueChanged<int> onSelectedItemChanged }) {
+Widget _buildPicker({
+ FixedExtentScrollController? controller,
+ required ValueChanged<int> onSelectedItemChanged,
+}) {
return Directionality(
textDirection: TextDirection.ltr,
child: CupertinoPicker(
diff --git a/packages/flutter/test/cupertino/dialog_test.dart b/packages/flutter/test/cupertino/dialog_test.dart
index 82f9342..6d70a73 100644
--- a/packages/flutter/test/cupertino/dialog_test.dart
+++ b/packages/flutter/test/cupertino/dialog_test.dart
@@ -2,8 +2,6 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-// @dart = 2.8
-
import 'dart:math';
import 'package:flutter/cupertino.dart';
@@ -118,7 +116,7 @@
final DefaultTextStyle widget = tester.widget(find.byType(DefaultTextStyle));
- expect(widget.style.color.withAlpha(255), CupertinoColors.systemRed.color);
+ expect(widget.style!.color!.withAlpha(255), CupertinoColors.systemRed.color);
});
testWidgets('Dialog dark theme', (WidgetTester tester) async {
@@ -143,7 +141,7 @@
);
expect(
- cancelText.text.style.color.value,
+ cancelText.text.style!.color!.value,
0xFF0A84FF, // dark elevated color of systemBlue.
);
@@ -233,7 +231,7 @@
final DefaultTextStyle widget = tester.widget(find.byType(DefaultTextStyle));
- expect(widget.style.fontWeight, equals(FontWeight.w600));
+ expect(widget.style!.fontWeight, equals(FontWeight.w600));
});
testWidgets('Dialog default and destructive action styles', (WidgetTester tester) async {
@@ -245,8 +243,8 @@
final DefaultTextStyle widget = tester.widget(find.byType(DefaultTextStyle));
- expect(widget.style.color.withAlpha(255), CupertinoColors.systemRed.color);
- expect(widget.style.fontWeight, equals(FontWeight.w600));
+ expect(widget.style!.color!.withAlpha(255), CupertinoColors.systemRed.color);
+ expect(widget.style!.fontWeight, equals(FontWeight.w600));
});
testWidgets('Dialog disabled action style', (WidgetTester tester) async {
@@ -256,8 +254,8 @@
final DefaultTextStyle widget = tester.widget(find.byType(DefaultTextStyle));
- expect(widget.style.color.opacity, greaterThanOrEqualTo(127 / 255));
- expect(widget.style.color.opacity, lessThanOrEqualTo(128 / 255));
+ expect(widget.style!.color!.opacity, greaterThanOrEqualTo(127 / 255));
+ expect(widget.style!.color!.opacity, lessThanOrEqualTo(128 / 255));
});
testWidgets('Dialog enabled action style', (WidgetTester tester) async {
@@ -268,7 +266,7 @@
final DefaultTextStyle widget = tester.widget(find.byType(DefaultTextStyle));
- expect(widget.style.color.opacity, equals(1.0));
+ expect(widget.style!.color!.opacity, equals(1.0));
});
testWidgets('Message is scrollable, has correct padding with large text sizes', (WidgetTester tester) async {
@@ -277,7 +275,7 @@
createAppWithButtonThatLaunchesDialog(
dialogBuilder: (BuildContext context) {
return MediaQuery(
- data: MediaQuery.of(context).copyWith(textScaleFactor: 3.0),
+ data: MediaQuery.of(context)!.copyWith(textScaleFactor: 3.0),
child: CupertinoAlertDialog(
title: const Text('The Title'),
content: Text('Very long content ' * 20),
@@ -377,7 +375,7 @@
createAppWithButtonThatLaunchesDialog(
dialogBuilder: (BuildContext context) {
return MediaQuery(
- data: MediaQuery.of(context).copyWith(textScaleFactor: 3.0),
+ data: MediaQuery.of(context)!.copyWith(textScaleFactor: 3.0),
child: CupertinoAlertDialog(
title: const Text('The title'),
content: const Text('The content.'),
@@ -438,7 +436,7 @@
createAppWithButtonThatLaunchesDialog(
dialogBuilder: (BuildContext context) {
return MediaQuery(
- data: MediaQuery.of(context).copyWith(textScaleFactor: textScaleFactor),
+ data: MediaQuery.of(context)!.copyWith(textScaleFactor: textScaleFactor),
child: CupertinoAlertDialog(
actions: const <Widget>[
CupertinoDialogAction(
@@ -489,7 +487,7 @@
createAppWithButtonThatLaunchesDialog(
dialogBuilder: (BuildContext context) {
return MediaQuery(
- data: MediaQuery.of(context).copyWith(textScaleFactor: textScaleFactor),
+ data: MediaQuery.of(context)!.copyWith(textScaleFactor: textScaleFactor),
child: CupertinoAlertDialog(
title: const Text('The title'),
content: const Text('The content.'),
@@ -554,11 +552,11 @@
testWidgets('Actions section height for 2 side-by-side buttons is height of tallest button.', (WidgetTester tester) async {
final ScrollController scrollController = ScrollController();
- double dividerWidth; // Will be set when the dialog builder runs. Needs a BuildContext.
+ late double dividerWidth; // Will be set when the dialog builder runs. Needs a BuildContext.
await tester.pumpWidget(
createAppWithButtonThatLaunchesDialog(
dialogBuilder: (BuildContext context) {
- dividerWidth = 1.0 / MediaQuery.of(context).devicePixelRatio;
+ dividerWidth = 1.0 / MediaQuery.of(context)!.devicePixelRatio;
return CupertinoAlertDialog(
title: const Text('The Title'),
content: const Text('The message'),
@@ -599,11 +597,11 @@
testWidgets('Actions section height for 2 stacked buttons with enough room is height of both buttons.', (WidgetTester tester) async {
final ScrollController scrollController = ScrollController();
- double dividerThickness; // Will be set when the dialog builder runs. Needs a BuildContext.
+ late double dividerThickness; // Will be set when the dialog builder runs. Needs a BuildContext.
await tester.pumpWidget(
createAppWithButtonThatLaunchesDialog(
dialogBuilder: (BuildContext context) {
- dividerThickness = 1.0 / MediaQuery.of(context).devicePixelRatio;
+ dividerThickness = 1.0 / MediaQuery.of(context)!.devicePixelRatio;
return CupertinoAlertDialog(
title: const Text('The Title'),
content: const Text('The message'),
@@ -679,7 +677,7 @@
createAppWithButtonThatLaunchesDialog(
dialogBuilder: (BuildContext context) {
return MediaQuery(
- data: MediaQuery.of(context).copyWith(textScaleFactor: 3.0),
+ data: MediaQuery.of(context)!.copyWith(textScaleFactor: 3.0),
child: CupertinoAlertDialog(
title: const Text('The Title'),
content: Text('The message\n' * 20),
@@ -807,11 +805,11 @@
testWidgets('Pressed button changes appearance and dividers disappear.', (WidgetTester tester) async {
final ScrollController scrollController = ScrollController();
- double dividerThickness; // Will be set when the dialog builder runs. Needs a BuildContext.
+ late double dividerThickness; // Will be set when the dialog builder runs. Needs a BuildContext.
await tester.pumpWidget(
createAppWithButtonThatLaunchesDialog(
dialogBuilder: (BuildContext context) {
- dividerThickness = 1.0 / MediaQuery.of(context).devicePixelRatio;
+ dividerThickness = 1.0 / MediaQuery.of(context)!.devicePixelRatio;
return CupertinoAlertDialog(
title: const Text('The Title'),
content: const Text('The message'),
@@ -1153,7 +1151,7 @@
createAppWithButtonThatLaunchesDialog(
dialogBuilder: (BuildContext context) {
return MediaQuery(
- data: MediaQuery.of(context).copyWith(textScaleFactor: 3.0),
+ data: MediaQuery.of(context)!.copyWith(textScaleFactor: 3.0),
child: const RepaintBoundary(
child: CupertinoAlertDialog(
title: Text('Title'),
@@ -1195,7 +1193,9 @@
return actionsSection as RenderBox;
}
-Widget createAppWithButtonThatLaunchesDialog({ WidgetBuilder dialogBuilder }) {
+Widget createAppWithButtonThatLaunchesDialog({
+ required WidgetBuilder dialogBuilder
+}) {
return MaterialApp(
home: Material(
child: Center(
diff --git a/packages/flutter/test/cupertino/icon_theme_data_test.dart b/packages/flutter/test/cupertino/icon_theme_data_test.dart
index bd09dfa..082f071 100644
--- a/packages/flutter/test/cupertino/icon_theme_data_test.dart
+++ b/packages/flutter/test/cupertino/icon_theme_data_test.dart
@@ -2,8 +2,6 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-// @dart = 2.8
-
import 'package:flutter/cupertino.dart';
import 'package:flutter_test/flutter_test.dart';
@@ -11,7 +9,7 @@
testWidgets('IconTheme.of works', (WidgetTester tester) async {
const IconThemeData data = IconThemeData(color: Color(0xAAAAAAAA), opacity: 0.5, size: 16.0);
- IconThemeData retrieved;
+ late IconThemeData retrieved;
await tester.pumpWidget(
IconTheme(data: data, child: Builder(builder: (BuildContext context) {
retrieved = IconTheme.of(context);
diff --git a/packages/flutter/test/cupertino/localizations_test.dart b/packages/flutter/test/cupertino/localizations_test.dart
index a3ecf82..e87d290 100644
--- a/packages/flutter/test/cupertino/localizations_test.dart
+++ b/packages/flutter/test/cupertino/localizations_test.dart
@@ -2,8 +2,6 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-// @dart = 2.8
-
import 'package:flutter/cupertino.dart';
import 'package:flutter_test/flutter_test.dart';
diff --git a/packages/flutter/test/cupertino/nav_bar_test.dart b/packages/flutter/test/cupertino/nav_bar_test.dart
index 035dd3c..7ef0f65 100644
--- a/packages/flutter/test/cupertino/nav_bar_test.dart
+++ b/packages/flutter/test/cupertino/nav_bar_test.dart
@@ -2,8 +2,6 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-// @dart = 2.8
-
import 'package:flutter/cupertino.dart';
import 'package:flutter/rendering.dart';
import 'package:flutter/services.dart';
@@ -394,11 +392,11 @@
..sort((Element a, Element b) {
final RenderParagraph aParagraph = a.renderObject as RenderParagraph;
final RenderParagraph bParagraph = b.renderObject as RenderParagraph;
- return aParagraph.text.style.fontSize.compareTo(bParagraph.text.style.fontSize);
+ return aParagraph.text.style!.fontSize!.compareTo(bParagraph.text.style!.fontSize!);
});
Iterable<double> opacities = titles.map<double>((Element element) {
- final RenderAnimatedOpacity renderOpacity = element.findAncestorRenderObjectOfType<RenderAnimatedOpacity>();
+ final RenderAnimatedOpacity renderOpacity = element.findAncestorRenderObjectOfType<RenderAnimatedOpacity>()!;
return renderOpacity.opacity.value;
});
@@ -419,11 +417,11 @@
..sort((Element a, Element b) {
final RenderParagraph aParagraph = a.renderObject as RenderParagraph;
final RenderParagraph bParagraph = b.renderObject as RenderParagraph;
- return aParagraph.text.style.fontSize.compareTo(bParagraph.text.style.fontSize);
+ return aParagraph.text.style!.fontSize!.compareTo(bParagraph.text.style!.fontSize!);
});
opacities = titles.map<double>((Element element) {
- final RenderAnimatedOpacity renderOpacity = element.findAncestorRenderObjectOfType<RenderAnimatedOpacity>();
+ final RenderAnimatedOpacity renderOpacity = element.findAncestorRenderObjectOfType<RenderAnimatedOpacity>()!;
return renderOpacity.opacity.value;
});
@@ -531,7 +529,7 @@
expect(find.text('Different title'), findsOneWidget);
RenderAnimatedOpacity largeTitleOpacity =
- tester.element(find.text('Title')).findAncestorRenderObjectOfType<RenderAnimatedOpacity>();
+ tester.element(find.text('Title')).findAncestorRenderObjectOfType<RenderAnimatedOpacity>()!;
// Large title initially visible.
expect(
largeTitleOpacity.opacity.value,
@@ -550,7 +548,7 @@
await tester.pump(const Duration(milliseconds: 300));
largeTitleOpacity =
- tester.element(find.text('Title')).findAncestorRenderObjectOfType<RenderAnimatedOpacity>();
+ tester.element(find.text('Title')).findAncestorRenderObjectOfType<RenderAnimatedOpacity>()!;
// Large title no longer visible.
expect(
largeTitleOpacity.opacity.value,
@@ -680,7 +678,7 @@
final BoxDecoration decoration = decoratedBox.decoration as BoxDecoration;
expect(decoration.border, isNotNull);
- final BorderSide side = decoration.border.bottom;
+ final BorderSide side = decoration.border!.bottom;
expect(side, isNotNull);
});
@@ -708,7 +706,7 @@
final BoxDecoration decoration = decoratedBox.decoration as BoxDecoration;
expect(decoration.border, isNotNull);
- final BorderSide side = decoration.border.bottom;
+ final BorderSide side = decoration.border!.bottom;
expect(side, isNotNull);
expect(side.color, const Color(0xFFAABBCC));
});
@@ -757,7 +755,7 @@
final BoxDecoration decoration = decoratedBox.decoration as BoxDecoration;
expect(decoration.border, isNotNull);
- final BorderSide bottom = decoration.border.bottom;
+ final BorderSide bottom = decoration.border!.bottom;
expect(bottom, isNotNull);
});
@@ -863,10 +861,10 @@
final BoxDecoration decoration = decoratedBox.decoration as BoxDecoration;
expect(decoration.border, isNotNull);
- final BorderSide top = decoration.border.top;
+ final BorderSide top = decoration.border!.top;
expect(top, isNotNull);
expect(top, BorderSide.none);
- final BorderSide bottom = decoration.border.bottom;
+ final BorderSide bottom = decoration.border!.bottom;
expect(bottom, isNotNull);
expect(bottom.color, const Color(0xFFAABBCC));
});
@@ -1108,7 +1106,7 @@
CupertinoApp(
home: Builder(builder: (BuildContext context) {
return MediaQuery(
- data: MediaQuery.of(context).copyWith(textScaleFactor: 99),
+ data: MediaQuery.of(context)!.copyWith(textScaleFactor: 99),
child: CupertinoPageScaffold(
child: CustomScrollView(
slivers: <Widget>[
@@ -1156,7 +1154,7 @@
title: 'title',
builder: (BuildContext context) {
return MediaQuery(
- data: MediaQuery.of(context).copyWith(textScaleFactor: 99),
+ data: MediaQuery.of(context)!.copyWith(textScaleFactor: 99),
child: Container(
child: const CupertinoPageScaffold(
child: CustomScrollView(
@@ -1190,14 +1188,17 @@
}
class _ExpectStyles extends StatelessWidget {
- const _ExpectStyles({ this.color, this.index });
+ const _ExpectStyles({
+ required this.color,
+ required this.index
+ });
final Color color;
final int index;
@override
Widget build(BuildContext context) {
- final TextStyle style = DefaultTextStyle.of(context).style;
+ final TextStyle style = DefaultTextStyle.of(context).style!;
expect(style.color, isSameColorAs(color));
expect(style.fontFamily, '.SF Pro Text');
expect(style.fontSize, 17.0);
diff --git a/packages/flutter/test/cupertino/nav_bar_transition_test.dart b/packages/flutter/test/cupertino/nav_bar_transition_test.dart
index e214cbd..f7f46b2 100644
--- a/packages/flutter/test/cupertino/nav_bar_transition_test.dart
+++ b/packages/flutter/test/cupertino/nav_bar_transition_test.dart
@@ -2,28 +2,26 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-// @dart = 2.8
-
import 'package:flutter/cupertino.dart';
import 'package:flutter/rendering.dart';
import 'package:flutter_test/flutter_test.dart';
Future<void> startTransitionBetween(
WidgetTester tester, {
- Widget from,
- Widget to,
- String fromTitle,
- String toTitle,
+ Widget? from,
+ Widget? to,
+ String? fromTitle,
+ String? toTitle,
TextDirection textDirection = TextDirection.ltr,
- CupertinoThemeData theme,
+ CupertinoThemeData? theme,
}) async {
await tester.pumpWidget(
CupertinoApp(
theme: theme,
- builder: (BuildContext context, Widget navigator) {
+ builder: (BuildContext context, Widget? navigator) {
return Directionality(
textDirection: textDirection,
- child: navigator,
+ child: navigator!,
);
},
home: const Placeholder(),
@@ -34,7 +32,7 @@
.state<NavigatorState>(find.byType(Navigator))
.push(CupertinoPageRoute<void>(
title: fromTitle,
- builder: (BuildContext context) => scaffoldForNavBar(from),
+ builder: (BuildContext context) => scaffoldForNavBar(from)!,
));
await tester.pump();
@@ -44,16 +42,16 @@
.state<NavigatorState>(find.byType(Navigator))
.push(CupertinoPageRoute<void>(
title: toTitle,
- builder: (BuildContext context) => scaffoldForNavBar(to),
+ builder: (BuildContext context) => scaffoldForNavBar(to)!,
));
await tester.pump();
}
-CupertinoPageScaffold scaffoldForNavBar(Widget navBar) {
+CupertinoPageScaffold? scaffoldForNavBar(Widget? navBar) {
if (navBar is CupertinoNavigationBar || navBar == null) {
return CupertinoPageScaffold(
- navigationBar: navBar as CupertinoNavigationBar ?? const CupertinoNavigationBar(),
+ navigationBar: navBar as CupertinoNavigationBar? ?? const CupertinoNavigationBar(),
child: const Placeholder(),
);
} else if (navBar is CupertinoSliverNavigationBar) {
@@ -175,10 +173,10 @@
// The transition's stack is ordered. The bottom middle is inserted first.
final RenderParagraph bottomMiddle =
tester.renderObject(flying(tester, find.text('Page 1')).first);
- expect(bottomMiddle.text.style.color, const Color(0xff00050a));
- expect(bottomMiddle.text.style.fontWeight, FontWeight.w600);
- expect(bottomMiddle.text.style.fontFamily, '.SF Pro Text');
- expect(bottomMiddle.text.style.letterSpacing, -0.41);
+ expect(bottomMiddle.text.style!.color, const Color(0xff00050a));
+ expect(bottomMiddle.text.style!.fontWeight, FontWeight.w600);
+ expect(bottomMiddle.text.style!.fontFamily, '.SF Pro Text');
+ expect(bottomMiddle.text.style!.letterSpacing, -0.41);
checkOpacity(
tester, flying(tester, find.text('Page 1')).first, 0.9004602432250977);
@@ -187,26 +185,26 @@
// are flipped.
final RenderParagraph topBackLabel =
tester.renderObject(flying(tester, find.text('Page 1')).last);
- expect(topBackLabel.text.style.color, const Color(0xff00050a));
- expect(topBackLabel.text.style.fontWeight, FontWeight.w600);
- expect(topBackLabel.text.style.fontFamily, '.SF Pro Text');
- expect(topBackLabel.text.style.letterSpacing, -0.41);
+ expect(topBackLabel.text.style!.color, const Color(0xff00050a));
+ expect(topBackLabel.text.style!.fontWeight, FontWeight.w600);
+ expect(topBackLabel.text.style!.fontFamily, '.SF Pro Text');
+ expect(topBackLabel.text.style!.letterSpacing, -0.41);
checkOpacity(tester, flying(tester, find.text('Page 1')).last, 0.0);
// Move animation further a bit.
await tester.pump(const Duration(milliseconds: 200));
- expect(bottomMiddle.text.style.color, const Color(0xff006de4));
- expect(bottomMiddle.text.style.fontWeight, FontWeight.w400);
- expect(bottomMiddle.text.style.fontFamily, '.SF Pro Text');
- expect(bottomMiddle.text.style.letterSpacing, -0.41);
+ expect(bottomMiddle.text.style!.color, const Color(0xff006de4));
+ expect(bottomMiddle.text.style!.fontWeight, FontWeight.w400);
+ expect(bottomMiddle.text.style!.fontFamily, '.SF Pro Text');
+ expect(bottomMiddle.text.style!.letterSpacing, -0.41);
checkOpacity(tester, flying(tester, find.text('Page 1')).first, 0.0);
- expect(topBackLabel.text.style.color, const Color(0xff006de4));
- expect(topBackLabel.text.style.fontWeight, FontWeight.w400);
- expect(topBackLabel.text.style.fontFamily, '.SF Pro Text');
- expect(topBackLabel.text.style.letterSpacing, -0.41);
+ expect(topBackLabel.text.style!.color, const Color(0xff006de4));
+ expect(topBackLabel.text.style!.fontWeight, FontWeight.w400);
+ expect(topBackLabel.text.style!.fontFamily, '.SF Pro Text');
+ expect(topBackLabel.text.style!.letterSpacing, -0.41);
checkOpacity(
tester, flying(tester, find.text('Page 1')).last, 0.7630139589309692);
@@ -225,10 +223,10 @@
// The transition's stack is ordered. The bottom middle is inserted first.
final RenderParagraph bottomMiddle =
tester.renderObject(flying(tester, find.text('Page 1')).first);
- expect(bottomMiddle.text.style.color, const Color(0xFFF4F9FF));
- expect(bottomMiddle.text.style.fontWeight, FontWeight.w600);
- expect(bottomMiddle.text.style.fontFamily, '.SF Pro Text');
- expect(bottomMiddle.text.style.letterSpacing, -0.41);
+ expect(bottomMiddle.text.style!.color, const Color(0xFFF4F9FF));
+ expect(bottomMiddle.text.style!.fontWeight, FontWeight.w600);
+ expect(bottomMiddle.text.style!.fontFamily, '.SF Pro Text');
+ expect(bottomMiddle.text.style!.letterSpacing, -0.41);
checkOpacity(tester, flying(tester, find.text('Page 1')).first, 0.9004602432250977);
@@ -236,26 +234,26 @@
// are flipped.
final RenderParagraph topBackLabel =
tester.renderObject(flying(tester, find.text('Page 1')).last);
- expect(topBackLabel.text.style.color, const Color(0xFFF4F9FF));
- expect(topBackLabel.text.style.fontWeight, FontWeight.w600);
- expect(topBackLabel.text.style.fontFamily, '.SF Pro Text');
- expect(topBackLabel.text.style.letterSpacing, -0.41);
+ expect(topBackLabel.text.style!.color, const Color(0xFFF4F9FF));
+ expect(topBackLabel.text.style!.fontWeight, FontWeight.w600);
+ expect(topBackLabel.text.style!.fontFamily, '.SF Pro Text');
+ expect(topBackLabel.text.style!.letterSpacing, -0.41);
checkOpacity(tester, flying(tester, find.text('Page 1')).last, 0.0);
// Move animation further a bit.
await tester.pump(const Duration(milliseconds: 200));
- expect(bottomMiddle.text.style.color, const Color(0xFF2390FF));
- expect(bottomMiddle.text.style.fontWeight, FontWeight.w400);
- expect(bottomMiddle.text.style.fontFamily, '.SF Pro Text');
- expect(bottomMiddle.text.style.letterSpacing, -0.41);
+ expect(bottomMiddle.text.style!.color, const Color(0xFF2390FF));
+ expect(bottomMiddle.text.style!.fontWeight, FontWeight.w400);
+ expect(bottomMiddle.text.style!.fontFamily, '.SF Pro Text');
+ expect(bottomMiddle.text.style!.letterSpacing, -0.41);
checkOpacity(tester, flying(tester, find.text('Page 1')).first, 0.0);
- expect(topBackLabel.text.style.color, const Color(0xFF2390FF));
- expect(topBackLabel.text.style.fontWeight, FontWeight.w400);
- expect(topBackLabel.text.style.fontFamily, '.SF Pro Text');
- expect(topBackLabel.text.style.letterSpacing, -0.41);
+ expect(topBackLabel.text.style!.color, const Color(0xFF2390FF));
+ expect(topBackLabel.text.style!.fontWeight, FontWeight.w400);
+ expect(topBackLabel.text.style!.fontFamily, '.SF Pro Text');
+ expect(topBackLabel.text.style!.letterSpacing, -0.41);
checkOpacity(tester, flying(tester, find.text('Page 1')).last, 0.7630139589309692);
});
@@ -271,7 +269,7 @@
.state<NavigatorState>(find.byType(Navigator))
.push(CupertinoPageRoute<void>(
title: 'Page 1',
- builder: (BuildContext context) => scaffoldForNavBar(null),
+ builder: (BuildContext context) => scaffoldForNavBar(null)!,
));
await tester.pump();
@@ -282,7 +280,7 @@
.push(CupertinoPageRoute<void>(
title: 'Page 2',
fullscreenDialog: true,
- builder: (BuildContext context) => scaffoldForNavBar(null),
+ builder: (BuildContext context) => scaffoldForNavBar(null)!,
));
await tester.pump();
@@ -328,7 +326,7 @@
// The transition's stack is ordered. The bottom middle is inserted first.
final RenderParagraph bottomMiddle =
tester.renderObject(flying(tester, find.text('Page 1')).first);
- expect(bottomMiddle.text.style.color, const Color(0xff00050a));
+ expect(bottomMiddle.text.style!.color, const Color(0xff00050a));
expect(
tester.getTopLeft(flying(tester, find.text('Page 1')).first),
const Offset(337.0234375, 13.5),
@@ -338,7 +336,7 @@
// are flipped.
final RenderParagraph topBackLabel =
tester.renderObject(flying(tester, find.text('Page 1')).last);
- expect(topBackLabel.text.style.color, const Color(0xff00050a));
+ expect(topBackLabel.text.style!.color, const Color(0xff00050a));
expect(
tester.getTopLeft(flying(tester, find.text('Page 1')).last),
const Offset(337.0234375, 13.5),
@@ -373,7 +371,7 @@
// The transition's stack is ordered. The bottom middle is inserted first.
final RenderParagraph bottomMiddle =
tester.renderObject(flying(tester, find.text('Page 1')).first);
- expect(bottomMiddle.text.style.color, const Color(0xff00050a));
+ expect(bottomMiddle.text.style!.color, const Color(0xff00050a));
expect(
tester.getTopLeft(flying(tester, find.text('Page 1')).first),
const Offset(362.9765625, 13.5),
@@ -383,7 +381,7 @@
// are flipped.
final RenderParagraph topBackLabel =
tester.renderObject(flying(tester, find.text('Page 1')).last);
- expect(topBackLabel.text.style.color, const Color(0xff00050a));
+ expect(topBackLabel.text.style!.color, const Color(0xff00050a));
expect(
tester.getTopLeft(flying(tester, find.text('Page 1')).last),
const Offset(362.9765625, 13.5),
@@ -584,7 +582,7 @@
.state<NavigatorState>(find.byType(Navigator))
.push(CupertinoPageRoute<void>(
title: 'Page 1',
- builder: (BuildContext context) => scaffoldForNavBar(null),
+ builder: (BuildContext context) => scaffoldForNavBar(null)!,
));
await tester.pump();
@@ -612,10 +610,10 @@
testWidgets('First appearance of back chevron fades in from the left in RTL', (WidgetTester tester) async {
await tester.pumpWidget(
CupertinoApp(
- builder: (BuildContext context, Widget navigator) {
+ builder: (BuildContext context, Widget? navigator) {
return Directionality(
textDirection: TextDirection.rtl,
- child: navigator,
+ child: navigator!,
);
},
home: scaffoldForNavBar(null),
@@ -626,7 +624,7 @@
.state<NavigatorState>(find.byType(Navigator))
.push(CupertinoPageRoute<void>(
title: 'Page 1',
- builder: (BuildContext context) => scaffoldForNavBar(null),
+ builder: (BuildContext context) => scaffoldForNavBar(null)!,
));
await tester.pump();
@@ -778,7 +776,7 @@
.state<NavigatorState>(find.byType(Navigator))
.push(CupertinoPageRoute<void>(
title: 'Page 3',
- builder: (BuildContext context) => scaffoldForNavBar(null),
+ builder: (BuildContext context) => scaffoldForNavBar(null)!,
));
await tester.pump();
@@ -815,7 +813,7 @@
.state<NavigatorState>(find.byType(Navigator))
.push(CupertinoPageRoute<void>(
title: 'Page 3',
- builder: (BuildContext context) => scaffoldForNavBar(null),
+ builder: (BuildContext context) => scaffoldForNavBar(null)!,
));
await tester.pump();
@@ -931,30 +929,30 @@
// The transition's stack is ordered. The bottom large title is inserted first.
final RenderParagraph bottomLargeTitle =
tester.renderObject(flying(tester, find.text('Page 1')).first);
- expect(bottomLargeTitle.text.style.color, const Color(0xff00050a));
- expect(bottomLargeTitle.text.style.fontWeight, FontWeight.w700);
- expect(bottomLargeTitle.text.style.fontFamily, '.SF Pro Display');
- expect(bottomLargeTitle.text.style.letterSpacing, moreOrLessEquals(0.374765625));
+ expect(bottomLargeTitle.text.style!.color, const Color(0xff00050a));
+ expect(bottomLargeTitle.text.style!.fontWeight, FontWeight.w700);
+ expect(bottomLargeTitle.text.style!.fontFamily, '.SF Pro Display');
+ expect(bottomLargeTitle.text.style!.letterSpacing, moreOrLessEquals(0.374765625));
// The top back label is styled exactly the same way.
final RenderParagraph topBackLabel =
tester.renderObject(flying(tester, find.text('Page 1')).last);
- expect(topBackLabel.text.style.color, const Color(0xff00050a));
- expect(topBackLabel.text.style.fontWeight, FontWeight.w700);
- expect(topBackLabel.text.style.fontFamily, '.SF Pro Display');
- expect(topBackLabel.text.style.letterSpacing, moreOrLessEquals(0.374765625));
+ expect(topBackLabel.text.style!.color, const Color(0xff00050a));
+ expect(topBackLabel.text.style!.fontWeight, FontWeight.w700);
+ expect(topBackLabel.text.style!.fontFamily, '.SF Pro Display');
+ expect(topBackLabel.text.style!.letterSpacing, moreOrLessEquals(0.374765625));
// Move animation further a bit.
await tester.pump(const Duration(milliseconds: 200));
- expect(bottomLargeTitle.text.style.color, const Color(0xff006de4));
- expect(bottomLargeTitle.text.style.fontWeight, FontWeight.w400);
- expect(bottomLargeTitle.text.style.fontFamily, '.SF Pro Text');
- expect(bottomLargeTitle.text.style.letterSpacing, moreOrLessEquals(-0.32379547566175454));
+ expect(bottomLargeTitle.text.style!.color, const Color(0xff006de4));
+ expect(bottomLargeTitle.text.style!.fontWeight, FontWeight.w400);
+ expect(bottomLargeTitle.text.style!.fontFamily, '.SF Pro Text');
+ expect(bottomLargeTitle.text.style!.letterSpacing, moreOrLessEquals(-0.32379547566175454));
- expect(topBackLabel.text.style.color, const Color(0xff006de4));
- expect(topBackLabel.text.style.fontWeight, FontWeight.w400);
- expect(topBackLabel.text.style.fontFamily, '.SF Pro Text');
- expect(topBackLabel.text.style.letterSpacing, moreOrLessEquals(-0.32379547566175454));
+ expect(topBackLabel.text.style!.color, const Color(0xff006de4));
+ expect(topBackLabel.text.style!.fontWeight, FontWeight.w400);
+ expect(topBackLabel.text.style!.fontFamily, '.SF Pro Text');
+ expect(topBackLabel.text.style!.letterSpacing, moreOrLessEquals(-0.32379547566175454));
});
testWidgets('Top middle fades in and slides in from the right', (WidgetTester tester) async {
diff --git a/packages/flutter/test/cupertino/page_test.dart b/packages/flutter/test/cupertino/page_test.dart
index fe0f4d4..aa069ee 100644
--- a/packages/flutter/test/cupertino/page_test.dart
+++ b/packages/flutter/test/cupertino/page_test.dart
@@ -2,8 +2,6 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-// @dart = 2.8
-
import 'package:flutter/cupertino.dart';
import 'package:flutter_test/flutter_test.dart';
@@ -276,10 +274,10 @@
testWidgets('test edge swipes work with media query padding (LTR)', (WidgetTester tester) async {
await tester.pumpWidget(
CupertinoApp(
- builder: (BuildContext context, Widget navigator) {
+ builder: (BuildContext context, Widget? navigator) {
return MediaQuery(
data: const MediaQueryData(padding: EdgeInsets.only(left: 40)),
- child: navigator,
+ child: navigator!,
);
},
home: const Placeholder(),
@@ -320,12 +318,12 @@
testWidgets('test edge swipes work with media query padding (RLT)', (WidgetTester tester) async {
await tester.pumpWidget(
CupertinoApp(
- builder: (BuildContext context, Widget navigator) {
+ builder: (BuildContext context, Widget? navigator) {
return Directionality(
textDirection: TextDirection.rtl,
child: MediaQuery(
data: const MediaQueryData(padding: EdgeInsets.only(right: 40)),
- child: navigator,
+ child: navigator!,
),
);
},
@@ -471,7 +469,7 @@
expect(find.text('subpage'), findsOneWidget);
expect(find.text('home'), findsNothing);
- navigator.currentState.pop();
+ navigator.currentState!.pop();
await tester.pump();
expect(find.text('subpage'), findsOneWidget);
@@ -498,14 +496,14 @@
class KeepsStateTestWidget extends StatefulWidget {
const KeepsStateTestWidget({this.navigatorKey});
- final Key navigatorKey;
+ final Key? navigatorKey;
@override
State<KeepsStateTestWidget> createState() => _KeepsStateTestWidgetState();
}
class _KeepsStateTestWidgetState extends State<KeepsStateTestWidget> {
- String _subpage = 'subpage';
+ String? _subpage = 'subpage';
@override
Widget build(BuildContext context) {
@@ -514,7 +512,7 @@
key: widget.navigatorKey,
pages: <Page<void>>[
const CupertinoPage<void>(child: Text('home')),
- if (_subpage != null) CupertinoPage<void>(child: Text(_subpage)),
+ if (_subpage != null) CupertinoPage<void>(child: Text(_subpage!)),
],
onPopPage: (Route<dynamic> route, dynamic result) {
if (!route.didPop(result)) {
diff --git a/packages/flutter/test/cupertino/picker_test.dart b/packages/flutter/test/cupertino/picker_test.dart
index bb7d7a8..54d76a4 100644
--- a/packages/flutter/test/cupertino/picker_test.dart
+++ b/packages/flutter/test/cupertino/picker_test.dart
@@ -2,8 +2,6 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-// @dart = 2.8
-
import 'package:flutter/cupertino.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/rendering.dart';
@@ -39,8 +37,8 @@
final RenderParagraph paragraph = tester.renderObject(find.text('1'));
- expect(paragraph.text.style.color, isSameColorAs(CupertinoColors.black));
- expect(paragraph.text.style.copyWith(color: CupertinoColors.black), const TextStyle(
+ expect(paragraph.text.style!.color, isSameColorAs(CupertinoColors.black));
+ expect(paragraph.text.style!.copyWith(color: CupertinoColors.black), const TextStyle(
inherit: false,
fontFamily: '.SF Pro Display',
fontSize: 21.0,