build_context_test.dart 1.76 KB
Newer Older
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 57 58 59 60 61 62 63
// 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/widgets.dart';
import 'package:flutter_test/flutter_test.dart';

void main() {
  testWidgets('StatefulWidget BuildContext.mounted', (WidgetTester tester) async {
    late BuildContext capturedContext;
    await tester.pumpWidget(TestStatefulWidget(
        onBuild: (BuildContext context) {
          capturedContext = context;
        }
    ));
    expect(capturedContext.mounted, isTrue);
    await tester.pumpWidget(Container());
    expect(capturedContext.mounted, isFalse);
  });

  testWidgets('StatelessWidget BuildContext.mounted', (WidgetTester tester) async {
    late BuildContext capturedContext;
    await tester.pumpWidget(TestStatelessWidget(
      onBuild: (BuildContext context) {
        capturedContext = context;
      }
    ));
    expect(capturedContext.mounted, isTrue);
    await tester.pumpWidget(Container());
    expect(capturedContext.mounted, isFalse);
  });
}

typedef BuildCallback = void Function(BuildContext);

class TestStatelessWidget extends StatelessWidget {
  const TestStatelessWidget({super.key, required this.onBuild});

  final BuildCallback onBuild;

  @override
  Widget build(BuildContext context) {
    onBuild(context);
    return Container();
  }
}

class TestStatefulWidget extends StatefulWidget {
  const TestStatefulWidget({super.key, required this.onBuild});

  final BuildCallback onBuild;

  @override
  State<TestStatefulWidget> createState() => _TestStatefulWidgetState();
}

class _TestStatefulWidgetState extends State<TestStatefulWidget> {
  @override
  Widget build(BuildContext context) {
    widget.onBuild(context);
    return Container();
  }
}