1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
import 'package:sky/widgets.dart';
import 'package:test/test.dart';
import 'widget_tester.dart';
class Item {
GlobalKey key1 = new GlobalKey();
GlobalKey key2 = new GlobalKey();
String toString() => "Item($key1, $key2)";
}
List<Item> items = [new Item(), new Item()];
class StatefulLeaf extends StatefulComponent {
StatefulLeaf({ GlobalKey key }) : super(key: key);
StatefulLeafState createState() => new StatefulLeafState();
}
class StatefulLeafState extends State<StatefulLeaf> {
void test() { setState(() { }); }
Widget build(BuildContext context) => new Text('leaf');
}
class KeyedWrapper extends StatelessComponent {
KeyedWrapper(this.key1, this.key2);
Key key1, key2;
Widget build(BuildContext context) {
return new Container(
key: key1,
child: new StatefulLeaf(
key: key2
)
);
}
}
Widget builder() {
return new Column([
new KeyedWrapper(items[1].key1, items[1].key2),
new KeyedWrapper(items[0].key1, items[0].key2)
]);
}
void main() {
test('duplicate key smoke test', () {
testWidgets((WidgetTester tester) {
tester.pumpWidget(builder());
StatefulLeafState leaf = tester.findStateOfType(StatefulLeafState);
leaf.test();
tester.pump();
Item lastItem = items[1];
items.remove(lastItem);
items.insert(0, lastItem);
tester.pumpWidget(builder()); // this marks the app dirty and rebuilds it
});
});
}