| // 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:async'; |
| |
| import 'package:flutter/material.dart'; |
| import 'package:flutter/services.dart'; |
| |
| final Completer<void> _assetImageCompleter = Completer<void>(); |
| final Completer<void> _networkImageCompleter = Completer<void>(); |
| |
| /// Notifies that Image.asset used in the test app loaded the image. |
| @visibleForTesting |
| Future<void> get whenAssetImageLoads => _assetImageCompleter.future; |
| |
| /// Notifies that Image.network used in the test app loaded the image. |
| @visibleForTesting |
| Future<void> get whenNetworkImageLoads => _networkImageCompleter.future; |
| |
| Future<void> main() async { |
| WidgetsFlutterBinding.ensureInitialized(); |
| const MethodChannel channel = |
| OptionalMethodChannel('flutter/web_test_e2e', JSONMethodCodec()); |
| |
| // Artificially override the device pixel ratio to force the framework to pick the 1.5x asset variants. |
| await channel.invokeMethod<void>('setDevicePixelRatio', '1.5'); |
| runApp(const MyApp()); |
| } |
| |
| class MyApp extends StatefulWidget { |
| const MyApp({super.key}); |
| |
| @override |
| MyAppState createState() => MyAppState(); |
| } |
| |
| class MyAppState extends State<MyApp> { |
| @override |
| Widget build(BuildContext context) { |
| return MaterialApp( |
| key: const Key('mainapp'), |
| title: 'Integration Test App', |
| home: Column(children: <Widget>[ |
| const Text('Asset image:'), |
| RepaintBoundary(child: Image.asset( |
| 'assets/icons/material/material.png', |
| package: 'flutter_gallery_assets', |
| frameBuilder: ( |
| BuildContext context, |
| Widget child, |
| int? frame, |
| bool wasSynchronouslyLoaded, |
| ) { |
| if (frame != null) { |
| _assetImageCompleter.complete(); |
| } |
| return child; |
| }, |
| )), |
| const Text('Network image:'), |
| RepaintBoundary(child: Image.network( |
| 'assets/packages/flutter_gallery_assets/assets/icons/material/material.png', |
| frameBuilder: ( |
| BuildContext context, |
| Widget child, |
| int? frame, |
| bool wasSynchronouslyLoaded, |
| ) { |
| if (frame != null) { |
| _networkImageCompleter.complete(); |
| } |
| return child; |
| }, |
| )), |
| ]) |
| ); |
| } |
| } |