| // Copyright 2014 The Flutter 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/scheduler.dart'; |
| import 'package:flutter/widgets.dart'; |
| import 'package:flutter_test/flutter_test.dart'; |
| |
| import 'common.dart'; |
| |
| final Set<String> interestingLabels = <String>{ |
| '$Row', |
| '$TestRoot', |
| '$TestChildWidget', |
| '$Container', |
| }; |
| |
| void main() { |
| ZoneIgnoringTestBinding.ensureInitialized(); |
| initTimelineTests(); |
| test('Children of MultiChildRenderObjectElement show up in tracing', () async { |
| // We don't have expectations around the first frame because there's a race around |
| // the warm-up frame that we don't want to get involved in here. |
| await runFrame(() { runApp(const TestRoot()); }); |
| await SchedulerBinding.instance.endOfFrame; |
| await fetchInterestingEvents(interestingLabels); |
| |
| debugProfileBuildsEnabled = true; |
| |
| await runFrame(() { |
| TestRoot.state.showRow(); |
| }); |
| expect( |
| await fetchInterestingEventNames(interestingLabels), |
| <String>['TestRoot', 'Row', 'TestChildWidget', 'Container', 'TestChildWidget', 'Container'], |
| ); |
| |
| debugProfileBuildsEnabled = false; |
| }, skip: isBrowser); // [intended] uses dart:isolate and io. |
| } |
| |
| class TestRoot extends StatefulWidget { |
| const TestRoot({super.key}); |
| |
| static late TestRootState state; |
| |
| @override |
| State<TestRoot> createState() => TestRootState(); |
| } |
| |
| class TestRootState extends State<TestRoot> { |
| @override |
| void initState() { |
| super.initState(); |
| TestRoot.state = this; |
| } |
| |
| bool _showRow = false; |
| void showRow() { |
| setState(() { |
| _showRow = true; |
| }); |
| } |
| |
| @override |
| Widget build(BuildContext context) { |
| return _showRow |
| ? const Row( |
| children: <Widget>[ |
| TestChildWidget(), |
| TestChildWidget(), |
| ], |
| ) |
| : Container(); |
| } |
| } |
| |
| class TestChildWidget extends StatelessWidget { |
| const TestChildWidget({super.key}); |
| |
| @override |
| Widget build(BuildContext context) { |
| return Container(); |
| } |
| } |