| // 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 'picture_cache.dart'; | |
| class ShaderMaskCachePage extends StatefulWidget { | |
| const ShaderMaskCachePage({super.key}); | |
| @override | |
| State<ShaderMaskCachePage> createState() => _ShaderMaskCachePageState(); | |
| } | |
| class _ShaderMaskCachePageState extends State<ShaderMaskCachePage> with TickerProviderStateMixin { | |
| final ScrollController _controller = ScrollController(); | |
| @override | |
| void initState() { | |
| super.initState(); | |
| _controller.addListener(() { | |
| if (_controller.offset < 10) { | |
| _controller.animateTo( | |
| 100, | |
| duration: const Duration(milliseconds: 1000), | |
| curve: Curves.ease, | |
| ); | |
| } else if (_controller.offset > 90) { | |
| _controller.animateTo(0, duration: const Duration(milliseconds: 1000), curve: Curves.ease); | |
| } | |
| }); | |
| Timer(const Duration(milliseconds: 500), () { | |
| _controller.animateTo(100, duration: const Duration(milliseconds: 1000), curve: Curves.ease); | |
| }); | |
| } | |
| @override | |
| Widget build(BuildContext context) { | |
| return Scaffold( | |
| backgroundColor: Colors.lightBlue, | |
| body: ListView( | |
| controller: _controller, | |
| children: <Widget>[ | |
| const SizedBox(height: 100), | |
| buildShaderMask(0), | |
| const SizedBox(height: 10), | |
| buildShaderMask(1), | |
| const SizedBox(height: 1000), | |
| ], | |
| ), | |
| ); | |
| } | |
| Widget buildShaderMask(int index) { | |
| return ShaderMask( | |
| shaderCallback: (Rect bounds) { | |
| return const RadialGradient( | |
| center: Alignment.topLeft, | |
| radius: 1.0, | |
| colors: <Color>[Colors.yellow, Colors.red], | |
| tileMode: TileMode.mirror, | |
| ).createShader(bounds); | |
| }, | |
| child: Container( | |
| clipBehavior: Clip.antiAlias, | |
| decoration: const BoxDecoration( | |
| boxShadow: <BoxShadow>[BoxShadow(color: Colors.white, blurRadius: 5.0)], | |
| ), | |
| child: ListItem(index: index), | |
| ), | |
| ); | |
| } | |
| @override | |
| void dispose() { | |
| _controller.dispose(); | |
| super.dispose(); | |
| } | |
| } |