blob: 5dd70ffc1160aa574ad1a49f50e05d659235a02a [file] [log] [blame]
// 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 'dart:typed_data';
import 'package:flutter/material.dart';
class LargeImagesPage extends StatelessWidget {
@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');
}
}