[NNBD] Migrate some Widgets tests (#68157)

This commit is contained in:
Kate Lovett 2020-10-15 15:42:05 -07:00 committed by GitHub
parent 73301a35a2
commit 5aef988adc
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
27 changed files with 208 additions and 277 deletions

View file

@ -412,7 +412,7 @@ class MethodChannel {
/// return value of the call. The value will be encoded using
/// [MethodCodec.encodeSuccessEnvelope], to act as if platform plugin had
/// returned that value.
void setMockMethodCallHandler(Future<dynamic> Function(MethodCall call)? handler) {
void setMockMethodCallHandler(Future<dynamic>? Function(MethodCall call)? handler) {
_methodChannelMockHandlers[this] = handler;
binaryMessenger.setMockMessageHandler(
name,
@ -430,7 +430,7 @@ class MethodChannel {
/// is not set.
bool checkMockMethodCallHandler(Future<dynamic> Function(MethodCall call)? handler) => _methodChannelMockHandlers[this] == handler;
Future<ByteData?> _handleAsMethodCall(ByteData? message, Future<dynamic> handler(MethodCall call)) async {
Future<ByteData?> _handleAsMethodCall(ByteData? message, Future<dynamic>? handler(MethodCall call)) async {
final MethodCall call = codec.decodeMethodCall(message);
try {
return codec.encodeSuccessEnvelope(await handler(call));

View file

@ -195,7 +195,7 @@ class FakeTextChannel implements MethodChannel {
bool checkMethodCallHandler(Future<void> Function(MethodCall call)? handler) => throw UnimplementedError();
@override
void setMockMethodCallHandler(Future<void> Function(MethodCall call)? handler) => throw UnimplementedError();
void setMockMethodCallHandler(Future<void>? Function(MethodCall call)? handler) => throw UnimplementedError();
@override
bool checkMockMethodCallHandler(Future<void> Function(MethodCall call)? handler) => throw UnimplementedError();

View file

@ -460,7 +460,7 @@ class FakeTextChannel implements MethodChannel {
@override
void setMockMethodCallHandler(Future<void> Function(MethodCall call)? handler) => throw UnimplementedError();
void setMockMethodCallHandler(Future<void>? Function(MethodCall call)? handler) => throw UnimplementedError();
@override
bool checkMockMethodCallHandler(Future<void> Function(MethodCall call)? handler) => throw UnimplementedError();

View file

@ -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/rendering.dart';
import 'package:flutter/widgets.dart';
@ -27,7 +25,7 @@ void main() {
),
),
));
final RenderBox box = inner.currentContext.findRenderObject() as RenderBox;
final RenderBox box = inner.currentContext!.findRenderObject()! as RenderBox;
expect(box.localToGlobal(Offset.zero), equals(const Offset(745.0, 565.0)));
expect(box.size, equals(const Size(100.0, 50.0)));
});
@ -64,7 +62,7 @@ void main() {
),
),
));
final RenderBox box = inner.currentContext.findRenderObject() as RenderBox;
final RenderBox box = inner.currentContext!.findRenderObject()! as RenderBox;
expect(box.size, equals(const Size(50.0, 50.0)));
expect(
box.localToGlobal(box.size.center(Offset.zero)),
@ -87,7 +85,7 @@ void main() {
),
),
));
final RenderBox box = inner.currentContext.findRenderObject() as RenderBox;
final RenderBox box = inner.currentContext!.findRenderObject()! as RenderBox;
expect(box.size, equals(const Size(50.0, 50.0)));
expect(
box.localToGlobal(box.size.center(Offset.zero)),

View file

@ -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/foundation.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:flutter/widgets.dart';
@ -23,8 +21,7 @@ void main() {
OverlayEntry(
builder: (BuildContext context) {
didBuild = true;
final Overlay overlay = context.findAncestorWidgetOfExactType<Overlay>();
expect(overlay, isNotNull);
final Overlay overlay = context.findAncestorWidgetOfExactType<Overlay>()!;
expect(overlay.key, equals(overlayKey));
return Container();
},
@ -37,7 +34,7 @@ void main() {
),
);
expect(didBuild, isTrue);
final RenderObject theater = overlayKey.currentContext.findRenderObject();
final RenderObject theater = overlayKey.currentContext!.findRenderObject()!;
expect(theater, hasAGoodToStringDeep);
expect(
@ -110,7 +107,7 @@ void main() {
),
),
);
final RenderObject theater = overlayKey.currentContext.findRenderObject();
final RenderObject theater = overlayKey.currentContext!.findRenderObject()!;
expect(theater, hasAGoodToStringDeep);
expect(
@ -189,7 +186,7 @@ void main() {
expect(buildOrder, <String>['Base']);
buildOrder.clear();
final OverlayState overlay = overlayKey.currentState as OverlayState;
final OverlayState overlay = overlayKey.currentState! as OverlayState;
overlay.insert(
OverlayEntry(
builder: (BuildContext context) {
@ -227,7 +224,7 @@ void main() {
expect(buildOrder, <String>['Base']);
buildOrder.clear();
final OverlayState overlay = overlayKey.currentState as OverlayState;
final OverlayState overlay = overlayKey.currentState! as OverlayState;
overlay.insert(
OverlayEntry(
builder: (BuildContext context) {
@ -272,7 +269,7 @@ void main() {
expect(buildOrder, <String>['Base', 'Top']);
buildOrder.clear();
final OverlayState overlay = overlayKey.currentState as OverlayState;
final OverlayState overlay = overlayKey.currentState! as OverlayState;
overlay.insert(
OverlayEntry(
builder: (BuildContext context) {
@ -325,7 +322,7 @@ void main() {
];
buildOrder.clear();
final OverlayState overlay = overlayKey.currentState as OverlayState;
final OverlayState overlay = overlayKey.currentState! as OverlayState;
overlay.insertAll(entries);
await tester.pump();
@ -371,7 +368,7 @@ void main() {
];
buildOrder.clear();
final OverlayState overlay = overlayKey.currentState as OverlayState;
final OverlayState overlay = overlayKey.currentState! as OverlayState;
overlay.insertAll(entries, below: base);
await tester.pump();
@ -423,7 +420,7 @@ void main() {
];
buildOrder.clear();
final OverlayState overlay = overlayKey.currentState as OverlayState;
final OverlayState overlay = overlayKey.currentState! as OverlayState;
overlay.insertAll(entries, above: base);
await tester.pump();
@ -486,7 +483,7 @@ void main() {
];
buildOrder.clear();
final OverlayState overlay = overlayKey.currentState as OverlayState;
final OverlayState overlay = overlayKey.currentState! as OverlayState;
overlay.rearrange(rearranged);
await tester.pump();
@ -549,7 +546,7 @@ void main() {
];
buildOrder.clear();
final OverlayState overlay = overlayKey.currentState as OverlayState;
final OverlayState overlay = overlayKey.currentState! as OverlayState;
overlay.rearrange(rearranged, above: initialEntries[2]);
await tester.pump();
@ -612,7 +609,7 @@ void main() {
];
buildOrder.clear();
final OverlayState overlay = overlayKey.currentState as OverlayState;
final OverlayState overlay = overlayKey.currentState! as OverlayState;
overlay.rearrange(rearranged, below: initialEntries[2]);
await tester.pump();
@ -639,7 +636,7 @@ void main() {
),
);
final OverlayState overlay = overlayKey.currentState as OverlayState;
final OverlayState overlay = overlayKey.currentState! as OverlayState;
try {
overlay.insert(
@ -657,8 +654,7 @@ void main() {
},
),
);
} catch (e) {
expect(e, isAssertionError);
} on AssertionError catch (e) {
expect(e.message, 'Only one of `above` and `below` may be specified.');
}
@ -680,8 +676,7 @@ void main() {
},
),
);
} catch (e) {
expect(e, isAssertionError);
} on AssertionError catch (e) {
expect(e.message, 'The provided entry used for `above` must be present in the Overlay.');
}
@ -692,8 +687,7 @@ void main() {
},
));
} catch (e) {
expect(e, isAssertionError);
} on AssertionError catch (e) {
expect(e.message, 'The provided entry used for `above` must be present in the Overlay and in the `newEntriesList`.');
}
@ -706,7 +700,7 @@ void main() {
textDirection: TextDirection.ltr,
child: Builder(
builder: (BuildContext context) {
FlutterError error;
late FlutterError error;
final Widget debugRequiredFor = Container();
try {
Overlay.of(context, debugRequiredFor: debugRequiredFor);
@ -778,7 +772,7 @@ void main() {
expect(newEntry.opaque, isTrue);
// The new opaqueness is honored when inserted into an overlay.
overlayKey.currentState.insert(newEntry);
overlayKey.currentState!.insert(newEntry);
await tester.pumpAndSettle();
expect(find.byKey(root), findsNothing);
@ -892,7 +886,7 @@ void main() {
expect(tester.state<StatefulTestState>(find.byKey(bottom)).rebuildCount, 1);
expect(tester.state<StatefulTestState>(find.byKey(top)).rebuildCount, 1);
overlayKey.currentState.rearrange(<OverlayEntry>[
overlayKey.currentState!.rearrange(<OverlayEntry>[
bottomEntry, middleEntry, topEntry,
]);
await tester.pump();
@ -932,7 +926,7 @@ void main() {
await tester.tap(find.byKey(overlayKey));
expect(bottomTapCount, 1);
overlayKey.currentState.insert(OverlayEntry(
overlayKey.currentState!.insert(OverlayEntry(
maintainState: true,
opaque: true,
builder: (BuildContext context) {
@ -948,7 +942,7 @@ void main() {
expect(bottomTapCount, 1);
int topTapCount = 0;
overlayKey.currentState.insert(OverlayEntry(
overlayKey.currentState!.insert(OverlayEntry(
maintainState: true,
opaque: true,
builder: (BuildContext context) {
@ -1026,6 +1020,7 @@ void main() {
});
testWidgets('Overlay can set and update clipBehavior', (WidgetTester tester) async {
await tester.pumpWidget(
Directionality(
textDirection: TextDirection.ltr,
@ -1040,6 +1035,7 @@ void main() {
);
// By default, clipBehavior should be Clip.hardEdge
// ignore: unnecessary_nullable_for_final_variable_declarations
final dynamic renderObject = tester.renderObject(find.byType(Overlay));
expect(renderObject.clipBehavior, equals(Clip.hardEdge));
@ -1063,7 +1059,7 @@ void main() {
}
class StatefulTestWidget extends StatefulWidget {
const StatefulTestWidget({Key key}) : super(key: key);
const StatefulTestWidget({Key? key}) : super(key: key);
@override
State<StatefulTestWidget> createState() => StatefulTestState();

View file

@ -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' as math;
import 'package:flutter_test/flutter_test.dart';

View file

@ -2,18 +2,16 @@
// 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/material.dart';
import 'package:flutter/rendering.dart';
class TestTransition extends AnimatedWidget {
const TestTransition({
Key key,
this.childFirstHalf,
this.childSecondHalf,
Animation<double> animation,
Key? key,
required this.childFirstHalf,
required this.childSecondHalf,
required Animation<double> animation,
}) : super(key: key, listenable: animation);
final Widget childFirstHalf;
@ -29,7 +27,11 @@ class TestTransition extends AnimatedWidget {
}
class TestRoute<T> extends PageRoute<T> {
TestRoute({ this.child, RouteSettings settings, this.barrierColor }) : super(settings: settings);
TestRoute({
required this.child,
required RouteSettings settings,
this.barrierColor,
}) : super(settings: settings);
final Widget child;
@ -37,10 +39,10 @@ class TestRoute<T> extends PageRoute<T> {
Duration get transitionDuration => const Duration(milliseconds: 150);
@override
final Color barrierColor;
final Color? barrierColor;
@override
String get barrierLabel => null;
String? get barrierLabel => null;
@override
bool get maintainState => false;
@ -88,18 +90,18 @@ void main() {
child: Builder(
key: insideKey,
builder: (BuildContext context) {
final PageRoute<void> route = ModalRoute.of(context) as PageRoute<void>;
final PageRoute<void> route = ModalRoute.of(context)! as PageRoute<void>;
return Column(
children: <Widget>[
TestTransition(
childFirstHalf: const Text('A'),
childSecondHalf: const Text('B'),
animation: route.animation,
animation: route.animation!,
),
TestTransition(
childFirstHalf: const Text('C'),
childSecondHalf: const Text('D'),
animation: route.secondaryAnimation,
animation: route.secondaryAnimation!,
),
],
);
@ -115,7 +117,7 @@ void main() {
)
);
final NavigatorState navigator = insideKey.currentContext.findAncestorStateOfType<NavigatorState>();
final NavigatorState navigator = insideKey.currentContext!.findAncestorStateOfType<NavigatorState>()!;
expect(state(), equals('BC')); // transition ->1 is at 1.0

View file

@ -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/material.dart';
import 'package:flutter/widgets.dart';
import 'package:flutter_test/flutter_test.dart';
@ -28,7 +26,7 @@ class HomePage extends StatefulWidget {
class _HomePageState extends State<HomePage> {
void _presentModalPage() {
Navigator.of(context).push(PageRouteBuilder<void>(
Navigator.of(context)!.push(PageRouteBuilder<void>(
transitionDuration: const Duration(milliseconds: 300),
barrierColor: Colors.black54,
opaque: false,
@ -64,7 +62,7 @@ class ModalPage extends StatelessWidget {
highlightColor: Colors.transparent,
splashColor: Colors.transparent,
onTap: () {
Navigator.of(context).pop();
Navigator.of(context)!.pop();
},
child: const SizedBox.expand(),
),

View file

@ -2,15 +2,13 @@
// 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/material.dart';
void main() {
testWidgets('PageStorage read and write', (WidgetTester tester) async {
const Key builderKey = PageStorageKey<String>('builderKey');
StateSetter setState;
late StateSetter setState;
int storedValue = 0;
await tester.pumpWidget(
@ -18,7 +16,7 @@ void main() {
home: StatefulBuilder(
key: builderKey,
builder: (BuildContext context, StateSetter setter) {
PageStorage.of(context).writeState(context, storedValue);
PageStorage.of(context)!.writeState(context, storedValue);
setState = setter;
return Center(
child: Text('storedValue: $storedValue'),
@ -30,17 +28,17 @@ void main() {
final Element builderElement = tester.element(find.byKey(builderKey));
expect(PageStorage.of(builderElement), isNotNull);
expect(PageStorage.of(builderElement).readState(builderElement), equals(storedValue));
expect(PageStorage.of(builderElement)!.readState(builderElement), equals(storedValue));
setState(() {
storedValue = 1;
});
await tester.pump();
expect(PageStorage.of(builderElement).readState(builderElement), equals(storedValue));
expect(PageStorage.of(builderElement)!.readState(builderElement), equals(storedValue));
});
testWidgets('PageStorage read and write by identifier', (WidgetTester tester) async {
StateSetter setState;
late StateSetter setState;
int storedValue = 0;
Widget buildWidthKey(Key key) {
@ -48,7 +46,7 @@ void main() {
home: StatefulBuilder(
key: key,
builder: (BuildContext context, StateSetter setter) {
PageStorage.of(context).writeState(context, storedValue, identifier: 123);
PageStorage.of(context)!.writeState(context, storedValue, identifier: 123);
setState = setter;
return Center(
child: Text('storedValue: $storedValue'),
@ -62,8 +60,8 @@ void main() {
await tester.pumpWidget(buildWidthKey(key));
Element builderElement = tester.element(find.byKey(key));
expect(PageStorage.of(builderElement), isNotNull);
expect(PageStorage.of(builderElement).readState(builderElement), isNull);
expect(PageStorage.of(builderElement).readState(builderElement, identifier: 123), equals(storedValue));
expect(PageStorage.of(builderElement)!.readState(builderElement), isNull);
expect(PageStorage.of(builderElement)!.readState(builderElement, identifier: 123), equals(storedValue));
// New StatefulBuilder widget - different key - but the same PageStorage identifier.
@ -71,14 +69,14 @@ void main() {
await tester.pumpWidget(buildWidthKey(key));
builderElement = tester.element(find.byKey(key));
expect(PageStorage.of(builderElement), isNotNull);
expect(PageStorage.of(builderElement).readState(builderElement), isNull);
expect(PageStorage.of(builderElement).readState(builderElement, identifier: 123), equals(storedValue));
expect(PageStorage.of(builderElement)!.readState(builderElement), isNull);
expect(PageStorage.of(builderElement)!.readState(builderElement, identifier: 123), equals(storedValue));
setState(() {
storedValue = 1;
});
await tester.pump();
expect(PageStorage.of(builderElement).readState(builderElement, identifier: 123), equals(storedValue));
expect(PageStorage.of(builderElement)!.readState(builderElement, identifier: 123), equals(storedValue));
});
}

View file

@ -2,13 +2,11 @@
// 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/material.dart';
class TestOverlayRoute extends OverlayRoute<void> {
TestOverlayRoute({ RouteSettings settings }) : super(settings: settings);
TestOverlayRoute({ RouteSettings? settings }) : super(settings: settings);
@override
Iterable<OverlayEntry> createOverlayEntries() sync* {
yield OverlayEntry(builder: _build);
@ -17,7 +15,7 @@ class TestOverlayRoute extends OverlayRoute<void> {
}
class PersistentBottomSheetTest extends StatefulWidget {
const PersistentBottomSheetTest({ Key key }) : super(key: key);
const PersistentBottomSheetTest({ Key? key }) : super(key: key);
@override
PersistentBottomSheetTestState createState() => PersistentBottomSheetTestState();
@ -29,7 +27,7 @@ class PersistentBottomSheetTestState extends State<PersistentBottomSheetTest> {
bool setStateCalled = false;
void showBottomSheet() {
_scaffoldKey.currentState.showBottomSheet<void>((BuildContext context) {
_scaffoldKey.currentState!.showBottomSheet<void>((BuildContext context) {
return const Text('bottomSheet');
})
.closed.whenComplete(() {
@ -63,9 +61,9 @@ void main() {
expect(find.text('Settings'), findsNothing);
expect(find.text('Overlay'), findsNothing);
expect(Navigator.canPop(containerKey1.currentContext), isFalse);
Navigator.pushNamed(containerKey1.currentContext, '/settings');
expect(Navigator.canPop(containerKey1.currentContext), isTrue);
expect(Navigator.canPop(containerKey1.currentContext!), isFalse);
Navigator.pushNamed(containerKey1.currentContext!, '/settings');
expect(Navigator.canPop(containerKey1.currentContext!), isTrue);
await tester.pump();
@ -85,7 +83,7 @@ void main() {
expect(find.text('Settings'), isOnstage);
expect(find.text('Overlay'), findsNothing);
Navigator.push(containerKey2.currentContext, TestOverlayRoute());
Navigator.push(containerKey2.currentContext!, TestOverlayRoute());
await tester.pump();
@ -99,8 +97,8 @@ void main() {
expect(find.text('Settings'), isOnstage);
expect(find.text('Overlay'), isOnstage);
expect(Navigator.canPop(containerKey2.currentContext), isTrue);
Navigator.pop(containerKey2.currentContext);
expect(Navigator.canPop(containerKey2.currentContext!), isTrue);
Navigator.pop(containerKey2.currentContext!);
await tester.pump();
expect(find.text('Home'), findsNothing);
@ -113,8 +111,8 @@ void main() {
expect(find.text('Settings'), isOnstage);
expect(find.text('Overlay'), findsNothing);
expect(Navigator.canPop(containerKey2.currentContext), isTrue);
Navigator.pop(containerKey2.currentContext);
expect(Navigator.canPop(containerKey2.currentContext!), isTrue);
Navigator.pop(containerKey2.currentContext!);
await tester.pump();
await tester.pump();
@ -128,7 +126,7 @@ void main() {
expect(find.text('Settings'), findsNothing);
expect(find.text('Overlay'), findsNothing);
expect(Navigator.canPop(containerKey1.currentContext), isFalse);
expect(Navigator.canPop(containerKey1.currentContext!), isFalse);
});
testWidgets('Check back gesture disables Heroes', (WidgetTester tester) async {
@ -161,7 +159,7 @@ void main() {
await tester.pumpWidget(MaterialApp(routes: routes));
Navigator.pushNamed(containerKey1.currentContext, '/settings');
Navigator.pushNamed(containerKey1.currentContext!, '/settings');
await tester.pump();
await tester.pump(const Duration(milliseconds: 16));
@ -210,7 +208,7 @@ void main() {
await tester.pumpWidget(MaterialApp(routes: routes));
Navigator.pushNamed(containerKey1.currentContext, '/settings');
Navigator.pushNamed(containerKey1.currentContext!, '/settings');
await tester.pump();
await tester.pump(const Duration(milliseconds: 100));
@ -254,7 +252,7 @@ void main() {
await tester.pumpWidget(MaterialApp(routes: routes));
Navigator.pushNamed(containerKey1.currentContext, '/sheet');
Navigator.pushNamed(containerKey1.currentContext!, '/sheet');
await tester.pump();
await tester.pump(const Duration(seconds: 1));
@ -269,7 +267,7 @@ void main() {
await tester.pump();
await tester.pump(const Duration(seconds: 1));
Navigator.pushNamed(containerKey1.currentContext, '/sheet');
Navigator.pushNamed(containerKey1.currentContext!, '/sheet');
await tester.pump();
await tester.pump(const Duration(seconds: 1));
@ -278,7 +276,7 @@ void main() {
expect(find.text('Sheet'), isOnstage);
// Show the bottom sheet.
final PersistentBottomSheetTestState sheet = containerKey2.currentState as PersistentBottomSheetTestState;
final PersistentBottomSheetTestState sheet = containerKey2.currentState! as PersistentBottomSheetTestState;
sheet.showBottomSheet();
await tester.pump(const Duration(seconds: 1));

View file

@ -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/material.dart';
import 'package:flutter/rendering.dart';
@ -333,7 +331,7 @@ void main() {
final List<int> log = <int>[];
final PageController controller = PageController(viewportFraction: 0.9);
Widget build(PageController controller, { Size size }) {
Widget build(PageController controller, { Size? size }) {
final Widget pageView = Directionality(
textDirection: TextDirection.ltr,
child: PageView(
@ -429,7 +427,7 @@ void main() {
testWidgets('Page snapping disable and reenable', (WidgetTester tester) async {
final List<int> log = <int>[];
Widget build({ bool pageSnapping }) {
Widget build({ required bool pageSnapping }) {
return Directionality(
textDirection: TextDirection.ltr,
child: PageView(
@ -643,7 +641,7 @@ void main() {
(WidgetTester tester) async {
// Regression test for https://github.com/flutter/flutter/issues/23873.
final PageController controller = PageController(viewportFraction: 1/4, initialPage: 0);
int tappedIndex;
late int tappedIndex;
Widget build() {
return Directionality(

View file

@ -2,17 +2,14 @@
// 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/rendering.dart';
import 'package:flutter/widgets.dart';
import 'package:meta/meta.dart';
Size pageSize = const Size(600.0, 300.0);
const List<int> defaultPages = <int>[0, 1, 2, 3, 4, 5];
final List<GlobalKey> globalKeys = defaultPages.map<GlobalKey>((_) => GlobalKey()).toList();
int currentPage;
int? currentPage;
Widget buildPage(int page) {
return Container(
@ -26,7 +23,7 @@ Widget buildPage(int page) {
Widget buildFrame({
bool reverse = false,
List<int> pages = defaultPages,
@required TextDirection textDirection,
required TextDirection textDirection,
}) {
final PageView child = PageView(
scrollDirection: Axis.horizontal,

View file

@ -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/rendering.dart';
import 'package:flutter/widgets.dart';
@ -13,10 +11,10 @@ import 'test_widgets.dart';
class TestParentData {
TestParentData({ this.top, this.right, this.bottom, this.left });
final double top;
final double right;
final double bottom;
final double left;
final double? top;
final double? right;
final double? bottom;
final double? left;
}
void checkTree(WidgetTester tester, List<TestParentData> expectedParentData) {
@ -27,18 +25,18 @@ void checkTree(WidgetTester tester, List<TestParentData> expectedParentData) {
expect(element.renderObject, isA<RenderStack>());
final RenderStack renderObject = element.renderObject as RenderStack;
try {
RenderObject child = renderObject.firstChild;
RenderObject? child = renderObject.firstChild;
for (final TestParentData expected in expectedParentData) {
expect(child, isA<RenderDecoratedBox>());
final RenderDecoratedBox decoratedBox = child as RenderDecoratedBox;
final RenderDecoratedBox decoratedBox = child! as RenderDecoratedBox;
expect(decoratedBox.parentData, isA<StackParentData>());
final StackParentData parentData = decoratedBox.parentData as StackParentData;
final StackParentData parentData = decoratedBox.parentData! as StackParentData;
expect(parentData.top, equals(expected.top));
expect(parentData.right, equals(expected.right));
expect(parentData.bottom, equals(expected.bottom));
expect(parentData.left, equals(expected.left));
final StackParentData decoratedBoxParentData = decoratedBox.parentData as StackParentData;
child = decoratedBoxParentData.nextSibling;
final StackParentData? decoratedBoxParentData = decoratedBox.parentData as StackParentData?;
child = decoratedBoxParentData?.nextSibling;
}
expect(child, isNull);
} catch (e) {
@ -431,7 +429,7 @@ void main() {
child: Container(),
),
);
DummyParentData parentData = tester.renderObject(find.byType(Container)).parentData as DummyParentData;
DummyParentData parentData = tester.renderObject(find.byType(Container)).parentData! as DummyParentData;
expect(parentData.string, isNull);
await tester.pumpWidget(
@ -442,7 +440,7 @@ void main() {
),
),
);
parentData = tester.renderObject(find.byType(Container)).parentData as DummyParentData;
parentData = tester.renderObject(find.byType(Container)).parentData! as DummyParentData;
expect(parentData.string, 'Foo');
await tester.pumpWidget(
@ -453,16 +451,16 @@ void main() {
),
),
);
parentData = tester.renderObject(find.byType(Container)).parentData as DummyParentData;
parentData = tester.renderObject(find.byType(Container)).parentData! as DummyParentData;
expect(parentData.string, 'Bar');
});
}
class TestParentDataWidget extends ParentDataWidget<DummyParentData> {
const TestParentDataWidget({
Key key,
this.string,
Widget child,
Key? key,
required this.string,
required Widget child,
}) : super(key: key, child: child);
final String string;
@ -470,7 +468,7 @@ class TestParentDataWidget extends ParentDataWidget<DummyParentData> {
@override
void applyParentData(RenderObject renderObject) {
assert(renderObject.parentData is DummyParentData);
final DummyParentData parentData = renderObject.parentData as DummyParentData;
final DummyParentData parentData = renderObject.parentData! as DummyParentData;
parentData.string = string;
}
@ -479,13 +477,13 @@ class TestParentDataWidget extends ParentDataWidget<DummyParentData> {
}
class DummyParentData extends ParentData {
String string;
String? string;
}
class OneAncestorWidget extends SingleChildRenderObjectWidget {
const OneAncestorWidget({
Key key,
Widget child,
Key? key,
required Widget child,
}) : super(key: key, child: child);
@override
@ -494,8 +492,8 @@ class OneAncestorWidget extends SingleChildRenderObjectWidget {
class AnotherAncestorWidget extends SingleChildRenderObjectWidget {
const AnotherAncestorWidget({
Key key,
Widget child,
Key? key,
required Widget child,
}) : super(key: key, child: child);
@override

View file

@ -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/widgets.dart';

View file

@ -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' as math show pi;
import 'package:flutter/material.dart';
@ -106,7 +104,7 @@ void main() {
Future<void> _testStackChildren(
WidgetTester tester,
List<Widget> children, {
@required int expectedErrorCount,
required int expectedErrorCount,
bool enableCheck = true,
}) async {
assert(expectedErrorCount != null);
@ -117,7 +115,7 @@ void main() {
}
debugDisableShadows = false;
int count = 0;
final void Function(FlutterErrorDetails) oldOnError = FlutterError.onError;
final void Function(FlutterErrorDetails)? oldOnError = FlutterError.onError;
FlutterError.onError = (FlutterErrorDetails details) {
count++;
};

View file

@ -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/widgets.dart';

View file

@ -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
@TestOn('!chrome')
import 'dart:async';
import 'dart:typed_data';
@ -65,7 +63,7 @@ void main() {
);
final FakeAndroidPlatformView fakeView = viewsController.views.first;
final Uint8List rawCreationParams = fakeView.creationParams;
final Uint8List rawCreationParams = fakeView.creationParams!;
final ByteData byteData = ByteData.view(
rawCreationParams.buffer,
rawCreationParams.offsetInBytes,
@ -141,7 +139,7 @@ void main() {
]),
);
viewsController.resizeCompleter.complete();
viewsController.resizeCompleter!.complete();
await tester.pump();
expect(
@ -946,7 +944,7 @@ void main() {
expect(semantics.transform, Matrix4.translationValues(600, 500, 0));
expect(semantics.childrenCount, 0);
viewsController.createCompleter.complete();
viewsController.createCompleter!.complete();
await tester.pumpAndSettle();
expect(semantics.platformViewId, currentViewId + 1);
@ -992,8 +990,8 @@ void main() {
),
);
final Element containerElement = tester.element(find.byKey(containerKey));
final FocusNode androidViewFocusNode = androidViewFocusWidget.focusNode;
final FocusNode containerFocusNode = Focus.of(containerElement);
final FocusNode androidViewFocusNode = androidViewFocusWidget.focusNode!;
final FocusNode containerFocusNode = Focus.of(containerElement)!;
containerFocusNode.requestFocus();
@ -1036,16 +1034,16 @@ void main() {
),
);
viewsController.createCompleter.complete();
viewsController.createCompleter!.complete();
final Element containerElement = tester.element(find.byKey(containerKey));
final FocusNode containerFocusNode = Focus.of(containerElement);
final FocusNode containerFocusNode = Focus.of(containerElement)!;
containerFocusNode.requestFocus();
await tester.pump();
int lastPlatformViewTextClient;
late int lastPlatformViewTextClient;
SystemChannels.textInput.setMockMethodCallHandler((MethodCall call) {
if (call.method == 'TextInput.setPlatformViewClient') {
lastPlatformViewTextClient = call.arguments as int;
@ -1085,10 +1083,10 @@ void main() {
),
);
viewsController.createCompleter.complete();
viewsController.createCompleter!.complete();
final Element containerElement = tester.element(find.byKey(containerKey));
final FocusNode containerFocusNode = Focus.of(containerElement);
final FocusNode containerFocusNode = Focus.of(containerElement)!;
containerFocusNode.requestFocus();
await tester.pump();
@ -1190,7 +1188,7 @@ void main() {
});
group('AndroidViewSurface', () {
FakeAndroidViewController controller;
late FakeAndroidViewController controller;
setUp(() {
controller = FakeAndroidViewController(0);
@ -1314,7 +1312,7 @@ void main() {
),
);
viewsController.creationDelay.complete();
viewsController.creationDelay!.complete();
expect(
viewsController.views,
@ -1378,7 +1376,7 @@ void main() {
);
final FakeUiKitView fakeView = viewsController.views.first;
final Uint8List rawCreationParams = fakeView.creationParams;
final Uint8List rawCreationParams = fakeView.creationParams!;
final ByteData byteData = ByteData.view(
rawCreationParams.buffer,
rawCreationParams.offsetInBytes,
@ -1994,7 +1992,7 @@ void main() {
});
group('Common PlatformView', () {
FakePlatformViewController controller;
late FakePlatformViewController controller;
setUp((){
controller = FakePlatformViewController(0);
@ -2257,9 +2255,9 @@ void main() {
testWidgets('PlatformViewLink Widget init, should create a SizedBox widget before onPlatformViewCreated and a PlatformViewSurface after', (WidgetTester tester) async {
final int currentViewId = platformViewsRegistry.getNextPlatformViewId();
int createdPlatformViewId;
late int createdPlatformViewId;
PlatformViewCreatedCallback onPlatformViewCreatedCallBack;
late PlatformViewCreatedCallback onPlatformViewCreatedCallBack;
final PlatformViewLink platformViewLink = PlatformViewLink(
viewType: 'webview',
@ -2289,7 +2287,7 @@ void main() {
});
testWidgets('PlatformViewLink Widget dispose', (WidgetTester tester) async {
FakePlatformViewController disposedController;
late FakePlatformViewController disposedController;
final PlatformViewLink platformViewLink = PlatformViewLink(
viewType: 'webview',
onCreatePlatformView: (PlatformViewCreationParams params){
@ -2454,8 +2452,8 @@ void main() {
testWidgets('PlatformViewLink manages the focus properly', (WidgetTester tester) async {
final GlobalKey containerKey = GlobalKey();
FakePlatformViewController controller;
ValueChanged<bool> focusChanged;
late FakePlatformViewController controller;
late ValueChanged<bool> focusChanged;
final PlatformViewLink platformViewLink = PlatformViewLink(
viewType: 'webview',
onCreatePlatformView: (PlatformViewCreationParams params){
@ -2491,9 +2489,9 @@ void main() {
matching: find.byType(Focus),
),
);
final FocusNode platformViewFocusNode = platformViewFocusWidget.focusNode;
final FocusNode platformViewFocusNode = platformViewFocusWidget.focusNode!;
final Element containerElement = tester.element(find.byKey(containerKey));
final FocusNode containerFocusNode = Focus.of(containerElement);
final FocusNode containerFocusNode = Focus.of(containerElement)!;
containerFocusNode.requestFocus();
await tester.pump();

View file

@ -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:async';
import 'package:flutter_test/flutter_test.dart';
@ -78,8 +76,8 @@ void main() {
final GlobalKey key = GlobalKey();
void recordMetrics() {
final RenderBox box = key.currentContext.findRenderObject() as RenderBox;
final BoxParentData boxParentData = box.parentData as BoxParentData;
final RenderBox box = key.currentContext!.findRenderObject()! as RenderBox;
final BoxParentData boxParentData = box.parentData! as BoxParentData;
sizes.add(box.size);
positions.add(boxParentData.offset);
}

View file

@ -2,14 +2,12 @@
// 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/material.dart';
import 'package:flutter/gestures.dart';
import 'package:flutter_test/flutter_test.dart';
class ExpandingBox extends StatefulWidget {
const ExpandingBox({this.collapsedSize, this.expandedSize});
const ExpandingBox({ required this.collapsedSize, required this.expandedSize });
final double collapsedSize;
final double expandedSize;
@ -19,7 +17,7 @@ class ExpandingBox extends StatefulWidget {
}
class _ExpandingBoxState extends State<ExpandingBox> with AutomaticKeepAliveClientMixin<ExpandingBox>{
double _height;
late double _height;
@override
void initState() {

View file

@ -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/services.dart';
import 'package:flutter/widgets.dart';
import 'package:flutter_test/flutter_test.dart';

View file

@ -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/material.dart';
import 'package:flutter_test/flutter_test.dart';

View file

@ -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/foundation.dart';
import 'package:flutter/rendering.dart';
@ -12,7 +10,7 @@ import 'package:flutter/widgets.dart';
@immutable
class Pair<T> {
const Pair(this.first, this.second);
final T first;
final T? first;
final T second;
@override
@ -31,10 +29,10 @@ class Pair<T> {
/// and the other child in the bottom half. It will swap which child is on top
/// and which is on bottom every time the widget is rendered.
abstract class Swapper extends RenderObjectWidget {
const Swapper({this.stable, this.swapper});
const Swapper({ this.stable, this.swapper });
final Widget stable;
final Widget swapper;
final Widget? stable;
final Widget? swapper;
@override
SwapperElement createElement();
@ -45,8 +43,8 @@ abstract class Swapper extends RenderObjectWidget {
class SwapperWithProperOverrides extends Swapper {
const SwapperWithProperOverrides({
Widget stable,
Widget swapper,
Widget? stable,
Widget? swapper,
}) : super(stable: stable, swapper: swapper);
@override
@ -55,8 +53,8 @@ class SwapperWithProperOverrides extends Swapper {
class SwapperWithNoOverrides extends Swapper {
const SwapperWithNoOverrides({
Widget stable,
Widget swapper,
Widget? stable,
Widget? swapper,
}) : super(stable: stable, swapper: swapper);
@override
@ -65,8 +63,8 @@ class SwapperWithNoOverrides extends Swapper {
class SwapperWithDeprecatedOverrides extends Swapper {
const SwapperWithDeprecatedOverrides({
Widget stable,
Widget swapper,
Widget? stable,
Widget? swapper,
}) : super(stable: stable, swapper: swapper);
@override
@ -76,8 +74,8 @@ class SwapperWithDeprecatedOverrides extends Swapper {
abstract class SwapperElement extends RenderObjectElement {
SwapperElement(Swapper widget) : super(widget);
Element stable;
Element swapper;
Element? stable;
Element? swapper;
bool swapperIsOnTop = true;
List<dynamic> insertSlots = <dynamic>[];
List<Pair<dynamic>> moveSlots = <Pair<dynamic>>[];
@ -92,9 +90,9 @@ abstract class SwapperElement extends RenderObjectElement {
@override
void visitChildren(ElementVisitor visitor) {
if (stable != null)
visitor(stable);
visitor(stable!);
if (swapper != null)
visitor(swapper);
visitor(swapper!);
}
@override
@ -104,7 +102,7 @@ abstract class SwapperElement extends RenderObjectElement {
}
@override
void mount(Element parent, dynamic newSlot) {
void mount(Element? parent, dynamic newSlot) {
super.mount(parent, newSlot);
_updateChildren(widget);
}
@ -183,22 +181,22 @@ class SwapperElementWithDeprecatedOverrides extends SwapperElement {
}
class RenderSwapper extends RenderBox {
RenderBox _stable;
RenderBox get stable => _stable;
set stable(RenderBox child) {
RenderBox? _stable;
RenderBox? get stable => _stable;
set stable(RenderBox? child) {
if (child == _stable)
return;
if (_stable != null)
dropChild(_stable);
dropChild(_stable!);
_stable = child;
if (child != null)
adoptChild(child);
}
bool _swapperIsOnTop;
RenderBox _swapper;
RenderBox get swapper => _swapper;
void setSwapper(RenderBox child, bool isOnTop) {
bool? _swapperIsOnTop;
RenderBox? _swapper;
RenderBox? get swapper => _swapper;
void setSwapper(RenderBox? child, bool isOnTop) {
if (isOnTop != _swapperIsOnTop) {
_swapperIsOnTop = isOnTop;
markNeedsLayout();
@ -206,7 +204,7 @@ class RenderSwapper extends RenderBox {
if (child == _swapper)
return;
if (_swapper != null)
dropChild(_swapper);
dropChild(_swapper!);
_swapper = child;
if (child != null)
adoptChild(child);
@ -215,9 +213,9 @@ class RenderSwapper extends RenderBox {
@override
void visitChildren(RenderObjectVisitor visitor) {
if (_stable != null)
visitor(_stable);
visitor(_stable!);
if (_swapper != null)
visitor(_swapper);
visitor(_swapper!);
}
@override
@ -244,21 +242,21 @@ class RenderSwapper extends RenderBox {
maxHeight: constraints.maxHeight / 2,
);
if (_stable != null) {
final BoxParentData stableParentData = _stable.parentData as BoxParentData;
_stable.layout(childConstraints);
stableParentData.offset = _swapperIsOnTop ? bottomOffset : topOffset;
final BoxParentData stableParentData = _stable!.parentData! as BoxParentData;
_stable!.layout(childConstraints);
stableParentData.offset = _swapperIsOnTop! ? bottomOffset : topOffset;
}
if (_swapper != null) {
final BoxParentData swapperParentData = _swapper.parentData as BoxParentData;
_swapper.layout(childConstraints);
swapperParentData.offset = _swapperIsOnTop ? topOffset : bottomOffset;
final BoxParentData swapperParentData = _swapper!.parentData! as BoxParentData;
_swapper!.layout(childConstraints);
swapperParentData.offset = _swapperIsOnTop! ? topOffset : bottomOffset;
}
}
@override
void paint(PaintingContext context, Offset offset) {
visitChildren((RenderObject child) {
final BoxParentData childParentData = child.parentData as BoxParentData;
final BoxParentData childParentData = child.parentData! as BoxParentData;
context.paintChild(child, offset + childParentData.offset);
});
}
@ -269,7 +267,7 @@ class RenderSwapper extends RenderBox {
}
}
BoxParentData parentDataFor(RenderObject renderObject) => renderObject.parentData as BoxParentData;
BoxParentData parentDataFor(RenderObject renderObject) => renderObject.parentData! as BoxParentData;
void main() {
testWidgets('RenderObjectElement *RenderObjectChild methods get called with correct arguments', (WidgetTester tester) async {
@ -356,7 +354,7 @@ void main() {
expect(swapper.insertSlots.length, 2);
expect(swapper.moveSlots.length, 1);
expect(swapper.removeSlots.length, 2);
expect(swapper.removeSlots, <bool>[null,null]);
expect(swapper.removeSlots, <bool?>[null,null]);
});
testWidgets('RenderObjectElement *ChildRenderObject methods fail with deprecation message', (WidgetTester tester) async {

View file

@ -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/rendering.dart';
import 'package:flutter/widgets.dart';
@ -16,8 +14,8 @@ final BoxDecoration kBoxDecorationC = BoxDecoration(border: nonconst(null));
class TestWidget extends StatelessWidget {
const TestWidget({
Key key,
this.child,
Key? key,
required this.child,
}) : super(key: key);
final Widget child;
@ -27,18 +25,16 @@ class TestWidget extends StatelessWidget {
}
class TestOrientedBox extends SingleChildRenderObjectWidget {
const TestOrientedBox({ Key key, Widget child }) : super(key: key, child: child);
const TestOrientedBox({ Key? key, Widget? child }) : super(key: key, child: child);
Decoration _getDecoration(BuildContext context) {
final Orientation orientation = MediaQuery.of(context).orientation;
final Orientation orientation = MediaQuery.of(context)!.orientation;
switch (orientation) {
case Orientation.landscape:
return const BoxDecoration(color: Color(0xFF00FF00));
case Orientation.portrait:
return const BoxDecoration(color: Color(0xFF0000FF));
}
assert(orientation != null);
return null;
}
@override
@ -51,7 +47,7 @@ class TestOrientedBox extends SingleChildRenderObjectWidget {
}
class TestNonVisitingWidget extends SingleChildRenderObjectWidget {
const TestNonVisitingWidget({ Key key, Widget child }) : super(key: key, child: child);
const TestNonVisitingWidget({ Key? key, required Widget child }) : super(key: key, child: child);
@override
RenderObject createRenderObject(BuildContext context) => TestNonVisitingRenderObject();
@ -60,13 +56,13 @@ class TestNonVisitingWidget extends SingleChildRenderObjectWidget {
class TestNonVisitingRenderObject extends RenderBox with RenderObjectWithChildMixin<RenderBox> {
@override
void performLayout() {
child.layout(constraints, parentUsesSize: true);
size = child.size;
child!.layout(constraints, parentUsesSize: true);
size = child!.size;
}
@override
void paint(PaintingContext context, Offset offset) {
context.paintChild(child, offset);
context.paintChild(child!, offset);
}
@override
@ -107,7 +103,7 @@ void main() {
expect(renderObject.position, equals(DecorationPosition.background));
expect(renderObject.child, isNotNull);
expect(renderObject.child, isA<RenderDecoratedBox>());
final RenderDecoratedBox child = renderObject.child as RenderDecoratedBox;
final RenderDecoratedBox child = renderObject.child! as RenderDecoratedBox;
expect(child.decoration, equals(kBoxDecorationB));
expect(child.position, equals(DecorationPosition.background));
expect(child.child, isNull);
@ -196,10 +192,10 @@ void main() {
expect(element.renderObject, isA<RenderDecoratedBox>());
final RenderDecoratedBox parent = element.renderObject as RenderDecoratedBox;
expect(parent.child, isA<RenderDecoratedBox>());
final RenderDecoratedBox child = parent.child as RenderDecoratedBox;
final RenderDecoratedBox child = parent.child! as RenderDecoratedBox;
expect(child.decoration, equals(kBoxDecorationB));
expect(child.child, isA<RenderDecoratedBox>());
final RenderDecoratedBox grandChild = child.child as RenderDecoratedBox;
final RenderDecoratedBox grandChild = child.child! as RenderDecoratedBox;
expect(grandChild.decoration, equals(kBoxDecorationC));
expect(grandChild.child, isNull);

View file

@ -2,15 +2,17 @@
// 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/widgets.dart';
import 'package:flutter_test/flutter_test.dart';
// This is a regression test for https://github.com/flutter/flutter/issues/5588.
class OrderSwitcher extends StatefulWidget {
const OrderSwitcher({ Key key, this.a, this.b }) : super(key: key);
const OrderSwitcher({
Key? key,
required this.a,
required this.b,
}) : super(key: key);
final Widget a;
final Widget b;
@ -47,7 +49,7 @@ class OrderSwitcherState extends State<OrderSwitcher> {
}
class DummyStatefulWidget extends StatefulWidget {
const DummyStatefulWidget(Key key) : super(key: key);
const DummyStatefulWidget(Key? key) : super(key: key);
@override
DummyStatefulWidgetState createState() => DummyStatefulWidgetState();
@ -60,18 +62,18 @@ class DummyStatefulWidgetState extends State<DummyStatefulWidget> {
class RekeyableDummyStatefulWidgetWrapper extends StatefulWidget {
const RekeyableDummyStatefulWidgetWrapper({
Key key,
Key? key,
this.child,
this.initialKey,
required this.initialKey,
}) : super(key: key);
final Widget child;
final Widget? child;
final GlobalKey initialKey;
@override
RekeyableDummyStatefulWidgetWrapperState createState() => RekeyableDummyStatefulWidgetWrapperState();
}
class RekeyableDummyStatefulWidgetWrapperState extends State<RekeyableDummyStatefulWidgetWrapper> {
GlobalKey _key;
GlobalKey? _key;
@override
void initState() {
@ -79,7 +81,7 @@ class RekeyableDummyStatefulWidgetWrapperState extends State<RekeyableDummyState
_key = widget.initialKey;
}
void _setChild(GlobalKey value) {
void _setChild(GlobalKey? value) {
setState(() {
_key = value;
});
@ -160,7 +162,7 @@ void main() {
expect(find.byType(RekeyableDummyStatefulWidgetWrapper), findsNWidgets(2));
expect(find.byType(DummyStatefulWidget), findsNWidgets(2));
keyRoot.currentState.switchChildren();
keyRoot.currentState!.switchChildren();
final List<State> states = tester.stateList(find.byType(RekeyableDummyStatefulWidgetWrapper)).toList();
final RekeyableDummyStatefulWidgetWrapperState a = states[0] as RekeyableDummyStatefulWidgetWrapperState;
a._setChild(null);

View file

@ -2,33 +2,31 @@
// 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/widgets.dart';
class StateMarker extends StatefulWidget {
const StateMarker({ Key key, this.child }) : super(key: key);
const StateMarker({ Key? key, this.child }) : super(key: key);
final Widget child;
final Widget? child;
@override
StateMarkerState createState() => StateMarkerState();
}
class StateMarkerState extends State<StateMarker> {
String marker;
String? marker;
@override
Widget build(BuildContext context) {
if (widget.child != null)
return widget.child;
return widget.child!;
return Container();
}
}
class DeactivateLogger extends StatefulWidget {
const DeactivateLogger({ Key key, this.log }) : super(key: key);
const DeactivateLogger({ required Key key, required this.log }) : super(key: key);
final List<String> log;
@ -73,9 +71,9 @@ void main() {
),
);
final StateMarkerState leftState = left.currentState as StateMarkerState;
final StateMarkerState leftState = left.currentState! as StateMarkerState;
leftState.marker = 'left';
final StateMarkerState rightState = right.currentState as StateMarkerState;
final StateMarkerState rightState = right.currentState! as StateMarkerState;
rightState.marker = 'right';
final StateMarkerState grandchildState = tester.state(find.byWidget(grandchild));
@ -144,9 +142,9 @@ void main() {
),
);
final StateMarkerState leftState = left.currentState as StateMarkerState;
final StateMarkerState leftState = left.currentState! as StateMarkerState;
leftState.marker = 'left';
final StateMarkerState rightState = right.currentState as StateMarkerState;
final StateMarkerState rightState = right.currentState! as StateMarkerState;
rightState.marker = 'right';
final StateMarkerState grandchildState = tester.state(find.byWidget(grandchild));
@ -198,7 +196,7 @@ void main() {
await tester.pumpWidget(StateMarker(key: key));
final StateMarkerState keyState = key.currentState as StateMarkerState;
final StateMarkerState keyState = key.currentState! as StateMarkerState;
keyState.marker = 'marked';
await tester.pumpWidget(
@ -237,7 +235,7 @@ void main() {
],
));
final StateMarkerState keyState = key.currentState as StateMarkerState;
final StateMarkerState keyState = key.currentState!as StateMarkerState;
keyState.marker = 'marked';
await tester.pumpWidget(Stack(
@ -275,7 +273,7 @@ void main() {
],
));
final StateMarkerState keyState = key.currentState as StateMarkerState;
final StateMarkerState keyState = key.currentState! as StateMarkerState;
keyState.marker = 'marked';
await tester.pumpWidget(Stack(

View file

@ -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' as ui show window;
import 'package:flutter/material.dart';
@ -12,7 +10,7 @@ import 'package:flutter_test/flutter_test.dart';
// This is a regression test for https://github.com/flutter/flutter/issues/5840.
class Bar extends StatefulWidget {
const Bar({ Key key }) : super(key: key);
const Bar({ Key? key }) : super(key: key);
@override
BarState createState() => BarState();
}
@ -49,7 +47,7 @@ class BarState extends State<Bar> {
}
class StatefulCreationCounter extends StatefulWidget {
const StatefulCreationCounter({ Key key }) : super(key: key);
const StatefulCreationCounter({ Key? key }) : super(key: key);
@override
StatefulCreationCounterState createState() => StatefulCreationCounterState();
@ -82,9 +80,9 @@ void main() {
testWidgets('Clean then reparent with dependencies', (WidgetTester tester) async {
int layoutBuilderBuildCount = 0;
StateSetter keyedSetState;
StateSetter layoutBuilderSetState;
StateSetter childSetState;
late StateSetter keyedSetState;
late StateSetter layoutBuilderSetState;
late StateSetter childSetState;
final GlobalKey key = GlobalKey();
final Widget keyedWidget = StatefulBuilder(

View file

@ -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/widgets.dart';
import 'package:flutter/services.dart';
import 'package:flutter_test/flutter_test.dart';
@ -19,14 +17,6 @@ void main() {
expect(() => _TestRestorableValue().value, throwsAssertionError);
});
testWidgets('cannot initialize with null', (WidgetTester tester) async {
expect(() => RestorableNum<num>(null), throwsAssertionError);
expect(() => RestorableDouble(null), throwsAssertionError);
expect(() => RestorableInt(null), throwsAssertionError);
expect(() => RestorableString(null).value, throwsAssertionError);
expect(() => RestorableBool(null).value, throwsAssertionError);
});
testWidgets('work when not in restoration scope', (WidgetTester tester) async {
await tester.pumpWidget(const _RestorableWidget());
@ -119,22 +109,6 @@ void main() {
expect(find.text('guten tag'), findsOneWidget);
});
testWidgets('cannot set to null', (WidgetTester tester) async {
await tester.pumpWidget(const RootRestorationScope(
restorationId: 'root-child',
child: _RestorableWidget(),
));
expect(find.text('hello world'), findsOneWidget);
final _RestorableWidgetState state = tester.state(find.byType(_RestorableWidget));
expect(() => state.numValue.value = null, throwsAssertionError);
expect(() => state.doubleValue.value = null, throwsAssertionError);
expect(() => state.intValue.value = null, throwsAssertionError);
expect(() => state.stringValue.value = null, throwsAssertionError);
expect(() => state.boolValue.value = null, throwsAssertionError);
});
testWidgets('restore to older state', (WidgetTester tester) async {
await tester.pumpWidget(const RootRestorationScope(
restorationId: 'root-child',
@ -320,7 +294,7 @@ class _TestRestorableValue extends RestorableValue<Object> {
int didUpdateValueCallCount = 0;
@override
void didUpdateValue(Object oldValue) {
void didUpdateValue(Object? oldValue) {
didUpdateValueCallCount++;
notifyListeners();
}
@ -337,7 +311,7 @@ class _TestRestorableValue extends RestorableValue<Object> {
}
class _RestorableWidget extends StatefulWidget {
const _RestorableWidget({Key key}) : super(key: key);
const _RestorableWidget({Key? key}) : super(key: key);
@override
State<_RestorableWidget> createState() => _RestorableWidgetState();
@ -353,7 +327,7 @@ class _RestorableWidgetState extends State<_RestorableWidget> with RestorationMi
final _TestRestorableValue objectValue = _TestRestorableValue();
@override
void restoreState(RestorationBucket oldBucket, bool initialRestore) {
void restoreState(RestorationBucket? oldBucket, bool initialRestore) {
registerForRestoration(numValue, 'num');
registerForRestoration(doubleValue, 'double');
registerForRestoration(intValue, 'int');
@ -369,7 +343,7 @@ class _RestorableWidgetState extends State<_RestorableWidget> with RestorationMi
@override
Widget build(BuildContext context) {
return Text(stringValue.value ?? 'null', textDirection: TextDirection.ltr,);
return Text(stringValue.value, textDirection: TextDirection.ltr,);
}
@override