disposable_build_context_test.dart 1.29 KB
Newer Older
1 2 3 4 5
// 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';
6
import 'package:flutter_test/flutter_test.dart';
7 8 9 10 11 12 13


void main() {
  testWidgets('DisposableBuildContext asserts on disposed state', (WidgetTester tester) async {
    final GlobalKey<TestWidgetState> key = GlobalKey<TestWidgetState>();
    await tester.pumpWidget(TestWidget(key));

14
    final TestWidgetState state = key.currentState!;
15 16 17 18 19 20 21 22 23 24 25 26
    expect(state.mounted, true);

    final DisposableBuildContext context = DisposableBuildContext(state);
    expect(context.context, state.context);

    await tester.pumpWidget(const TestWidget(null));

    expect(state.mounted, false);

    expect(() => context.context, throwsAssertionError);

    context.dispose();
27 28
    expect(context.context, null);
    expect(() => state.context, throwsFlutterError);
29 30 31 32 33 34

    expect(() => DisposableBuildContext(state), throwsAssertionError);
  });
}

class TestWidget extends StatefulWidget {
35
  const TestWidget(Key? key) : super(key: key);
36 37 38 39 40 41 42 43 44

  @override
  State<TestWidget> createState() => TestWidgetState();
}

class TestWidgetState extends State<TestWidget> {
  @override
  Widget build(BuildContext context) => const SizedBox(height: 50);
}