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

View file

@ -460,7 +460,7 @@ class FakeTextChannel implements MethodChannel {
@override @override
void setMockMethodCallHandler(Future<void> Function(MethodCall call)? handler) => throw UnimplementedError(); void setMockMethodCallHandler(Future<void>? Function(MethodCall call)? handler) => throw UnimplementedError();
@override @override
bool checkMockMethodCallHandler(Future<void> Function(MethodCall call)? handler) => throw UnimplementedError(); 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 // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
// @dart = 2.8
import 'package:flutter_test/flutter_test.dart'; import 'package:flutter_test/flutter_test.dart';
import 'package:flutter/rendering.dart'; import 'package:flutter/rendering.dart';
import 'package:flutter/widgets.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.localToGlobal(Offset.zero), equals(const Offset(745.0, 565.0)));
expect(box.size, equals(const Size(100.0, 50.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.size, equals(const Size(50.0, 50.0)));
expect( expect(
box.localToGlobal(box.size.center(Offset.zero)), 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.size, equals(const Size(50.0, 50.0)));
expect( expect(
box.localToGlobal(box.size.center(Offset.zero)), 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 // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
// @dart = 2.8
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
import 'package:flutter_test/flutter_test.dart'; import 'package:flutter_test/flutter_test.dart';
import 'package:flutter/widgets.dart'; import 'package:flutter/widgets.dart';
@ -23,8 +21,7 @@ void main() {
OverlayEntry( OverlayEntry(
builder: (BuildContext context) { builder: (BuildContext context) {
didBuild = true; didBuild = true;
final Overlay overlay = context.findAncestorWidgetOfExactType<Overlay>(); final Overlay overlay = context.findAncestorWidgetOfExactType<Overlay>()!;
expect(overlay, isNotNull);
expect(overlay.key, equals(overlayKey)); expect(overlay.key, equals(overlayKey));
return Container(); return Container();
}, },
@ -37,7 +34,7 @@ void main() {
), ),
); );
expect(didBuild, isTrue); expect(didBuild, isTrue);
final RenderObject theater = overlayKey.currentContext.findRenderObject(); final RenderObject theater = overlayKey.currentContext!.findRenderObject()!;
expect(theater, hasAGoodToStringDeep); expect(theater, hasAGoodToStringDeep);
expect( expect(
@ -110,7 +107,7 @@ void main() {
), ),
), ),
); );
final RenderObject theater = overlayKey.currentContext.findRenderObject(); final RenderObject theater = overlayKey.currentContext!.findRenderObject()!;
expect(theater, hasAGoodToStringDeep); expect(theater, hasAGoodToStringDeep);
expect( expect(
@ -189,7 +186,7 @@ void main() {
expect(buildOrder, <String>['Base']); expect(buildOrder, <String>['Base']);
buildOrder.clear(); buildOrder.clear();
final OverlayState overlay = overlayKey.currentState as OverlayState; final OverlayState overlay = overlayKey.currentState! as OverlayState;
overlay.insert( overlay.insert(
OverlayEntry( OverlayEntry(
builder: (BuildContext context) { builder: (BuildContext context) {
@ -227,7 +224,7 @@ void main() {
expect(buildOrder, <String>['Base']); expect(buildOrder, <String>['Base']);
buildOrder.clear(); buildOrder.clear();
final OverlayState overlay = overlayKey.currentState as OverlayState; final OverlayState overlay = overlayKey.currentState! as OverlayState;
overlay.insert( overlay.insert(
OverlayEntry( OverlayEntry(
builder: (BuildContext context) { builder: (BuildContext context) {
@ -272,7 +269,7 @@ void main() {
expect(buildOrder, <String>['Base', 'Top']); expect(buildOrder, <String>['Base', 'Top']);
buildOrder.clear(); buildOrder.clear();
final OverlayState overlay = overlayKey.currentState as OverlayState; final OverlayState overlay = overlayKey.currentState! as OverlayState;
overlay.insert( overlay.insert(
OverlayEntry( OverlayEntry(
builder: (BuildContext context) { builder: (BuildContext context) {
@ -325,7 +322,7 @@ void main() {
]; ];
buildOrder.clear(); buildOrder.clear();
final OverlayState overlay = overlayKey.currentState as OverlayState; final OverlayState overlay = overlayKey.currentState! as OverlayState;
overlay.insertAll(entries); overlay.insertAll(entries);
await tester.pump(); await tester.pump();
@ -371,7 +368,7 @@ void main() {
]; ];
buildOrder.clear(); buildOrder.clear();
final OverlayState overlay = overlayKey.currentState as OverlayState; final OverlayState overlay = overlayKey.currentState! as OverlayState;
overlay.insertAll(entries, below: base); overlay.insertAll(entries, below: base);
await tester.pump(); await tester.pump();
@ -423,7 +420,7 @@ void main() {
]; ];
buildOrder.clear(); buildOrder.clear();
final OverlayState overlay = overlayKey.currentState as OverlayState; final OverlayState overlay = overlayKey.currentState! as OverlayState;
overlay.insertAll(entries, above: base); overlay.insertAll(entries, above: base);
await tester.pump(); await tester.pump();
@ -486,7 +483,7 @@ void main() {
]; ];
buildOrder.clear(); buildOrder.clear();
final OverlayState overlay = overlayKey.currentState as OverlayState; final OverlayState overlay = overlayKey.currentState! as OverlayState;
overlay.rearrange(rearranged); overlay.rearrange(rearranged);
await tester.pump(); await tester.pump();
@ -549,7 +546,7 @@ void main() {
]; ];
buildOrder.clear(); buildOrder.clear();
final OverlayState overlay = overlayKey.currentState as OverlayState; final OverlayState overlay = overlayKey.currentState! as OverlayState;
overlay.rearrange(rearranged, above: initialEntries[2]); overlay.rearrange(rearranged, above: initialEntries[2]);
await tester.pump(); await tester.pump();
@ -612,7 +609,7 @@ void main() {
]; ];
buildOrder.clear(); buildOrder.clear();
final OverlayState overlay = overlayKey.currentState as OverlayState; final OverlayState overlay = overlayKey.currentState! as OverlayState;
overlay.rearrange(rearranged, below: initialEntries[2]); overlay.rearrange(rearranged, below: initialEntries[2]);
await tester.pump(); await tester.pump();
@ -639,7 +636,7 @@ void main() {
), ),
); );
final OverlayState overlay = overlayKey.currentState as OverlayState; final OverlayState overlay = overlayKey.currentState! as OverlayState;
try { try {
overlay.insert( overlay.insert(
@ -657,8 +654,7 @@ void main() {
}, },
), ),
); );
} catch (e) { } on AssertionError catch (e) {
expect(e, isAssertionError);
expect(e.message, 'Only one of `above` and `below` may be specified.'); expect(e.message, 'Only one of `above` and `below` may be specified.');
} }
@ -680,8 +676,7 @@ void main() {
}, },
), ),
); );
} catch (e) { } on AssertionError catch (e) {
expect(e, isAssertionError);
expect(e.message, 'The provided entry used for `above` must be present in the Overlay.'); expect(e.message, 'The provided entry used for `above` must be present in the Overlay.');
} }
@ -692,8 +687,7 @@ void main() {
}, },
)); ));
} catch (e) { } on AssertionError catch (e) {
expect(e, isAssertionError);
expect(e.message, 'The provided entry used for `above` must be present in the Overlay and in the `newEntriesList`.'); 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, textDirection: TextDirection.ltr,
child: Builder( child: Builder(
builder: (BuildContext context) { builder: (BuildContext context) {
FlutterError error; late FlutterError error;
final Widget debugRequiredFor = Container(); final Widget debugRequiredFor = Container();
try { try {
Overlay.of(context, debugRequiredFor: debugRequiredFor); Overlay.of(context, debugRequiredFor: debugRequiredFor);
@ -778,7 +772,7 @@ void main() {
expect(newEntry.opaque, isTrue); expect(newEntry.opaque, isTrue);
// The new opaqueness is honored when inserted into an overlay. // The new opaqueness is honored when inserted into an overlay.
overlayKey.currentState.insert(newEntry); overlayKey.currentState!.insert(newEntry);
await tester.pumpAndSettle(); await tester.pumpAndSettle();
expect(find.byKey(root), findsNothing); 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(bottom)).rebuildCount, 1);
expect(tester.state<StatefulTestState>(find.byKey(top)).rebuildCount, 1); expect(tester.state<StatefulTestState>(find.byKey(top)).rebuildCount, 1);
overlayKey.currentState.rearrange(<OverlayEntry>[ overlayKey.currentState!.rearrange(<OverlayEntry>[
bottomEntry, middleEntry, topEntry, bottomEntry, middleEntry, topEntry,
]); ]);
await tester.pump(); await tester.pump();
@ -932,7 +926,7 @@ void main() {
await tester.tap(find.byKey(overlayKey)); await tester.tap(find.byKey(overlayKey));
expect(bottomTapCount, 1); expect(bottomTapCount, 1);
overlayKey.currentState.insert(OverlayEntry( overlayKey.currentState!.insert(OverlayEntry(
maintainState: true, maintainState: true,
opaque: true, opaque: true,
builder: (BuildContext context) { builder: (BuildContext context) {
@ -948,7 +942,7 @@ void main() {
expect(bottomTapCount, 1); expect(bottomTapCount, 1);
int topTapCount = 0; int topTapCount = 0;
overlayKey.currentState.insert(OverlayEntry( overlayKey.currentState!.insert(OverlayEntry(
maintainState: true, maintainState: true,
opaque: true, opaque: true,
builder: (BuildContext context) { builder: (BuildContext context) {
@ -1026,6 +1020,7 @@ void main() {
}); });
testWidgets('Overlay can set and update clipBehavior', (WidgetTester tester) async { testWidgets('Overlay can set and update clipBehavior', (WidgetTester tester) async {
await tester.pumpWidget( await tester.pumpWidget(
Directionality( Directionality(
textDirection: TextDirection.ltr, textDirection: TextDirection.ltr,
@ -1040,6 +1035,7 @@ void main() {
); );
// By default, clipBehavior should be Clip.hardEdge // By default, clipBehavior should be Clip.hardEdge
// ignore: unnecessary_nullable_for_final_variable_declarations
final dynamic renderObject = tester.renderObject(find.byType(Overlay)); final dynamic renderObject = tester.renderObject(find.byType(Overlay));
expect(renderObject.clipBehavior, equals(Clip.hardEdge)); expect(renderObject.clipBehavior, equals(Clip.hardEdge));
@ -1063,7 +1059,7 @@ void main() {
} }
class StatefulTestWidget extends StatefulWidget { class StatefulTestWidget extends StatefulWidget {
const StatefulTestWidget({Key key}) : super(key: key); const StatefulTestWidget({Key? key}) : super(key: key);
@override @override
State<StatefulTestWidget> createState() => StatefulTestState(); 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 // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
// @dart = 2.8
import 'dart:math' as math; import 'dart:math' as math;
import 'package:flutter_test/flutter_test.dart'; 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 // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
// @dart = 2.8
import 'package:flutter_test/flutter_test.dart'; import 'package:flutter_test/flutter_test.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart'; import 'package:flutter/rendering.dart';
class TestTransition extends AnimatedWidget { class TestTransition extends AnimatedWidget {
const TestTransition({ const TestTransition({
Key key, Key? key,
this.childFirstHalf, required this.childFirstHalf,
this.childSecondHalf, required this.childSecondHalf,
Animation<double> animation, required Animation<double> animation,
}) : super(key: key, listenable: animation); }) : super(key: key, listenable: animation);
final Widget childFirstHalf; final Widget childFirstHalf;
@ -29,7 +27,11 @@ class TestTransition extends AnimatedWidget {
} }
class TestRoute<T> extends PageRoute<T> { 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; final Widget child;
@ -37,10 +39,10 @@ class TestRoute<T> extends PageRoute<T> {
Duration get transitionDuration => const Duration(milliseconds: 150); Duration get transitionDuration => const Duration(milliseconds: 150);
@override @override
final Color barrierColor; final Color? barrierColor;
@override @override
String get barrierLabel => null; String? get barrierLabel => null;
@override @override
bool get maintainState => false; bool get maintainState => false;
@ -88,18 +90,18 @@ void main() {
child: Builder( child: Builder(
key: insideKey, key: insideKey,
builder: (BuildContext context) { 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( return Column(
children: <Widget>[ children: <Widget>[
TestTransition( TestTransition(
childFirstHalf: const Text('A'), childFirstHalf: const Text('A'),
childSecondHalf: const Text('B'), childSecondHalf: const Text('B'),
animation: route.animation, animation: route.animation!,
), ),
TestTransition( TestTransition(
childFirstHalf: const Text('C'), childFirstHalf: const Text('C'),
childSecondHalf: const Text('D'), 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 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 // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
// @dart = 2.8
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart'; import 'package:flutter/widgets.dart';
import 'package:flutter_test/flutter_test.dart'; import 'package:flutter_test/flutter_test.dart';
@ -28,7 +26,7 @@ class HomePage extends StatefulWidget {
class _HomePageState extends State<HomePage> { class _HomePageState extends State<HomePage> {
void _presentModalPage() { void _presentModalPage() {
Navigator.of(context).push(PageRouteBuilder<void>( Navigator.of(context)!.push(PageRouteBuilder<void>(
transitionDuration: const Duration(milliseconds: 300), transitionDuration: const Duration(milliseconds: 300),
barrierColor: Colors.black54, barrierColor: Colors.black54,
opaque: false, opaque: false,
@ -64,7 +62,7 @@ class ModalPage extends StatelessWidget {
highlightColor: Colors.transparent, highlightColor: Colors.transparent,
splashColor: Colors.transparent, splashColor: Colors.transparent,
onTap: () { onTap: () {
Navigator.of(context).pop(); Navigator.of(context)!.pop();
}, },
child: const SizedBox.expand(), 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 // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
// @dart = 2.8
import 'package:flutter_test/flutter_test.dart'; import 'package:flutter_test/flutter_test.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
void main() { void main() {
testWidgets('PageStorage read and write', (WidgetTester tester) async { testWidgets('PageStorage read and write', (WidgetTester tester) async {
const Key builderKey = PageStorageKey<String>('builderKey'); const Key builderKey = PageStorageKey<String>('builderKey');
StateSetter setState; late StateSetter setState;
int storedValue = 0; int storedValue = 0;
await tester.pumpWidget( await tester.pumpWidget(
@ -18,7 +16,7 @@ void main() {
home: StatefulBuilder( home: StatefulBuilder(
key: builderKey, key: builderKey,
builder: (BuildContext context, StateSetter setter) { builder: (BuildContext context, StateSetter setter) {
PageStorage.of(context).writeState(context, storedValue); PageStorage.of(context)!.writeState(context, storedValue);
setState = setter; setState = setter;
return Center( return Center(
child: Text('storedValue: $storedValue'), child: Text('storedValue: $storedValue'),
@ -30,17 +28,17 @@ void main() {
final Element builderElement = tester.element(find.byKey(builderKey)); final Element builderElement = tester.element(find.byKey(builderKey));
expect(PageStorage.of(builderElement), isNotNull); expect(PageStorage.of(builderElement), isNotNull);
expect(PageStorage.of(builderElement).readState(builderElement), equals(storedValue)); expect(PageStorage.of(builderElement)!.readState(builderElement), equals(storedValue));
setState(() { setState(() {
storedValue = 1; storedValue = 1;
}); });
await tester.pump(); 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 { testWidgets('PageStorage read and write by identifier', (WidgetTester tester) async {
StateSetter setState; late StateSetter setState;
int storedValue = 0; int storedValue = 0;
Widget buildWidthKey(Key key) { Widget buildWidthKey(Key key) {
@ -48,7 +46,7 @@ void main() {
home: StatefulBuilder( home: StatefulBuilder(
key: key, key: key,
builder: (BuildContext context, StateSetter setter) { builder: (BuildContext context, StateSetter setter) {
PageStorage.of(context).writeState(context, storedValue, identifier: 123); PageStorage.of(context)!.writeState(context, storedValue, identifier: 123);
setState = setter; setState = setter;
return Center( return Center(
child: Text('storedValue: $storedValue'), child: Text('storedValue: $storedValue'),
@ -62,8 +60,8 @@ void main() {
await tester.pumpWidget(buildWidthKey(key)); await tester.pumpWidget(buildWidthKey(key));
Element builderElement = tester.element(find.byKey(key)); Element builderElement = tester.element(find.byKey(key));
expect(PageStorage.of(builderElement), isNotNull); expect(PageStorage.of(builderElement), isNotNull);
expect(PageStorage.of(builderElement).readState(builderElement), isNull); expect(PageStorage.of(builderElement)!.readState(builderElement), isNull);
expect(PageStorage.of(builderElement).readState(builderElement, identifier: 123), equals(storedValue)); expect(PageStorage.of(builderElement)!.readState(builderElement, identifier: 123), equals(storedValue));
// New StatefulBuilder widget - different key - but the same PageStorage identifier. // New StatefulBuilder widget - different key - but the same PageStorage identifier.
@ -71,14 +69,14 @@ void main() {
await tester.pumpWidget(buildWidthKey(key)); await tester.pumpWidget(buildWidthKey(key));
builderElement = tester.element(find.byKey(key)); builderElement = tester.element(find.byKey(key));
expect(PageStorage.of(builderElement), isNotNull); expect(PageStorage.of(builderElement), isNotNull);
expect(PageStorage.of(builderElement).readState(builderElement), isNull); expect(PageStorage.of(builderElement)!.readState(builderElement), isNull);
expect(PageStorage.of(builderElement).readState(builderElement, identifier: 123), equals(storedValue)); expect(PageStorage.of(builderElement)!.readState(builderElement, identifier: 123), equals(storedValue));
setState(() { setState(() {
storedValue = 1; storedValue = 1;
}); });
await tester.pump(); 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 // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
// @dart = 2.8
import 'package:flutter_test/flutter_test.dart'; import 'package:flutter_test/flutter_test.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
class TestOverlayRoute extends OverlayRoute<void> { class TestOverlayRoute extends OverlayRoute<void> {
TestOverlayRoute({ RouteSettings settings }) : super(settings: settings); TestOverlayRoute({ RouteSettings? settings }) : super(settings: settings);
@override @override
Iterable<OverlayEntry> createOverlayEntries() sync* { Iterable<OverlayEntry> createOverlayEntries() sync* {
yield OverlayEntry(builder: _build); yield OverlayEntry(builder: _build);
@ -17,7 +15,7 @@ class TestOverlayRoute extends OverlayRoute<void> {
} }
class PersistentBottomSheetTest extends StatefulWidget { class PersistentBottomSheetTest extends StatefulWidget {
const PersistentBottomSheetTest({ Key key }) : super(key: key); const PersistentBottomSheetTest({ Key? key }) : super(key: key);
@override @override
PersistentBottomSheetTestState createState() => PersistentBottomSheetTestState(); PersistentBottomSheetTestState createState() => PersistentBottomSheetTestState();
@ -29,7 +27,7 @@ class PersistentBottomSheetTestState extends State<PersistentBottomSheetTest> {
bool setStateCalled = false; bool setStateCalled = false;
void showBottomSheet() { void showBottomSheet() {
_scaffoldKey.currentState.showBottomSheet<void>((BuildContext context) { _scaffoldKey.currentState!.showBottomSheet<void>((BuildContext context) {
return const Text('bottomSheet'); return const Text('bottomSheet');
}) })
.closed.whenComplete(() { .closed.whenComplete(() {
@ -63,9 +61,9 @@ void main() {
expect(find.text('Settings'), findsNothing); expect(find.text('Settings'), findsNothing);
expect(find.text('Overlay'), findsNothing); expect(find.text('Overlay'), findsNothing);
expect(Navigator.canPop(containerKey1.currentContext), isFalse); expect(Navigator.canPop(containerKey1.currentContext!), isFalse);
Navigator.pushNamed(containerKey1.currentContext, '/settings'); Navigator.pushNamed(containerKey1.currentContext!, '/settings');
expect(Navigator.canPop(containerKey1.currentContext), isTrue); expect(Navigator.canPop(containerKey1.currentContext!), isTrue);
await tester.pump(); await tester.pump();
@ -85,7 +83,7 @@ void main() {
expect(find.text('Settings'), isOnstage); expect(find.text('Settings'), isOnstage);
expect(find.text('Overlay'), findsNothing); expect(find.text('Overlay'), findsNothing);
Navigator.push(containerKey2.currentContext, TestOverlayRoute()); Navigator.push(containerKey2.currentContext!, TestOverlayRoute());
await tester.pump(); await tester.pump();
@ -99,8 +97,8 @@ void main() {
expect(find.text('Settings'), isOnstage); expect(find.text('Settings'), isOnstage);
expect(find.text('Overlay'), isOnstage); expect(find.text('Overlay'), isOnstage);
expect(Navigator.canPop(containerKey2.currentContext), isTrue); expect(Navigator.canPop(containerKey2.currentContext!), isTrue);
Navigator.pop(containerKey2.currentContext); Navigator.pop(containerKey2.currentContext!);
await tester.pump(); await tester.pump();
expect(find.text('Home'), findsNothing); expect(find.text('Home'), findsNothing);
@ -113,8 +111,8 @@ void main() {
expect(find.text('Settings'), isOnstage); expect(find.text('Settings'), isOnstage);
expect(find.text('Overlay'), findsNothing); expect(find.text('Overlay'), findsNothing);
expect(Navigator.canPop(containerKey2.currentContext), isTrue); expect(Navigator.canPop(containerKey2.currentContext!), isTrue);
Navigator.pop(containerKey2.currentContext); Navigator.pop(containerKey2.currentContext!);
await tester.pump(); await tester.pump();
await tester.pump(); await tester.pump();
@ -128,7 +126,7 @@ void main() {
expect(find.text('Settings'), findsNothing); expect(find.text('Settings'), findsNothing);
expect(find.text('Overlay'), 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 { testWidgets('Check back gesture disables Heroes', (WidgetTester tester) async {
@ -161,7 +159,7 @@ void main() {
await tester.pumpWidget(MaterialApp(routes: routes)); await tester.pumpWidget(MaterialApp(routes: routes));
Navigator.pushNamed(containerKey1.currentContext, '/settings'); Navigator.pushNamed(containerKey1.currentContext!, '/settings');
await tester.pump(); await tester.pump();
await tester.pump(const Duration(milliseconds: 16)); await tester.pump(const Duration(milliseconds: 16));
@ -210,7 +208,7 @@ void main() {
await tester.pumpWidget(MaterialApp(routes: routes)); await tester.pumpWidget(MaterialApp(routes: routes));
Navigator.pushNamed(containerKey1.currentContext, '/settings'); Navigator.pushNamed(containerKey1.currentContext!, '/settings');
await tester.pump(); await tester.pump();
await tester.pump(const Duration(milliseconds: 100)); await tester.pump(const Duration(milliseconds: 100));
@ -254,7 +252,7 @@ void main() {
await tester.pumpWidget(MaterialApp(routes: routes)); await tester.pumpWidget(MaterialApp(routes: routes));
Navigator.pushNamed(containerKey1.currentContext, '/sheet'); Navigator.pushNamed(containerKey1.currentContext!, '/sheet');
await tester.pump(); await tester.pump();
await tester.pump(const Duration(seconds: 1)); await tester.pump(const Duration(seconds: 1));
@ -269,7 +267,7 @@ void main() {
await tester.pump(); await tester.pump();
await tester.pump(const Duration(seconds: 1)); await tester.pump(const Duration(seconds: 1));
Navigator.pushNamed(containerKey1.currentContext, '/sheet'); Navigator.pushNamed(containerKey1.currentContext!, '/sheet');
await tester.pump(); await tester.pump();
await tester.pump(const Duration(seconds: 1)); await tester.pump(const Duration(seconds: 1));
@ -278,7 +276,7 @@ void main() {
expect(find.text('Sheet'), isOnstage); expect(find.text('Sheet'), isOnstage);
// Show the bottom sheet. // Show the bottom sheet.
final PersistentBottomSheetTestState sheet = containerKey2.currentState as PersistentBottomSheetTestState; final PersistentBottomSheetTestState sheet = containerKey2.currentState! as PersistentBottomSheetTestState;
sheet.showBottomSheet(); sheet.showBottomSheet();
await tester.pump(const Duration(seconds: 1)); 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 // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
// @dart = 2.8
import 'package:flutter_test/flutter_test.dart'; import 'package:flutter_test/flutter_test.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart'; import 'package:flutter/rendering.dart';
@ -333,7 +331,7 @@ void main() {
final List<int> log = <int>[]; final List<int> log = <int>[];
final PageController controller = PageController(viewportFraction: 0.9); final PageController controller = PageController(viewportFraction: 0.9);
Widget build(PageController controller, { Size size }) { Widget build(PageController controller, { Size? size }) {
final Widget pageView = Directionality( final Widget pageView = Directionality(
textDirection: TextDirection.ltr, textDirection: TextDirection.ltr,
child: PageView( child: PageView(
@ -429,7 +427,7 @@ void main() {
testWidgets('Page snapping disable and reenable', (WidgetTester tester) async { testWidgets('Page snapping disable and reenable', (WidgetTester tester) async {
final List<int> log = <int>[]; final List<int> log = <int>[];
Widget build({ bool pageSnapping }) { Widget build({ required bool pageSnapping }) {
return Directionality( return Directionality(
textDirection: TextDirection.ltr, textDirection: TextDirection.ltr,
child: PageView( child: PageView(
@ -643,7 +641,7 @@ void main() {
(WidgetTester tester) async { (WidgetTester tester) async {
// Regression test for https://github.com/flutter/flutter/issues/23873. // Regression test for https://github.com/flutter/flutter/issues/23873.
final PageController controller = PageController(viewportFraction: 1/4, initialPage: 0); final PageController controller = PageController(viewportFraction: 1/4, initialPage: 0);
int tappedIndex; late int tappedIndex;
Widget build() { Widget build() {
return Directionality( return Directionality(

View file

@ -2,17 +2,14 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
// @dart = 2.8
import 'package:flutter_test/flutter_test.dart'; import 'package:flutter_test/flutter_test.dart';
import 'package:flutter/rendering.dart'; import 'package:flutter/rendering.dart';
import 'package:flutter/widgets.dart'; import 'package:flutter/widgets.dart';
import 'package:meta/meta.dart';
Size pageSize = const Size(600.0, 300.0); Size pageSize = const Size(600.0, 300.0);
const List<int> defaultPages = <int>[0, 1, 2, 3, 4, 5]; const List<int> defaultPages = <int>[0, 1, 2, 3, 4, 5];
final List<GlobalKey> globalKeys = defaultPages.map<GlobalKey>((_) => GlobalKey()).toList(); final List<GlobalKey> globalKeys = defaultPages.map<GlobalKey>((_) => GlobalKey()).toList();
int currentPage; int? currentPage;
Widget buildPage(int page) { Widget buildPage(int page) {
return Container( return Container(
@ -26,7 +23,7 @@ Widget buildPage(int page) {
Widget buildFrame({ Widget buildFrame({
bool reverse = false, bool reverse = false,
List<int> pages = defaultPages, List<int> pages = defaultPages,
@required TextDirection textDirection, required TextDirection textDirection,
}) { }) {
final PageView child = PageView( final PageView child = PageView(
scrollDirection: Axis.horizontal, scrollDirection: Axis.horizontal,

View file

@ -2,8 +2,6 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
// @dart = 2.8
import 'package:flutter_test/flutter_test.dart'; import 'package:flutter_test/flutter_test.dart';
import 'package:flutter/rendering.dart'; import 'package:flutter/rendering.dart';
import 'package:flutter/widgets.dart'; import 'package:flutter/widgets.dart';
@ -13,10 +11,10 @@ import 'test_widgets.dart';
class TestParentData { class TestParentData {
TestParentData({ this.top, this.right, this.bottom, this.left }); TestParentData({ this.top, this.right, this.bottom, this.left });
final double top; final double? top;
final double right; final double? right;
final double bottom; final double? bottom;
final double left; final double? left;
} }
void checkTree(WidgetTester tester, List<TestParentData> expectedParentData) { void checkTree(WidgetTester tester, List<TestParentData> expectedParentData) {
@ -27,18 +25,18 @@ void checkTree(WidgetTester tester, List<TestParentData> expectedParentData) {
expect(element.renderObject, isA<RenderStack>()); expect(element.renderObject, isA<RenderStack>());
final RenderStack renderObject = element.renderObject as RenderStack; final RenderStack renderObject = element.renderObject as RenderStack;
try { try {
RenderObject child = renderObject.firstChild; RenderObject? child = renderObject.firstChild;
for (final TestParentData expected in expectedParentData) { for (final TestParentData expected in expectedParentData) {
expect(child, isA<RenderDecoratedBox>()); expect(child, isA<RenderDecoratedBox>());
final RenderDecoratedBox decoratedBox = child as RenderDecoratedBox; final RenderDecoratedBox decoratedBox = child! as RenderDecoratedBox;
expect(decoratedBox.parentData, isA<StackParentData>()); 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.top, equals(expected.top));
expect(parentData.right, equals(expected.right)); expect(parentData.right, equals(expected.right));
expect(parentData.bottom, equals(expected.bottom)); expect(parentData.bottom, equals(expected.bottom));
expect(parentData.left, equals(expected.left)); expect(parentData.left, equals(expected.left));
final StackParentData decoratedBoxParentData = decoratedBox.parentData as StackParentData; final StackParentData? decoratedBoxParentData = decoratedBox.parentData as StackParentData?;
child = decoratedBoxParentData.nextSibling; child = decoratedBoxParentData?.nextSibling;
} }
expect(child, isNull); expect(child, isNull);
} catch (e) { } catch (e) {
@ -431,7 +429,7 @@ void main() {
child: Container(), 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); expect(parentData.string, isNull);
await tester.pumpWidget( 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'); expect(parentData.string, 'Foo');
await tester.pumpWidget( 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'); expect(parentData.string, 'Bar');
}); });
} }
class TestParentDataWidget extends ParentDataWidget<DummyParentData> { class TestParentDataWidget extends ParentDataWidget<DummyParentData> {
const TestParentDataWidget({ const TestParentDataWidget({
Key key, Key? key,
this.string, required this.string,
Widget child, required Widget child,
}) : super(key: key, child: child); }) : super(key: key, child: child);
final String string; final String string;
@ -470,7 +468,7 @@ class TestParentDataWidget extends ParentDataWidget<DummyParentData> {
@override @override
void applyParentData(RenderObject renderObject) { void applyParentData(RenderObject renderObject) {
assert(renderObject.parentData is DummyParentData); assert(renderObject.parentData is DummyParentData);
final DummyParentData parentData = renderObject.parentData as DummyParentData; final DummyParentData parentData = renderObject.parentData! as DummyParentData;
parentData.string = string; parentData.string = string;
} }
@ -479,13 +477,13 @@ class TestParentDataWidget extends ParentDataWidget<DummyParentData> {
} }
class DummyParentData extends ParentData { class DummyParentData extends ParentData {
String string; String? string;
} }
class OneAncestorWidget extends SingleChildRenderObjectWidget { class OneAncestorWidget extends SingleChildRenderObjectWidget {
const OneAncestorWidget({ const OneAncestorWidget({
Key key, Key? key,
Widget child, required Widget child,
}) : super(key: key, child: child); }) : super(key: key, child: child);
@override @override
@ -494,8 +492,8 @@ class OneAncestorWidget extends SingleChildRenderObjectWidget {
class AnotherAncestorWidget extends SingleChildRenderObjectWidget { class AnotherAncestorWidget extends SingleChildRenderObjectWidget {
const AnotherAncestorWidget({ const AnotherAncestorWidget({
Key key, Key? key,
Widget child, required Widget child,
}) : super(key: key, child: child); }) : super(key: key, child: child);
@override @override

View file

@ -2,8 +2,6 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
// @dart = 2.8
import 'package:flutter_test/flutter_test.dart'; import 'package:flutter_test/flutter_test.dart';
import 'package:flutter/widgets.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 // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
// @dart = 2.8
import 'dart:math' as math show pi; import 'dart:math' as math show pi;
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
@ -106,7 +104,7 @@ void main() {
Future<void> _testStackChildren( Future<void> _testStackChildren(
WidgetTester tester, WidgetTester tester,
List<Widget> children, { List<Widget> children, {
@required int expectedErrorCount, required int expectedErrorCount,
bool enableCheck = true, bool enableCheck = true,
}) async { }) async {
assert(expectedErrorCount != null); assert(expectedErrorCount != null);
@ -117,7 +115,7 @@ void main() {
} }
debugDisableShadows = false; debugDisableShadows = false;
int count = 0; int count = 0;
final void Function(FlutterErrorDetails) oldOnError = FlutterError.onError; final void Function(FlutterErrorDetails)? oldOnError = FlutterError.onError;
FlutterError.onError = (FlutterErrorDetails details) { FlutterError.onError = (FlutterErrorDetails details) {
count++; count++;
}; };

View file

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

View file

@ -2,8 +2,6 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
// @dart = 2.8
import 'dart:async'; import 'dart:async';
import 'package:flutter_test/flutter_test.dart'; import 'package:flutter_test/flutter_test.dart';
@ -78,8 +76,8 @@ void main() {
final GlobalKey key = GlobalKey(); final GlobalKey key = GlobalKey();
void recordMetrics() { void recordMetrics() {
final RenderBox box = key.currentContext.findRenderObject() as RenderBox; final RenderBox box = key.currentContext!.findRenderObject()! as RenderBox;
final BoxParentData boxParentData = box.parentData as BoxParentData; final BoxParentData boxParentData = box.parentData! as BoxParentData;
sizes.add(box.size); sizes.add(box.size);
positions.add(boxParentData.offset); 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 // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
// @dart = 2.8
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/gestures.dart'; import 'package:flutter/gestures.dart';
import 'package:flutter_test/flutter_test.dart'; import 'package:flutter_test/flutter_test.dart';
class ExpandingBox extends StatefulWidget { class ExpandingBox extends StatefulWidget {
const ExpandingBox({this.collapsedSize, this.expandedSize}); const ExpandingBox({ required this.collapsedSize, required this.expandedSize });
final double collapsedSize; final double collapsedSize;
final double expandedSize; final double expandedSize;
@ -19,7 +17,7 @@ class ExpandingBox extends StatefulWidget {
} }
class _ExpandingBoxState extends State<ExpandingBox> with AutomaticKeepAliveClientMixin<ExpandingBox>{ class _ExpandingBoxState extends State<ExpandingBox> with AutomaticKeepAliveClientMixin<ExpandingBox>{
double _height; late double _height;
@override @override
void initState() { void initState() {

View file

@ -2,8 +2,6 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
// @dart = 2.8
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
import 'package:flutter/widgets.dart'; import 'package:flutter/widgets.dart';
import 'package:flutter_test/flutter_test.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 // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
// @dart = 2.8
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.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 // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
// @dart = 2.8
import 'package:flutter_test/flutter_test.dart'; import 'package:flutter_test/flutter_test.dart';
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
import 'package:flutter/rendering.dart'; import 'package:flutter/rendering.dart';
@ -12,7 +10,7 @@ import 'package:flutter/widgets.dart';
@immutable @immutable
class Pair<T> { class Pair<T> {
const Pair(this.first, this.second); const Pair(this.first, this.second);
final T first; final T? first;
final T second; final T second;
@override @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 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. /// and which is on bottom every time the widget is rendered.
abstract class Swapper extends RenderObjectWidget { abstract class Swapper extends RenderObjectWidget {
const Swapper({this.stable, this.swapper}); const Swapper({ this.stable, this.swapper });
final Widget stable; final Widget? stable;
final Widget swapper; final Widget? swapper;
@override @override
SwapperElement createElement(); SwapperElement createElement();
@ -45,8 +43,8 @@ abstract class Swapper extends RenderObjectWidget {
class SwapperWithProperOverrides extends Swapper { class SwapperWithProperOverrides extends Swapper {
const SwapperWithProperOverrides({ const SwapperWithProperOverrides({
Widget stable, Widget? stable,
Widget swapper, Widget? swapper,
}) : super(stable: stable, swapper: swapper); }) : super(stable: stable, swapper: swapper);
@override @override
@ -55,8 +53,8 @@ class SwapperWithProperOverrides extends Swapper {
class SwapperWithNoOverrides extends Swapper { class SwapperWithNoOverrides extends Swapper {
const SwapperWithNoOverrides({ const SwapperWithNoOverrides({
Widget stable, Widget? stable,
Widget swapper, Widget? swapper,
}) : super(stable: stable, swapper: swapper); }) : super(stable: stable, swapper: swapper);
@override @override
@ -65,8 +63,8 @@ class SwapperWithNoOverrides extends Swapper {
class SwapperWithDeprecatedOverrides extends Swapper { class SwapperWithDeprecatedOverrides extends Swapper {
const SwapperWithDeprecatedOverrides({ const SwapperWithDeprecatedOverrides({
Widget stable, Widget? stable,
Widget swapper, Widget? swapper,
}) : super(stable: stable, swapper: swapper); }) : super(stable: stable, swapper: swapper);
@override @override
@ -76,8 +74,8 @@ class SwapperWithDeprecatedOverrides extends Swapper {
abstract class SwapperElement extends RenderObjectElement { abstract class SwapperElement extends RenderObjectElement {
SwapperElement(Swapper widget) : super(widget); SwapperElement(Swapper widget) : super(widget);
Element stable; Element? stable;
Element swapper; Element? swapper;
bool swapperIsOnTop = true; bool swapperIsOnTop = true;
List<dynamic> insertSlots = <dynamic>[]; List<dynamic> insertSlots = <dynamic>[];
List<Pair<dynamic>> moveSlots = <Pair<dynamic>>[]; List<Pair<dynamic>> moveSlots = <Pair<dynamic>>[];
@ -92,9 +90,9 @@ abstract class SwapperElement extends RenderObjectElement {
@override @override
void visitChildren(ElementVisitor visitor) { void visitChildren(ElementVisitor visitor) {
if (stable != null) if (stable != null)
visitor(stable); visitor(stable!);
if (swapper != null) if (swapper != null)
visitor(swapper); visitor(swapper!);
} }
@override @override
@ -104,7 +102,7 @@ abstract class SwapperElement extends RenderObjectElement {
} }
@override @override
void mount(Element parent, dynamic newSlot) { void mount(Element? parent, dynamic newSlot) {
super.mount(parent, newSlot); super.mount(parent, newSlot);
_updateChildren(widget); _updateChildren(widget);
} }
@ -183,22 +181,22 @@ class SwapperElementWithDeprecatedOverrides extends SwapperElement {
} }
class RenderSwapper extends RenderBox { class RenderSwapper extends RenderBox {
RenderBox _stable; RenderBox? _stable;
RenderBox get stable => _stable; RenderBox? get stable => _stable;
set stable(RenderBox child) { set stable(RenderBox? child) {
if (child == _stable) if (child == _stable)
return; return;
if (_stable != null) if (_stable != null)
dropChild(_stable); dropChild(_stable!);
_stable = child; _stable = child;
if (child != null) if (child != null)
adoptChild(child); adoptChild(child);
} }
bool _swapperIsOnTop; bool? _swapperIsOnTop;
RenderBox _swapper; RenderBox? _swapper;
RenderBox get swapper => _swapper; RenderBox? get swapper => _swapper;
void setSwapper(RenderBox child, bool isOnTop) { void setSwapper(RenderBox? child, bool isOnTop) {
if (isOnTop != _swapperIsOnTop) { if (isOnTop != _swapperIsOnTop) {
_swapperIsOnTop = isOnTop; _swapperIsOnTop = isOnTop;
markNeedsLayout(); markNeedsLayout();
@ -206,7 +204,7 @@ class RenderSwapper extends RenderBox {
if (child == _swapper) if (child == _swapper)
return; return;
if (_swapper != null) if (_swapper != null)
dropChild(_swapper); dropChild(_swapper!);
_swapper = child; _swapper = child;
if (child != null) if (child != null)
adoptChild(child); adoptChild(child);
@ -215,9 +213,9 @@ class RenderSwapper extends RenderBox {
@override @override
void visitChildren(RenderObjectVisitor visitor) { void visitChildren(RenderObjectVisitor visitor) {
if (_stable != null) if (_stable != null)
visitor(_stable); visitor(_stable!);
if (_swapper != null) if (_swapper != null)
visitor(_swapper); visitor(_swapper!);
} }
@override @override
@ -244,21 +242,21 @@ class RenderSwapper extends RenderBox {
maxHeight: constraints.maxHeight / 2, maxHeight: constraints.maxHeight / 2,
); );
if (_stable != null) { if (_stable != null) {
final BoxParentData stableParentData = _stable.parentData as BoxParentData; final BoxParentData stableParentData = _stable!.parentData! as BoxParentData;
_stable.layout(childConstraints); _stable!.layout(childConstraints);
stableParentData.offset = _swapperIsOnTop ? bottomOffset : topOffset; stableParentData.offset = _swapperIsOnTop! ? bottomOffset : topOffset;
} }
if (_swapper != null) { if (_swapper != null) {
final BoxParentData swapperParentData = _swapper.parentData as BoxParentData; final BoxParentData swapperParentData = _swapper!.parentData! as BoxParentData;
_swapper.layout(childConstraints); _swapper!.layout(childConstraints);
swapperParentData.offset = _swapperIsOnTop ? topOffset : bottomOffset; swapperParentData.offset = _swapperIsOnTop! ? topOffset : bottomOffset;
} }
} }
@override @override
void paint(PaintingContext context, Offset offset) { void paint(PaintingContext context, Offset offset) {
visitChildren((RenderObject child) { visitChildren((RenderObject child) {
final BoxParentData childParentData = child.parentData as BoxParentData; final BoxParentData childParentData = child.parentData! as BoxParentData;
context.paintChild(child, offset + childParentData.offset); 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() { void main() {
testWidgets('RenderObjectElement *RenderObjectChild methods get called with correct arguments', (WidgetTester tester) async { 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.insertSlots.length, 2);
expect(swapper.moveSlots.length, 1); expect(swapper.moveSlots.length, 1);
expect(swapper.removeSlots.length, 2); 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 { 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 // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
// @dart = 2.8
import 'package:flutter_test/flutter_test.dart'; import 'package:flutter_test/flutter_test.dart';
import 'package:flutter/rendering.dart'; import 'package:flutter/rendering.dart';
import 'package:flutter/widgets.dart'; import 'package:flutter/widgets.dart';
@ -16,8 +14,8 @@ final BoxDecoration kBoxDecorationC = BoxDecoration(border: nonconst(null));
class TestWidget extends StatelessWidget { class TestWidget extends StatelessWidget {
const TestWidget({ const TestWidget({
Key key, Key? key,
this.child, required this.child,
}) : super(key: key); }) : super(key: key);
final Widget child; final Widget child;
@ -27,18 +25,16 @@ class TestWidget extends StatelessWidget {
} }
class TestOrientedBox extends SingleChildRenderObjectWidget { 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) { Decoration _getDecoration(BuildContext context) {
final Orientation orientation = MediaQuery.of(context).orientation; final Orientation orientation = MediaQuery.of(context)!.orientation;
switch (orientation) { switch (orientation) {
case Orientation.landscape: case Orientation.landscape:
return const BoxDecoration(color: Color(0xFF00FF00)); return const BoxDecoration(color: Color(0xFF00FF00));
case Orientation.portrait: case Orientation.portrait:
return const BoxDecoration(color: Color(0xFF0000FF)); return const BoxDecoration(color: Color(0xFF0000FF));
} }
assert(orientation != null);
return null;
} }
@override @override
@ -51,7 +47,7 @@ class TestOrientedBox extends SingleChildRenderObjectWidget {
} }
class TestNonVisitingWidget 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 @override
RenderObject createRenderObject(BuildContext context) => TestNonVisitingRenderObject(); RenderObject createRenderObject(BuildContext context) => TestNonVisitingRenderObject();
@ -60,13 +56,13 @@ class TestNonVisitingWidget extends SingleChildRenderObjectWidget {
class TestNonVisitingRenderObject extends RenderBox with RenderObjectWithChildMixin<RenderBox> { class TestNonVisitingRenderObject extends RenderBox with RenderObjectWithChildMixin<RenderBox> {
@override @override
void performLayout() { void performLayout() {
child.layout(constraints, parentUsesSize: true); child!.layout(constraints, parentUsesSize: true);
size = child.size; size = child!.size;
} }
@override @override
void paint(PaintingContext context, Offset offset) { void paint(PaintingContext context, Offset offset) {
context.paintChild(child, offset); context.paintChild(child!, offset);
} }
@override @override
@ -107,7 +103,7 @@ void main() {
expect(renderObject.position, equals(DecorationPosition.background)); expect(renderObject.position, equals(DecorationPosition.background));
expect(renderObject.child, isNotNull); expect(renderObject.child, isNotNull);
expect(renderObject.child, isA<RenderDecoratedBox>()); 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.decoration, equals(kBoxDecorationB));
expect(child.position, equals(DecorationPosition.background)); expect(child.position, equals(DecorationPosition.background));
expect(child.child, isNull); expect(child.child, isNull);
@ -196,10 +192,10 @@ void main() {
expect(element.renderObject, isA<RenderDecoratedBox>()); expect(element.renderObject, isA<RenderDecoratedBox>());
final RenderDecoratedBox parent = element.renderObject as RenderDecoratedBox; final RenderDecoratedBox parent = element.renderObject as RenderDecoratedBox;
expect(parent.child, isA<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.decoration, equals(kBoxDecorationB));
expect(child.child, isA<RenderDecoratedBox>()); 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.decoration, equals(kBoxDecorationC));
expect(grandChild.child, isNull); 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 // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
// @dart = 2.8
import 'package:flutter/widgets.dart'; import 'package:flutter/widgets.dart';
import 'package:flutter_test/flutter_test.dart'; import 'package:flutter_test/flutter_test.dart';
// This is a regression test for https://github.com/flutter/flutter/issues/5588. // This is a regression test for https://github.com/flutter/flutter/issues/5588.
class OrderSwitcher extends StatefulWidget { 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 a;
final Widget b; final Widget b;
@ -47,7 +49,7 @@ class OrderSwitcherState extends State<OrderSwitcher> {
} }
class DummyStatefulWidget extends StatefulWidget { class DummyStatefulWidget extends StatefulWidget {
const DummyStatefulWidget(Key key) : super(key: key); const DummyStatefulWidget(Key? key) : super(key: key);
@override @override
DummyStatefulWidgetState createState() => DummyStatefulWidgetState(); DummyStatefulWidgetState createState() => DummyStatefulWidgetState();
@ -60,18 +62,18 @@ class DummyStatefulWidgetState extends State<DummyStatefulWidget> {
class RekeyableDummyStatefulWidgetWrapper extends StatefulWidget { class RekeyableDummyStatefulWidgetWrapper extends StatefulWidget {
const RekeyableDummyStatefulWidgetWrapper({ const RekeyableDummyStatefulWidgetWrapper({
Key key, Key? key,
this.child, this.child,
this.initialKey, required this.initialKey,
}) : super(key: key); }) : super(key: key);
final Widget child; final Widget? child;
final GlobalKey initialKey; final GlobalKey initialKey;
@override @override
RekeyableDummyStatefulWidgetWrapperState createState() => RekeyableDummyStatefulWidgetWrapperState(); RekeyableDummyStatefulWidgetWrapperState createState() => RekeyableDummyStatefulWidgetWrapperState();
} }
class RekeyableDummyStatefulWidgetWrapperState extends State<RekeyableDummyStatefulWidgetWrapper> { class RekeyableDummyStatefulWidgetWrapperState extends State<RekeyableDummyStatefulWidgetWrapper> {
GlobalKey _key; GlobalKey? _key;
@override @override
void initState() { void initState() {
@ -79,7 +81,7 @@ class RekeyableDummyStatefulWidgetWrapperState extends State<RekeyableDummyState
_key = widget.initialKey; _key = widget.initialKey;
} }
void _setChild(GlobalKey value) { void _setChild(GlobalKey? value) {
setState(() { setState(() {
_key = value; _key = value;
}); });
@ -160,7 +162,7 @@ void main() {
expect(find.byType(RekeyableDummyStatefulWidgetWrapper), findsNWidgets(2)); expect(find.byType(RekeyableDummyStatefulWidgetWrapper), findsNWidgets(2));
expect(find.byType(DummyStatefulWidget), 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 List<State> states = tester.stateList(find.byType(RekeyableDummyStatefulWidgetWrapper)).toList();
final RekeyableDummyStatefulWidgetWrapperState a = states[0] as RekeyableDummyStatefulWidgetWrapperState; final RekeyableDummyStatefulWidgetWrapperState a = states[0] as RekeyableDummyStatefulWidgetWrapperState;
a._setChild(null); a._setChild(null);

View file

@ -2,33 +2,31 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
// @dart = 2.8
import 'package:flutter_test/flutter_test.dart'; import 'package:flutter_test/flutter_test.dart';
import 'package:flutter/widgets.dart'; import 'package:flutter/widgets.dart';
class StateMarker extends StatefulWidget { 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 @override
StateMarkerState createState() => StateMarkerState(); StateMarkerState createState() => StateMarkerState();
} }
class StateMarkerState extends State<StateMarker> { class StateMarkerState extends State<StateMarker> {
String marker; String? marker;
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
if (widget.child != null) if (widget.child != null)
return widget.child; return widget.child!;
return Container(); return Container();
} }
} }
class DeactivateLogger extends StatefulWidget { 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; 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'; leftState.marker = 'left';
final StateMarkerState rightState = right.currentState as StateMarkerState; final StateMarkerState rightState = right.currentState! as StateMarkerState;
rightState.marker = 'right'; rightState.marker = 'right';
final StateMarkerState grandchildState = tester.state(find.byWidget(grandchild)); 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'; leftState.marker = 'left';
final StateMarkerState rightState = right.currentState as StateMarkerState; final StateMarkerState rightState = right.currentState! as StateMarkerState;
rightState.marker = 'right'; rightState.marker = 'right';
final StateMarkerState grandchildState = tester.state(find.byWidget(grandchild)); final StateMarkerState grandchildState = tester.state(find.byWidget(grandchild));
@ -198,7 +196,7 @@ void main() {
await tester.pumpWidget(StateMarker(key: key)); await tester.pumpWidget(StateMarker(key: key));
final StateMarkerState keyState = key.currentState as StateMarkerState; final StateMarkerState keyState = key.currentState! as StateMarkerState;
keyState.marker = 'marked'; keyState.marker = 'marked';
await tester.pumpWidget( 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'; keyState.marker = 'marked';
await tester.pumpWidget(Stack( 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'; keyState.marker = 'marked';
await tester.pumpWidget(Stack( 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 // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
// @dart = 2.8
import 'dart:ui' as ui show window; import 'dart:ui' as ui show window;
import 'package:flutter/material.dart'; 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. // This is a regression test for https://github.com/flutter/flutter/issues/5840.
class Bar extends StatefulWidget { class Bar extends StatefulWidget {
const Bar({ Key key }) : super(key: key); const Bar({ Key? key }) : super(key: key);
@override @override
BarState createState() => BarState(); BarState createState() => BarState();
} }
@ -49,7 +47,7 @@ class BarState extends State<Bar> {
} }
class StatefulCreationCounter extends StatefulWidget { class StatefulCreationCounter extends StatefulWidget {
const StatefulCreationCounter({ Key key }) : super(key: key); const StatefulCreationCounter({ Key? key }) : super(key: key);
@override @override
StatefulCreationCounterState createState() => StatefulCreationCounterState(); StatefulCreationCounterState createState() => StatefulCreationCounterState();
@ -82,9 +80,9 @@ void main() {
testWidgets('Clean then reparent with dependencies', (WidgetTester tester) async { testWidgets('Clean then reparent with dependencies', (WidgetTester tester) async {
int layoutBuilderBuildCount = 0; int layoutBuilderBuildCount = 0;
StateSetter keyedSetState; late StateSetter keyedSetState;
StateSetter layoutBuilderSetState; late StateSetter layoutBuilderSetState;
StateSetter childSetState; late StateSetter childSetState;
final GlobalKey key = GlobalKey(); final GlobalKey key = GlobalKey();
final Widget keyedWidget = StatefulBuilder( 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 // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
// @dart = 2.8
import 'package:flutter/widgets.dart'; import 'package:flutter/widgets.dart';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
import 'package:flutter_test/flutter_test.dart'; import 'package:flutter_test/flutter_test.dart';
@ -19,14 +17,6 @@ void main() {
expect(() => _TestRestorableValue().value, throwsAssertionError); 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 { testWidgets('work when not in restoration scope', (WidgetTester tester) async {
await tester.pumpWidget(const _RestorableWidget()); await tester.pumpWidget(const _RestorableWidget());
@ -119,22 +109,6 @@ void main() {
expect(find.text('guten tag'), findsOneWidget); 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 { testWidgets('restore to older state', (WidgetTester tester) async {
await tester.pumpWidget(const RootRestorationScope( await tester.pumpWidget(const RootRestorationScope(
restorationId: 'root-child', restorationId: 'root-child',
@ -320,7 +294,7 @@ class _TestRestorableValue extends RestorableValue<Object> {
int didUpdateValueCallCount = 0; int didUpdateValueCallCount = 0;
@override @override
void didUpdateValue(Object oldValue) { void didUpdateValue(Object? oldValue) {
didUpdateValueCallCount++; didUpdateValueCallCount++;
notifyListeners(); notifyListeners();
} }
@ -337,7 +311,7 @@ class _TestRestorableValue extends RestorableValue<Object> {
} }
class _RestorableWidget extends StatefulWidget { class _RestorableWidget extends StatefulWidget {
const _RestorableWidget({Key key}) : super(key: key); const _RestorableWidget({Key? key}) : super(key: key);
@override @override
State<_RestorableWidget> createState() => _RestorableWidgetState(); State<_RestorableWidget> createState() => _RestorableWidgetState();
@ -353,7 +327,7 @@ class _RestorableWidgetState extends State<_RestorableWidget> with RestorationMi
final _TestRestorableValue objectValue = _TestRestorableValue(); final _TestRestorableValue objectValue = _TestRestorableValue();
@override @override
void restoreState(RestorationBucket oldBucket, bool initialRestore) { void restoreState(RestorationBucket? oldBucket, bool initialRestore) {
registerForRestoration(numValue, 'num'); registerForRestoration(numValue, 'num');
registerForRestoration(doubleValue, 'double'); registerForRestoration(doubleValue, 'double');
registerForRestoration(intValue, 'int'); registerForRestoration(intValue, 'int');
@ -369,7 +343,7 @@ class _RestorableWidgetState extends State<_RestorableWidget> with RestorationMi
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Text(stringValue.value ?? 'null', textDirection: TextDirection.ltr,); return Text(stringValue.value, textDirection: TextDirection.ltr,);
} }
@override @override