// 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:ui'; import 'package:flutter/material.dart'; class RasterCacheUseMemory extends StatefulWidget { const RasterCacheUseMemory({super.key}); @override State createState() => _RasterCacheUseMemoryState(); } class _RasterCacheUseMemoryState extends State with TickerProviderStateMixin { final ScrollController _controller = ScrollController(); @override void initState() { super.initState(); _controller.addListener(() { if (_controller.offset < 5) { _controller.animateTo(20, duration: const Duration(milliseconds: 1000), curve: Curves.ease); } else if (_controller.offset >= 19) { _controller.animateTo(0, duration: const Duration(milliseconds: 1000), curve: Curves.ease); } }); Timer(const Duration(milliseconds: 1000), () { _controller.animateTo(150, duration: const Duration(milliseconds: 1000), curve: Curves.ease); }); } @override Widget build(BuildContext context) { return Scaffold( backgroundColor: Colors.lightBlue, body: ListView( controller: _controller, children: [ RepaintBoundary( child: ImageFiltered( imageFilter: ImageFilter.blur(sigmaX: 4, sigmaY: 4), child: RepaintBoundary(child: Container(width: 50, height: 50, color: Colors.red)), ), ), ShaderMask( shaderCallback: (Rect bounds) { return const RadialGradient( center: Alignment.topLeft, radius: 1.0, colors: [Colors.yellow, Colors.deepOrange], tileMode: TileMode.mirror, ).createShader(bounds); }, blendMode: BlendMode.srcATop, child: Opacity( opacity: 0.5, child: Column( children: [ ImageFiltered( imageFilter: ImageFilter.blur(sigmaX: 4, sigmaY: 4), child: Row( children: [ ImageFiltered( imageFilter: ImageFilter.blur(sigmaX: 4, sigmaY: 4), child: RepaintBoundary( child: Container( margin: const EdgeInsets.fromLTRB(10, 5, 10, 5), decoration: BoxDecoration( color: Colors.white70, boxShadow: const [BoxShadow(blurRadius: 5.0)], borderRadius: BorderRadius.circular(5.0), ), child: const FlutterLogo(size: 50), ), ), ), ], ), ), ], ), ), ), const RepaintBoundary(child: FlutterLogo(size: 50)), Container(height: 800), ], ), ); } @override void dispose() { _controller.dispose(); super.dispose(); } }