// 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 'dart:io'; import 'package:flutter/material.dart'; import 'package:flutter_api_samples/widgets/image/image.loading_builder.0.dart' as example; import 'package:flutter_test/flutter_test.dart'; void main() { // The app being tested loads images via HTTP which the test // framework defeats by default. setUpAll(() { HttpOverrides.global = null; }); testWidgets('The loading builder returns the child when there is no loading progress', ( WidgetTester tester, ) async { await tester.pumpWidget(const example.LoadingBuilderExampleApp()); await tester.pumpAndSettle(); final Image image = tester.widget(find.byType(Image)); final ImageLoadingBuilder loadingBuilder = image.loadingBuilder!; final BuildContext context = tester.element(find.byType(Image)); const SizedBox child = SizedBox(key: Key('child')); await tester.pumpWidget(loadingBuilder(context, child, null)); expect(find.byWidget(child), findsOne); expect(find.byType(CircularProgressIndicator), findsNothing); }); testWidgets('The loading builder returns a circular progress indicator when loading', ( WidgetTester tester, ) async { await tester.pumpWidget(const example.LoadingBuilderExampleApp()); await tester.pumpAndSettle(); final Image image = tester.widget(find.byType(Image)); final ImageLoadingBuilder loadingBuilder = image.loadingBuilder!; final BuildContext context = tester.element(find.byType(Image)); const SizedBox child = SizedBox(key: Key('child')); await tester.pumpWidget( MaterialApp( home: loadingBuilder( context, child, const ImageChunkEvent(cumulativeBytesLoaded: 1, expectedTotalBytes: 10), ), ), ); expect(find.byWidget(child), findsNothing); expect(find.byType(CircularProgressIndicator), findsOne); }); }