mirror of
https://github.com/alibaba/flutter-go.git
synced 2025-07-13 00:22:23 +08:00
87 lines
2.6 KiB
Dart
87 lines
2.6 KiB
Dart
// Copyright 2015 The Chromium Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
import 'package:flutter_web_test/flutter_web_test.dart';
|
|
import 'package:flutter_web/widgets.dart';
|
|
|
|
class InnerWidget extends StatefulWidget {
|
|
const InnerWidget({Key key}) : super(key: key);
|
|
|
|
@override
|
|
InnerWidgetState createState() => InnerWidgetState();
|
|
}
|
|
|
|
class InnerWidgetState extends State<InnerWidget> {
|
|
bool _didInitState = false;
|
|
|
|
@override
|
|
void initState() {
|
|
super.initState();
|
|
_didInitState = true;
|
|
}
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return Container();
|
|
}
|
|
}
|
|
|
|
class OuterContainer extends StatefulWidget {
|
|
const OuterContainer({Key key, this.child}) : super(key: key);
|
|
|
|
final InnerWidget child;
|
|
|
|
@override
|
|
OuterContainerState createState() => OuterContainerState();
|
|
}
|
|
|
|
class OuterContainerState extends State<OuterContainer> {
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return widget.child;
|
|
}
|
|
}
|
|
|
|
void main() {
|
|
testWidgets('resync stateful widget', (WidgetTester tester) async {
|
|
const Key innerKey = Key('inner');
|
|
const Key outerKey = Key('outer');
|
|
|
|
const InnerWidget inner1 = InnerWidget(key: innerKey);
|
|
InnerWidget inner2;
|
|
const OuterContainer outer1 = OuterContainer(key: outerKey, child: inner1);
|
|
OuterContainer outer2;
|
|
|
|
await tester.pumpWidget(outer1);
|
|
|
|
final StatefulElement innerElement = tester.element(find.byKey(innerKey));
|
|
final InnerWidgetState innerElementState = innerElement.state;
|
|
expect(innerElementState.widget, equals(inner1));
|
|
expect(innerElementState._didInitState, isTrue);
|
|
expect(innerElement.renderObject.attached, isTrue);
|
|
|
|
inner2 = const InnerWidget(key: innerKey);
|
|
outer2 = OuterContainer(key: outerKey, child: inner2);
|
|
|
|
await tester.pumpWidget(outer2);
|
|
|
|
expect(tester.element(find.byKey(innerKey)), equals(innerElement));
|
|
expect(innerElement.state, equals(innerElementState));
|
|
|
|
expect(innerElementState.widget, equals(inner2));
|
|
expect(innerElementState._didInitState, isTrue);
|
|
expect(innerElement.renderObject.attached, isTrue);
|
|
|
|
final StatefulElement outerElement = tester.element(find.byKey(outerKey));
|
|
expect(outerElement.state.widget, equals(outer2));
|
|
outerElement.markNeedsBuild();
|
|
await tester.pump();
|
|
|
|
expect(tester.element(find.byKey(innerKey)), equals(innerElement));
|
|
expect(innerElement.state, equals(innerElementState));
|
|
expect(innerElementState.widget, equals(inner2));
|
|
expect(innerElement.renderObject.attached, isTrue);
|
|
});
|
|
}
|