set_state_2_test.dart 1.57 KB
Newer Older
Ian Hickson's avatar
Ian Hickson committed
1
// Copyright 2014 The Flutter Authors. All rights reserved.
2 3 4 5
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

import 'package:flutter/widgets.dart';
6
import 'package:flutter_test/flutter_test.dart';
7
import 'package:leak_tracker_flutter_testing/leak_tracker_flutter_testing.dart';
8 9

void main() {
10
  testWidgetsWithLeakTracking('setState() overbuild test', (WidgetTester tester) async {
11
    final List<String> log = <String>[];
12
    final Builder inner = Builder(
13 14
      builder: (BuildContext context) {
        log.add('inner');
Ian Hickson's avatar
Ian Hickson committed
15
        return const Text('inner', textDirection: TextDirection.ltr);
16
      },
17 18
    );
    int value = 0;
19
    await tester.pumpWidget(Builder(
20 21
      builder: (BuildContext context) {
        log.add('outer');
22
        return StatefulBuilder(
23 24
          builder: (BuildContext context, StateSetter setState) {
            log.add('stateful');
25
            return GestureDetector(
26 27 28 29 30
              onTap: () {
                setState(() {
                  value += 1;
                });
              },
31
              child: Builder(
32 33 34
                builder: (BuildContext context) {
                  log.add('middle $value');
                  return inner;
35
                },
36
              ),
37
            );
38
          },
39
        );
40
      },
41 42
    ));
    log.add('---');
pq's avatar
pq committed
43
    await tester.tap(find.text('inner'));
44
    await tester.pump();
45 46 47 48 49 50 51 52 53 54 55
    log.add('---');
    expect(log, equals(<String>[
      'outer',
      'stateful',
      'middle 0',
      'inner',
      '---',
      'stateful',
      'middle 1',
      '---',
    ]));
56 57
  });
}