// 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';
import 'picture_cache.dart';

class ShaderMaskCachePage extends StatefulWidget {
  const ShaderMaskCachePage({Key? key}) : super(key: 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();
  }
}
