| // 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:typed_data'; |
| |
| import 'package:flutter/material.dart'; |
| |
| class LargeImagesPage extends StatelessWidget { |
| const LargeImagesPage({super.key}); |
| |
| @override |
| Widget build(BuildContext context) { |
| final ImageCache imageCache = PaintingBinding.instance.imageCache; |
| imageCache.maximumSize = 30; |
| imageCache.maximumSizeBytes = 50 << 20; |
| return GridView.builder( |
| itemCount: 1000, |
| gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 3), |
| itemBuilder: (BuildContext context, int index) => DummyImage(index), |
| ).build(context); |
| } |
| } |
| |
| class DummyImage extends StatelessWidget { |
| DummyImage(this.index) : super(key: ValueKey<int>(index)); |
| |
| @override |
| Widget build(BuildContext context) { |
| final Future<ByteData> pngData = _getPngData(context); |
| |
| return FutureBuilder<ByteData>( |
| future: pngData, |
| builder: (BuildContext context, AsyncSnapshot<ByteData> snapshot) { |
| // Use Image.memory instead of Image.asset to make sure that we're |
| // creating many copies of the image to trigger the memory issue. |
| return snapshot.data == null |
| ? Container() |
| : Image.memory(snapshot.data!.buffer.asUint8List()); |
| }, |
| ); |
| } |
| |
| final int index; |
| |
| Future<ByteData> _getPngData(BuildContext context) async { |
| return DefaultAssetBundle.of(context).load('assets/999x1000.png'); |
| } |
| } |