| // 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'; |
| |
| /// Displays a new (from image cache's perspective) large image every 500ms. |
| class LargeImageChangerPage extends StatefulWidget { |
| const LargeImageChangerPage({super.key}); |
| |
| @override |
| State<LargeImageChangerPage> createState() => _LargeImageChangerState(); |
| } |
| |
| class _LargeImageChangerState extends State<LargeImageChangerPage> { |
| Timer? _timer; |
| int imageIndex = 0; |
| late ImageProvider currentImage; |
| |
| @override |
| void didChangeDependencies() { |
| super.didChangeDependencies(); |
| currentImage = ResizeImage( |
| const ExactAssetImage('assets/999x1000.png'), |
| width: (MediaQuery.of(context).size.width * 2).toInt() + imageIndex, |
| height: (MediaQuery.of(context).size.height * 2).toInt() + imageIndex, |
| allowUpscaling: true, |
| ); |
| _timer?.cancel(); |
| _timer = Timer.periodic(const Duration(seconds: 3), (Timer timer) { |
| currentImage.evict().then((_) { |
| setState(() { |
| imageIndex = (imageIndex + 1) % 6; |
| currentImage = ResizeImage( |
| const ExactAssetImage('assets/999x1000.png'), |
| width: (MediaQuery.of(context).size.width * 2).toInt() + imageIndex, |
| height: (MediaQuery.of(context).size.height * 2).toInt() + imageIndex, |
| allowUpscaling: true, |
| ); |
| }); |
| }); |
| }); |
| } |
| |
| @override |
| void dispose() { |
| _timer?.cancel(); |
| super.dispose(); |
| } |
| |
| @override |
| Widget build(BuildContext context) { |
| return Image(image: currentImage); |
| } |
| } |